在实现PHP时,开发团队未注意到Windows操作系统内编码转换的Best-Fit特性。这一疏忽导致未认证的攻击者能够通过特定字符序列绕过之前CVE-2012-1823的防护措施。通过参数注入攻击,可以在远程PHP服务器上执行任意代码。
此PoC仅用于学习和研究目的。请勿将其用于非法活动;您应对任何法律后果承担全部责任。
此漏洞由DEVCORE (@d3vc0r3)的Orange Tsai (@orange_8361)发现。请务必关注他的卓越研究,我们仅负责复现并开发针对此问题的利用工具。
为什么在已有许多公开PoC的情况下,还需要重写利用脚本?
由于许多公开的PoC基于相同的原始利用代码,许多厂商已将这些PoC作为参考,并屏蔽了某些关键词以防止被利用。然而,他们往往忽略了屏蔽所有可能的利用向量。为了解决这个问题,该脚本包含一个生成随机参数的简单机制,以及不同的LFI到RCE利用方法,以提高PHP CGI注入导致RCE的成功率。
在一次尝试复现环境漏洞的测试中,我发现在无论如何调整,我的PoC始终触发HTTP 500错误。由于我在漏洞环境中工作,我开始调查错误的原因。随后,我回想起Devcore的一篇文章提到,在某些利用场景中,服务器会返回HTTP 500错误,但实际上RCE利用是成功的。考虑到这一点,我决定测试是否能在本地弹出 calc.exe,结果令人惊讶——它竟然成功了!这是一个盲RCE!
然而,当我检查Apache错误日志时,发现了一个与 allow_url_include 相关的错误,尽管攻击已经成功执行(我仍然不完全理解根本原因;如果你有见解,请联系我)。这促使我创建了一个包含测试盲RCE选项的利用工具😊。
如果你的目标是Windows 7之前的操作系统版本,你仍然可以通过其他方法升级到可见的RCE或反弹shell。但这些技术超出了本文的范围,我们不会详细讨论。作为渗透测试人员或红队专家,你应该能很快找到替代解决方案,这可能是一个有趣的过程😉。
2024年11月15日更新
由于工作需要,我持续改进了脚本,使其尽可能兼容所有环境,并最大化实现RCE的机会。这一努力是因为某些目标无法使用许多公开PoC成功执行PHP。最终,我意外地解决了这个问题,成功克服了几乎所有出现500错误的情况,并成功显示了PHP的执行结果。因此,盲RCE似乎不再那么重要了。 😧
利用条件
你需要安装依赖项:
$ python3 -m pip install requests 直接运行脚本即可获取使用说明。你可以运行以下命令来验证目标是否存在漏洞。
$ python3 CVE-2024-4577.py <target> <php shell>

如果目标存在利用条件,你可以将PHP执行结果保存到本地,这对于那些需要查看phpinfo的人很有帮助。
$ python3 CVE-2024-4577.py <target> "phpinfo()" --save info.html

当目标存在盲RCE漏洞时,脚本会尝试监听本地端口,并触发目标服务器执行PHP,发送请求以验证利用是否存在。当收到请求时,表示目标服务器已成功执行命令。
