PHP-FPM 遠程代碼執行漏洞(CVE-2019-11043)
在長亭科技舉辦的 Real World CTF 中,國外安全研究員 Andrew Danau 在解決一道 CTF 題目時發現,向目標服務器 URL 發送 %0a 符號時,服務返回異常,疑似存在漏洞。
在使用一些有錯誤的Nginx配置的情況下,通過惡意構造的數據包,即可讓PHP-FPM執行任意代碼。
漏洞分析
首先使用docker搭建漏洞環境,進入bash環境,查看docker下的nginx的配置文件
cat /etc/nginx/conf.d/default.conf
會發現如下配置
當nginx進行如上特殊配置時就會觸發該漏洞
nginx配置fastcgi_split_path_info並以^開始以$結尾,這種條件下可以使用換行符%0a來破壞fast_split_path_info中指令中的正則的判斷,導致空PATH_INFO。
在nginx層面沒有定義對文件的檢查比如try_files $uri = 404,如果做了文件檢查則請求不會被轉發到php-fpm。
漏洞利用
下載工具----https://github.com/neex/phuip-fpizdam
首先需要要安裝go語言環境
解壓縮移動到/usr/local----mv go /usr/local/
sudo tar -zvxf go1.14.3.linux-amd64.tar.gz -C /usr/local
修改profile文件----leafpad /etc/profile
----最後一行加上export PATH=$PATH:/usr/local/go/bin
使配置的環境變量生效----source /etc/profile
查看版本信息----go version
安裝成功效果圖
然後就可以使用工具進行漏洞利用了,將工具下載好並解壓在終端中打開
這樣就執行成功,然後訪問網頁傳入參數實現遠程命令執行
這裏只有部分PHP-FPM子進程受到了污染,因此請嘗試幾次以執行該命令。
漏洞修復
-
下載補丁
-
刪除引起漏洞的配置
-
添加文件檢查相關配置----try_files $uri =404