CVE-2024-4577是PHP在Windows平台CGI模式下的远程代码执行漏洞,成因是PHP未考虑Windows的Best-Fit字符编码转换特性,攻击者可构造软连字号等字符绕过CVE-2012-1823防护并执行任意代码;影响PHP 8.1 < 8.1.29、8.2 < 8.2.20、8.3 < 8.3.8,XAMPP等默认启用CGI的环境风险突出,官方于2024年6月6日发布补丁修复。

指攻击者输入的数据被拼接到系统命令中,由操作系统shell(如cmd.exe、bash)直接执行。例如:
- PHP调用
system("ping " . $_GET['host']),且未过滤用户输入 - 攻击者传入
?host=127.0.0.1%26whoami,导致执行ping 127.0.0.1 & whoami - 依赖外部程序(ping、curl、convert等),本质是OS层的命令注入
远程代码执行(RCE中的Code Execution)
指攻击者输入的数据被当作PHP(或其他语言)代码本身解析并执行,不经过shell,而是由PHP引擎直接运行。例如:
- 使用
eval($_POST['code'])或assert($_GET['a']) - CVE-2024-4577正是这类:攻击者通过特殊编码字符绕过参数校验,让PHP-CGI将恶意字符串识别为PHP代码并执行
- 无需调用外部命令,可直接读文件、写Webshell、连接数据库
为什么CVE-2024-4577属于远程代码执行而非命令执行
该漏洞利用的是Windows系统在CGI模式下对命令行参数的“Best-Fit”字符编码转换缺陷,诱使PHP-CGI错误地将攻击载荷(如-d allow_url_include=1 -d auto_prepend_file=php://input)当作PHP配置参数和执行入口,最终让PHP引擎加载并执行攻击者提交的任意PHP代码。整个过程不依赖system()、exec()等函数,也不触发cmd/bash,是纯粹的PHP运行时代码执行。
PHP 8.2.29用户需要做什么
这个版本本身无此漏洞,但需确认实际运行环境:
立即学习“PHP免费学习笔记(深入)”;
- 是否真的在用8.2.29(可通过
php -v验证),而非误认XAMPP等集成包显示的版本号 - 是否仍在Windows + CGI模式 + 中文/日文/繁体语系环境下运行(这是CVE-2024-4577的必要条件)
- 即使版本已更新,也建议禁用PHP-CGI模式,改用更安全的PHP-FPM或模块化部署(如Apache的mod_php)



















