CVE-2019-11043 Nginx PHP 遠程代碼執行漏洞復現

漏洞簡介:

來自Wallarm的安全研究員Andrew Danau在9月14-16號舉辦的Real World CTF中,意外的向服務器發送%0a(換行符)時,服務器返回異常信息。由此發現了這個0day漏洞,9月26日,PHP官方發佈漏洞通告,其中指出,使用Nginx+php-fpm的服務器,在部分配置下,存在遠程代碼執行漏洞。並且該配置已被廣泛使用,危害較大

漏洞概述:

Nginx上fastcgi_split_path_info在處理帶有%0a的請求時,會因爲遇到換行符\n導致PATH_INFO爲空。而php-fpm在處理PATH_INFO爲空的情況下,存在邏輯缺陷,攻擊者通過精心構造和利用,可以導致遠程代碼執行。

漏洞影響版本:

Nginx+php-fpm的服務器,在使用如下配置的情況下,都有可能存在遠程代碼執行的漏洞

location ~ [^/]\.php(/|$) {
  ...
  fastcgi_split_path_info ^(.+?\.php)(/.*)$;
  fastcgi_param PATH_INFO       $fastcgi_path_info;
  fastcgi_pass   php:9000;
  ...
    }

漏洞復現:

使用vulhub啓動環境:

github下載漏洞環境

git clone https://github.com/vulhub/vuhub/tree/master/php/CVE-2019-111043

POC下載:https://github.com/neex/phuip-fpizdam 

POC需要go語言編譯,需要go語言環境(linux下go語言安裝

漏洞啓動後,訪問http://yuo ip:8080/index.php即可查看到一個默認頁面

現在編譯POC,進入下載好的poc文件夾內,執行go build進行編譯,編譯好後,文件內出現phuip-fpizdam可執行文件

如果編譯失敗,顯示timeout,則需要設置代理,執行以下語句添加環境變量:

export GOPROXY=https://goproxy.io

使用編譯好的工具,發送數據包:

這裏已經成功執行,訪問http://ip:8080/index.php?a=whoami  即可查看到命令已經成功執行。

注意:因爲php-fpm會啓動多個子進程,在訪問index.php?a=id時需要多訪問幾次,以訪問被污染的進程

漏洞修復方式:

1.在不影響正常業務的情況下,刪除Nginx配置文件中如下配置:

fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_paramPATH_INFO       $fastcgi_path_info;

2.官網下載最新補丁

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章