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即可查看到一个默认页面

CVE-2019-11043 Nginx PHP 远程代码执行漏洞复现_第1张图片

现在编译POC,进入下载好的poc文件夹内,执行go build进行编译,编译好后,文件内出现phuip-fpizdam可执行文件

如果编译失败,显示timeout,则需要设置代理,执行以下语句添加环境变量:

export GOPROXY=https://goproxy.io

使用编译好的工具,发送数据包:

CVE-2019-11043 Nginx PHP 远程代码执行漏洞复现_第2张图片

这里已经成功执行,访问http://ip:8080/index.php?a=whoami  即可查看到命令已经成功执行。

CVE-2019-11043 Nginx PHP 远程代码执行漏洞复现_第3张图片

注意:因为php-fpm会启动多个子进程,在访问index.php?a=id时需要多访问几次,以访问被污染的进程

漏洞修复方式:

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

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

2.官网下载最新补丁

你可能感兴趣的:(php)