排查服务器是否受php2shell漏洞影响,核心在于确认运行环境是否存在未打补丁的旧版php-cgi二进制文件。使用`php -v`查看当前命令行环境的php版本,若版本号低于5.4.8、5.3.18或更早的安全版本,则存在风险;使用`php-fpm -v`(或检查fpm进程状态)确认web服务调用的php版本,若fpm进程仍指向旧版本且未重启升级,则web端同样受影响。只要任一组件版本过低,服务器即处于高危状态。

如何确认CLI环境PHP版本及风险
在Linux终端执行`php -v`命令可直接获取当前系统默认PHP解释器的版本信息。该命令输出第一行包含完整的版本号字符串,开发者需将其与CVE-2012-1823(PHP2Shell)的修复版本进行比对。如果输出的主版本小于5.4,或主版本为5.4但次版本小于8,或主版本为5.3但次版本小于18,则说明CLI环境存在漏洞。此步骤用于排除本地开发或脚本执行层面的直接利用风险。

php -v PHP 5.3.3 (cli) (built: Aug 28 2019 00:00:00) Copyright (c) 1997-2012 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies
上述输出显示版本为5.3.3,远低于安全阈值5.3.18,因此CLI环境确认为受影响状态。若输出为PHP 7.4.0或更高,则CLI端无此漏洞风险。注意,某些服务器可能安装了多个PHP版本,`php`命令可能指向旧版本别名,建议同时检查`which php`确认实际路径。
如何确认Web服务FPM环境PHP版本
Web服务通常通过FastCGI进程管理器(PHP-FPM)处理请求,其版本可能与CLI不同。执行`php-fpm -v`或检查Nginx/Apache错误日志中加载的模块版本,可确认Web端使用的PHP内核。若FPM进程对应的PHP版本低于安全补丁版本,即使CLI已升级,Web端仍可能被攻击者通过`.phpt`文件或特定Header注入恶意代码。必须确保Web服务调用的PHP二进制文件已更新至安全版本并重启FPM服务。

php-fpm -v PHP 5.4.7 (fpm-fcgi) (built: Jan 15 2020 12:00:00) Copyright (c) 1997-2012 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies
上述输出显示FPM环境版本为5.4.7,低于安全阈值5.4.8,因此Web端存在漏洞风险。攻击者可利用此版本通过`php-cgi`参数注入实现远程代码执行。若输出为PHP 8.0.0,则Web端无此漏洞。务必注意,仅升级CLI版本而不重启FPM服务,无法修复Web端的漏洞。
基于PHP 5.3.3版本的漏洞验证条件
当程序检测到PHP版本为5.3.3时,意味着服务器完全暴露在PHP2Shell漏洞之下。该版本既不在5.4.x的安全分支,也不在5.3.18之后的维护分支。在此条件下,攻击者可通过构造特殊的HTTP请求头或利用`.phpt`测试文件上传,触发`php-cgi`的参数解析漏洞,从而执行任意系统命令。此时,任何依赖PHP内置函数如`system()`、`exec()`的代码都可能被间接调用,导致服务器权限沦陷。必须立即升级PHP至5.3.18以上或5.4.8以上版本,并重启所有相关服务。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











