本篇内容介绍了“PHP-fpm远程代码执行漏洞的影响及修复方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
漏洞复现
为了能更方便的复现漏洞,这里我们采用vulhub来构建漏洞环境。
https://github.com/vulhub/vulhub/tree/master/php/CVE-2019-11043
git pull并docker-compose up -d
访问http://{your_ip}:8080/
下载github上公开的exp(需要go环境)。
go get github.com/neex/phuip-fpizdam
然后编译
go install github.com/neex/phuip-fpizdam
使用exp攻击demo网站
phuip-fpizdam http://{your_ip}:8080/
攻击成功
漏洞分析
在分析漏洞原理之前,我们这里可以直接跟入看修复的commit
https://github.com/php/php-src/commit/ab061f95ca966731b1c84cf5b7b20155c0a1c06a#diff-624bdd47ab6847d777e15327976a9227
从commit中我们可以很清晰的看出来漏洞成因应该是path_info的地址可控导致的,再结合漏洞发现者公开的漏洞信息中提到
The regexp in `fastcgi_split_path_info` directive can be broken using the newline character (in encoded form, %0a). Broken regexp leads to empty PATH_INFO, which triggers the bug.
也就是说,当path_info被% 0 a截断时,path_info将被置为空,回到代码中我就不难发现问题所在了。