CVE-2012-1823
提到PHP-CGI有關的漏洞 就不得不提起CVE-2012-1823 該漏洞利用php-cgi將使用者傳入的cgi資料中的query_string部分的-後引數當做了 指令碼的處理引數處理
攻擊者可以利用-d引數修改配置項 實現遠端命令執行的效果 也可以-i讀出原始碼
當時這個漏洞被apache修復了 修復的方式也很簡單 就是將-後的引數不作為指令碼引數解析 那實際上php-cgi還是能識別引數並執行的
if((query_string = getenv("QUERY_STRING")) != NULL && strchr(query_string, '=') == NULL)
{
/* we've got query string that has no = - apache CGI will pass it to command line */
unsigned char *p;
decoded_query_string = strdup(query_string);
php_url_decode(decoded_query_string,strlen(decoded_query_string));
for (p = decoded_query_string; *p && *p <= ' '; p++)
{
/* skip all leading spaces */
} if(*p == '-') {
skip_getopt = 1; // 就在這裡 當檢測到 - 後就會跳過解析
}
free(decoded_query_string);
}
CVE2024-4577
作為一個新的漏洞 其被我們祖國的臺灣的orange老師發現
簡單的說 這個漏洞就是繞過了-符號
在中介軟體為Unicode但作業系統使用的為中文 日文 繁體 等中南亞國家文字編碼時 需要編碼適配
編碼適配時 會匹配best-fit 匹配後會將超出限度的編碼適配到可表示的編碼
詳見:
https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit936.txt
有這麼一條編碼適配 現在我們只要使用0xad替換-進行測試
這個漏洞常見於 xampp xampp是國外常用的中介軟體 其中介軟體編碼預設為Unicode 當安裝主機使用中文編碼後會觸發最佳適配
但是這個漏洞的前提是 apache使用php-cgi解析cgi資料 但是一般中介軟體不會再使用php-cgi 而是使用效率更好的 php-mod php-fpm來解析
但是xampp會把php-cgi放在預設的cgi目錄下 我們可以直接透過目錄訪問php-cgi
但是預設配置中php-cgi是不允許直接訪問的
cgi.force_redirect=1
強制重定向選項 只接受重定向來的資料 對直接訪問的資料不處理
但是 我們可以利用最新的漏洞 用-d選項把強制重定向給關閉了
如上圖 新增選項並透過 phpinput偽協議 可以實現任意命令執行