是,php 8.1.28 仍受 cve-2024-4577 影响,因其低于修复版本 8.1.29;该漏洞在 windows 下特定中文/日文代码页、cgi 模式启用且未关闭 php-cgi 路径时,可被公开 exp 一键远程执行代码。

php-cgi 在 PHP 8.1.28 中仍存在 CVE-2024-4577 漏洞,且已有公开 EXP。
PHP 8.1.28 是一个安全更新版本(发布于 2024 年 5 月 3 日),但它不包含对 CVE-2024-4577 的修复。该漏洞的官方修复是在 PHP 8.1.29 中发布的(2024 年 6 月 6 日后)。因此,8.1.28 属于“受影响版本”中明确列出的一环:PHP 8.1 。
CVE-2024-4577 的 EXP 已广泛公开
多个可信渠道已发布可复现的 EXP,无需登录、无需认证,构造简单:
- 典型 POC 请求路径示例:
/php-cgi/php-cgi.exe?%ADd+allow_url_include%3d1+%ADd+auto_prepend_file%3dphp://input - POST Body 直接送入 PHP 代码,如:
<?php system('whoami'); ?> - 关键触发字符
%AD(即字节 0xAD)会在简体中文(CP936)、繁体中文(CP950)、日文(CP932)等 Windows 代码页下被 Best-Fit 编码机制“映射”为 ASCII 空格或短横线,从而绕过php-cgi对非法参数的原始校验逻辑。
实际利用需满足三个硬性条件
- 运行环境为 Windows(Linux/macOS 不受影响)
- 系统区域设置使用 CP936 / CP950 / CP932(控制面板 → 区域 → 管理 → 更改系统区域设置)
- Web 服务器以 CGI 模式调用
php-cgi.exe,常见配置包括:Action cgi-script "/cgi-bin/php-cgi.exe"-
ScriptAlias /php-cgi/ "C:/xampp/php/"(XAMPP 默认开启) SetHandler application/x-httpd-php-cgi
为什么有些测试失败?
- 使用现代 HTTP 客户端(如 Postman、curl 8.4+)可能默认对 URL 进行二次编码,导致
%AD被转义成%25AD,服务端收不到原始字节 - Apache 的
mod_rewrite或 WAF(如 ModSecurity)若启用了 QUERY_STRING 规则拦截,可能提前阻断含%ad的请求 - PHP 若以
mod_php或php-fpm方式运行,此 EXP 完全无效——漏洞仅存在于 CGI SAPI 分支
当前(2026 年 10 月)仍有大量遗留 XAMPP、WAMP 或手工配置 CGI 的 Windows 测试/开发环境运行着 8.1.28,且未关闭 php-cgi 暴露路径,这类节点只要区域设置匹配,即可被一键 RCE。真正容易被忽略的不是 EXP 是否存在,而是管理员常误以为“升级到 8.1.28 就安全了”。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











