PHP 8.1 内网漏洞扫描需离线优先:一查运行中各PHP二进制版本是否低于8.1.29/8.1.30;二查php.ini中cgi.force_redirect、allow_url_include等危险配置;三用Versionscan离线比对CVE、PMF扫描Web目录恶意痕迹,并验证加固配置生效。

PHP 8.1 网站部署在内网环境时,漏洞扫描不能依赖外部 SaaS 平台或互联网 CVE 实时库,需以本地化、离线优先、最小侵入为原则,重点验证三件事:
✅ 当前 PHP 二进制是否运行在已知高危小版本(如 或 <code>)<br>
✅ php.ini 和运行时配置是否存在危险项(如 <code>cgi.force_redirect=0、allow_url_include=1)
✅ Web 目录下是否残留被利用后的恶意痕迹(如异常 .php 文件、base64 编码脚本、临时上传文件)
一、先确认 PHP 版本与运行模式
内网无法联网查 CVE,但可通过命令快速定位风险基线:
-
查看实际运行的 PHP 版本(含 FPM/CGI/CLI 多实例):
php -v php-fpm -v /usr/bin/php-cgi -v # 若启用 CGI 模式
-
检查是否处于 Windows + CGI 高危组合(CVE-2024-4577):
php -i | grep -E "(Server API|System)" # 输出含 "CGI" 且系统为 "Windows" 即需紧急核查
-
找出所有 php.ini 路径并检查关键配置:
立即学习“PHP免费学习笔记(深入)”;
php --ini grep -E "^(cgi\.force_redirect|allow_url_include|auto_prepend_file|disable_functions)" /path/to/php.ini
⚠️ 注意:内网常见误区是只看
php -v显示的版本,却忽略实际 Web 服务调用的是/usr/local/bin/php-cgi等独立二进制——务必对每个可执行路径单独扫描。
二、用 Versionscan 离线比对 CVE(推荐首选)
Versionscan 支持完全离线运行,只需提前下载好 CVE 数据库快照(如 cve-data-202610.json),适合内网隔离场景。
-
安装(离线可用 Composer phar 或预编译二进制):
wget https://github.com/psecio/versionscan/releases/download/v3.1.0/versionscan.phar chmod +x versionscan.phar
-
扫描指定 PHP 版本(无需联网):
./versionscan.phar --php-version 8.1.25 --fail-only --cve-db ./cve-data-202610.json
若输出
CVE-2024-4577 (Critical)或CVE-2026-109618 (Critical),说明该小版本未修复,必须升级。
✅ 优势:不发请求、不读代码、不启服务,纯版本号区间匹配,零误报;支持导出 HTML 报告供审计留痕。
PHP 8.5.12下载修复 Core bailout 状态损坏安全问题,以及 BZ2、DOM、PDO、Opcache/JIT 内存与执行错误,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
三、检查 Web 目录是否存在利用痕迹(防“已打补丁但已被攻陷”)
即使 PHP 已升级,攻击者可能在漏洞窗口期植入后门。使用 PHP Malware Finder(PMF)+ 内网适配规则集:
-
准备 YARA 规则(提前从可信源下载,如官方 GitHub 的
php81_cves.yar):git clone https://github.com/rbsec/php-malware-finder.git cd php-malware-finder # 替换 rules/ 目录为内网审核过的 PHP 8.1 专用规则包
-
扫描网站根目录(跳过静态资源,聚焦
.php和可疑文件):./pmf.py --rules rules/php81_cves.yar /var/www/html/ --exclude "assets|css|js|images"
-
关键关注项:
- 含
eval(、assert(、base64_decode(、gzinflate(的短小 PHP 文件 - 文件名异常(如
wp-config-backup.php、shell_2024.php、x.php) - 修改时间接近已知漏洞披露日(如 2024-06-06 或 2026-10-21)
- 含
四、验证 php.ini 配置加固是否生效
内网扫描不是终点,要确认防护真正起效:
-
禁用危险函数(示例):
disable_functions = exec,passthru,shell_exec,system,proc_open,popen,pcntl_exec
-
关闭 CGI 风险项(若非必需):
cgi.force_redirect = 1 cgi.fix_pathinfo = 0 allow_url_include = Off
-
检查是否生效(写个探针脚本
test.php):<?php echo ini_get('disable_functions'); ?> <?php echo 'CGI: ' . (function_exists('cgi') ? 'yes' : 'no'); ?>访问该页面,确认输出与配置一致。
不复杂但容易忽略


















