php 5.3.11 是 cve-2012-1823 受影响版本,但是否真实存在风险取决于是否以 cgi/fastcgi 模式运行、php-cgi 是否可被 web 直接访问、以及 cgi.force_redirect 是否为 0;仅版本号匹配不构成充分风险条件。

PHP 5.3.11 自身不是漏洞,但它是 CVE-2012-1823(PHP-CGI 参数注入)的受影响版本之一,且该漏洞在 CGI 模式下可被直接利用。判断是否存在风险,关键不是“版本是否等于 5.3.11”,而是确认:当前 PHP 是否以 CGI 模式运行 + 是否暴露了 php-cgi 可执行文件 + 是否未禁用参数解析。
确认 PHP 是否运行在 CGI 模式
只有 CGI/FastCGI 模式才受 CVE-2012-1823 影响;Apache 模块(mod_php)、嵌入式 SAPI 等不在此列。
- 执行
php -i | grep "Server API",输出为Server API => CGI/FastCGI才需警惕 - 若输出是
apache2handler或embed,该漏洞实际不可利用 - Web 环境中,访问
phpinfo.php页面,搜索 “Server API” 字段,结果同上
检查 php-cgi 是否可被 Web 直接访问
攻击者需能通过 HTTP 请求直接调用 php-cgi 二进制(如 http://site.com/php-cgi/php-cgi.exe?%2D%64+allow_url_include%3DOn+%2D%64+auto_prepend_file%3Dphp://input),所以必须确认其路径是否暴露。
- 常见暴露路径:
/php-cgi.exe(Windows)、/cgi-bin/php、/php-cgi、/bin/php-cgi - 用 curl 测试:
curl -I http://your-site.com/php-cgi -H "User-Agent: test",若返回200 OK或502 Bad Gateway(说明后端有响应),而非404或403,即存在暴露风险 - 注意:某些 Nginx 配置会把所有
.php请求转发给php-fpm,此时php-cgi文件本身并不对外提供 HTTP 接口,不构成此漏洞入口
验证参数解析是否开启(关键绕过点)
即使 CGI 模式启用,现代 PHP 默认禁用外部传参(disable_functions 不影响此行为,但 cgi.force_redirect 和 cgi.redirect_status_env 等配置起决定作用)。
- 查看
php.ini中:cgi.force_redirect = 1(默认值,安全);若为0,则风险显著上升 - 检查
php -i | grep cgi输出中:cgi.check_shebang_line => On是正常值;若出现cgi.fopen_wrapper => Off单独不能说明问题,但结合force_redirect = 0就危险 - 最直接验证方式:发一个带参数的请求,如
curl "http://site.com/php-cgi/php-cgi.exe?-v",若返回 PHP 版本信息(而非 500/404),说明参数解析未被阻断,漏洞可利用
为什么不能只看 php -v 显示 5.3.11 就判定有漏洞
版本号只是必要非充分条件。同一台服务器可能同时装有多个 PHP 版本,Web 服务实际调用的未必是命令行看到的那个;更重要的是,漏洞触发依赖运行模式与 Web 服务器配置组合,而非孤立版本字符串。
-
php -v显示 5.3.11,但 Apache 用的是libphp5.so(模块模式)→ 无风险 - Nginx + php-fpm 架构下,
php-cgi进程由 fpm master 管理,不监听 HTTP → 即使磁盘上有 php-cgi 文件,也无法被 URL 直接调用 → 无风险 - 即使 CGI 暴露,但
cgi.force_redirect = 1且 Web 服务器正确设置了REDIRECT_STATUS环境变量 → 请求会被拒绝 → 实际不可利用
真正要盯住的,是 CGI 暴露路径是否存在、能否接收并解析查询参数、以及底层是否真在用那个旧版本处理请求——这三者缺一不可。很多所谓“扫描出 5.3.11 漏洞”的报告,其实只比对了版本号,没验证运行上下文,误报率极高。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











