PHP-FPM 远程代码执行漏洞(CVE-2019-11043)

PHP-FPM 远程代码执行漏洞(CVE-2019-11043)

文章目录

  • PHP-FPM 远程代码执行漏洞(CVE-2019-11043)
    • 漏洞分析
    • 漏洞利用
    • 漏洞修复

在长亭科技举办的 Real World CTF 中,国外安全研究员 Andrew Danau 在解决一道 CTF 题目时发现,向目标服务器 URL 发送 %0a 符号时,服务返回异常,疑似存在漏洞。

在使用一些有错误的Nginx配置的情况下,通过恶意构造的数据包,即可让PHP-FPM执行任意代码。

漏洞分析

首先使用docker搭建漏洞环境,进入bash环境,查看docker下的nginx的配置文件

cat /etc/nginx/conf.d/default.conf

会发现如下配置

PHP-FPM 远程代码执行漏洞(CVE-2019-11043)_第1张图片

当nginx进行如上特殊配置时就会触发该漏洞

nginx配置fastcgi_split_path_info并以^开始以$结尾,这种条件下可以使用换行符%0a来破坏fast_split_path_info中指令中的正则的判断,导致空PATH_INFO。

在nginx层面没有定义对文件的检查比如try_files $uri = 404,如果做了文件检查则请求不会被转发到php-fpm。

漏洞利用

下载工具----https://github.com/neex/phuip-fpizdam

首先需要要安装go语言环境

解压缩移动到/usr/local----mv go /usr/local/

sudo tar -zvxf go1.14.3.linux-amd64.tar.gz -C /usr/local

修改profile文件----leafpad /etc/profile----最后一行加上export PATH=$PATH:/usr/local/go/bin

使配置的环境变量生效----source /etc/profile

查看版本信息----go version

PHP-FPM 远程代码执行漏洞(CVE-2019-11043)_第2张图片

安装成功效果图

然后就可以使用工具进行漏洞利用了,将工具下载好并解压在终端中打开

PHP-FPM 远程代码执行漏洞(CVE-2019-11043)_第3张图片

这样就执行成功,然后访问网页传入参数实现远程命令执行

PHP-FPM 远程代码执行漏洞(CVE-2019-11043)_第4张图片

这里只有部分PHP-FPM子进程受到了污染,因此请尝试几次以执行该命令。

漏洞修复

  1. 下载补丁

  2. 删除引起漏洞的配置

  3. 添加文件检查相关配置----try_files $uri =404

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