欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

CVE-2019-11043 Nginx PHP 远程代码执行漏洞复现

程序员文章站 2022-07-15 11:59:53
...

漏洞简介:

来自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 远程代码执行漏洞复现

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

CVE-2019-11043 Nginx PHP 远程代码执行漏洞复现

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

export GOPROXY=https://goproxy.io

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

CVE-2019-11043 Nginx PHP 远程代码执行漏洞复现

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

CVE-2019-11043 Nginx PHP 远程代码执行漏洞复现

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

漏洞修复方式:

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

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

2.官网下载最新补丁

相关标签: php php漏洞复现