使用 php -v 命令排查 php2shell 漏洞影响版本时,核心在于识别 php 主版本号。该漏洞(cve-2024-4577)主要影响 php 8.3.11 之前的 8.3.x 系列以及 php 8.4.0 之前的 8.4.x 系列。执行 php -v 后,查看输出第一行中的版本号,若版本号小于 8.3.11 或处于 8.4.0 之前且非安全补丁版本,则存在风险。具体做法是运行命令并解析输出字符串,提取主版本和次版本进行比对。

如何从 php -v 输出中提取关键版本号?
直接回答:通过正则表达式匹配 php -v 的标准输出,可以准确提取出完整的版本号字符串。PHP 的 -v 标志会输出一行以 "PHP" 开头的文本,格式通常为 "PHP [version] (cli) ..."。利用这一固定格式,可以使用 preg_match 函数捕获版本号部分,从而为后续的版本比较提供数据基础。

$output = shell_exec('php -v');
preg_match('/^PHP ([\d.]+)/', $output, $matches);
if (isset($matches[1])) {
$version = $matches[1];
echo "Detected Version: $version\n";
}
上述代码首先调用系统命令获取版本信息,然后通过正则表达式 /^PHP ([\d.]+)/ 匹配以 "PHP" 开头并跟随数字和点号的字符串。如果匹配成功,$matches[1] 将包含类似 "8.3.10" 或 "8.4.0" 的版本号。这一步是排查流程的数据采集环节,确保获取到准确的运行时版本。
如何判断提取的版本号是否在受影响范围内?
直接回答:使用 PHP 内置的 version_compare 函数可以将提取出的版本号与受影响的截止版本进行比较。对于 8.3 分支,受影响版本为

version_compare
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











