CVE-2024-4577 PHP RCE 再次来袭!

admin 2024年6月8日14:17:09评论15 views字数 2426阅读8分5秒阅读模式
声明:该公众号大部分文章来自作者日常学习笔记,也有部分文章是经过作者授权和其他公众号白名单转载,未经授权,严禁转载,如需转载,联系开白。
请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者和本公众号无关。

现在只对常读和星标的公众号才展示大图推送,建议大家把潇湘信安设为星标”,否则可能看不到了

文章来源: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。不幸的是,配置选项的范围很广,很难确切地证明一个实例是否存在漏洞。正因为如此,我们开始重现这个漏洞——如果我们可以利用它,那就是证明可利用性的最佳方式,对吧?

阅读博客后,很明显该错误仅影响 PHP 的 CGI 模式。在此模式下,Web 服务器解析 HTTP 请求并将其传递给 PHP 脚本,然后脚本对其进行一些处理。例如,查询字符串被解析并传递给命令行上的 PHP 解释器 - 例如,诸如 as 的请求http://host/cgi.php?foo=bar 可能会被执行为 php.exe cgi.php foo=bar 
当然,这确实为命令注入提供了途径,这就是为什么在调用之前要仔细处理和清理输入php.exe。然而,似乎有一个开发人员没有考虑到的极端情况,这允许攻击者突破命令行并提供由 PHP 本身解释的参数。这个极端情况与 unicode 字符如何转换为 ASCII 有关。最好用一个例子来解释这一点。
以下是 php.exe 的两次调用,一次是恶意的,一次是良性的。你能发现区别吗?
CVE-2024-4577 PHP RCE 再次来袭!

不,我也不行。让我们在十六进制编辑器中看一下,看看是否能给我们任何线索。

CVE-2024-4577 PHP RCE 再次来袭!

嗯,很有趣——在这里我们可以看到,第一次调用使用了普通的破折号 (0x2D),而第二次调用似乎使用了完全不同的东西(显然是“软连字符”),代码为 0xAD(突出显示)。虽然它们对你我来说都是一样的,但对操作系统来说,它们的含义却大不相同。

这里的一个重要细节是,Apache 会转义实际的连字符 0x2D,但不会转义第二个“软连字符”0xAD。毕竟,它不是真正的连字符,对吧?所以没有必要转义它……对吧?
CVE-2024-4577 PHP RCE 再次来袭!

好吧。事实证明,作为 Unicode 处理的一部分,PHP 将应用所谓的“最佳匹配”映射,并假设当用户输入软连字符时,他们实际上想要输入真正的连字符,并将其解释为真正的连字符。这就是我们的弱点所在 - 如果我们为 CGI 处理程序提供软连字符 (0xAD),CGI 处理程序将不会觉得有必要对其进行转义,而是会将其传递给 PHP。然而,PHP 会将其解释为真正的连字符,这允许攻击者将以连字符开头的额外命令行参数偷偷带入 PHP 进程。

这与较早的 PHP 漏洞 CVE-2012-1823 非常相似,因此我们可以借用针对此较早漏洞开发的一些利用技术,并对其进行调整以应对我们的新漏洞,一篇有用的文章建议。
https://pentesterlab.com/exercises/cve-2012-1823/course

要将我们的注入转化为 RCE,我们应该注入以下参数:

-d allow_url_include=1 -d auto_prepend_file=php://input
这将接受来自请求主体的输入,并使用 PHP 进行处理。很简单 - 让我们尝试使用 0xAD“软连字符”而不是通常的连字符的版本。也许这足以绕过转义?
POST /test.php?%ADd+allow_url_include%3d1+%ADd+auto_prepend_file%3dphp://input HTTP/1.1Host: {{host}}User-Agent: curl/8.3.0Accept: */*Content-Length: 23Content-Type: application/x-www-form-urlencodedConnection: keep-alive<?phpphpinfo();?>

哦,太高兴了——我们收到了一页奖励phpinfo,表明我们确实实现了 RCE。

CVE-2024-4577 PHP RCE 再次来袭!

结论

一个非常严重的漏洞,但利用起来非常简单——非常适合周五下午。

不过幸运的是,补丁已经可用,因此我们赞同 Orange Tsai 的建议,升级您的 PHP 安装。一如既往,出色的工作,向 Orange Tsai 致敬。
那些在受影响的语言环境(简体中文或繁体中文或日语)下运行受影响配置的用户,请尽快执行此操作,因为由于漏洞利用复杂性低,该漏洞很有可能被大规模利用。我们仍然强烈建议其他用户更新:

对于其他语言环境(例如英语、韩语、西欧等)的 Windows,由于 PHP 使用场景十分广泛,目前尚无法完全列举并杜绝所有潜在漏洞利用场景,因此建议用户进行全面的资产评估,核实自身使用场景,并将 PHP 更新至最新版本,确保安全。

原文始发于微信公众号(潇湘信安):CVE-2024-4577 PHP RCE 再次来袭!

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年6月8日14:17:09
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CVE-2024-4577 PHP RCE 再次来袭!https://cn-sec.com/archives/2831080.html

发表评论

匿名网友 填写信息