修复是否真正生效,关键在三件事:运行环境对得上、原始漏洞路径还能不能走通、关键防护配置是不是真起作用;需验证真实FPM版本、用原始PoC复现、检查disable_functions等配置是否生效并重载。

不能只看版本号更新或扫描报告变绿。修复是否真正生效,关键在三件事:运行环境对得上、原始漏洞路径还能不能走通、关键防护配置是不是真起作用。
一、确认 Web 服务实际用的确实是新版本
PHP 常存在 CLI、FPM、Apache mod_php 多版本并存的情况。扫描工具若只读 php -v 或伪造的 SERVER_SOFTWARE,结果不可信。
- 在网站根目录临时放一个 info.php(内容为
),用浏览器访问,看顶部 “PHP Version” 和 “Server API” 字段 - 登录服务器,执行
php-fpm -v或php-fpm8.4 -v(根据你实际安装命名),确认输出和 info.php 一致 - 如果用 Docker,必须进容器内执行
php-fpm -v,不能只看镜像标签 - 检查
Loaded Configuration File路径下的 php.ini 中expose_php = Off是否生效,避免被误判为旧版本
二、用原始 PoC 直接打原来那个漏洞点
官方补丁不是“全局免疫”,而是修复特定触发路径。复测必须回到漏洞通报里写的那个请求方式。
- 找到漏洞公告中明确的 PoC(比如含恶意序列化 payload 的 POST body、特定 SOAP XML、或构造的
?s=/think\app\invokefunctionURL) - 用 Burp Repeater 或 curl 模拟原始请求,观察响应:是否仍返回 200 + 敏感信息?是否触发 segmentation fault 日志?是否成功写入
/tmp/shell.php? - 特别注意行为变化:比如 CVE-2026-109618 是 OOM 后状态残留,就要发两个紧挨着的畸形 multipart 请求,看服务会不会崩溃或返回异常响应体
三、验证关键配置项是否真正加载并生效
很多“已升级”站点仍因配置未重载、被覆盖或未启用而持续暴露。
- 查
disable_functions:不仅看 phpinfo() 页面,还要执行php -r "echo function_exists('exec') ? 'enabled' : 'disabled';" - 验
open_basedir:是否设为合理路径(如/var/www/html),而不是宽泛的/var/www/html:/tmp - 盯
session.upload_progress.enabled和memory_limit:这两个是 CVE-2026-109619/109618 的关键开关,必须为Off和-1或足够大 - 改完配置后,必须执行
sudo systemctl reload php8.4-fpm(或对应服务名),不能只改不重载
四、扫几个高危但容易被忽略的绕过点
修复 A 功能,不代表 B 入口也安全。尤其注意这些常被漏掉的“后门”:
-
SOAP 扩展:即使 PHP 是 8.4.27,只要
extension=soap.so开着,且业务调用了SoapServer::handle()解析外部 XML,就可能被绕过利用 -
反序列化链:全局搜项目里有没有
unserialize($_GET['data'])或缓存反序列化逻辑——PHP 版本升了,gadget 链还在,照样 RCE -
间接执行函数:如
mail()、imap_open()、error_log()等,常不在默认disable_functions列表里,却是命令执行的跳板
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











