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

会发现如下配置

在这里插入图片描述

当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子进程受到了污染,因此请尝试几次以执行该命令。

漏洞修复

  1. 下载补丁

  2. 删除引起漏洞的配置

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章