PHP 8.4.2 本身不存在文件包含漏洞,真正需关注的是影响 8.4.0–8.4.26 的“PHP2Shell”远程代码执行漏洞(CVE-2026-109618/109619),修复版本为 8.4.27。

PHP 8.4.2 并不包含已知的文件包含漏洞(LFI/RFI),它本身不是漏洞版本,而是早期、存在严重安全风险的过渡版本。真正需要关注的是:PHP 8.4.27 是官方为修复两个高危漏洞(CVE-2026-109618 和 CVE-2026-109619)发布的紧急修复版,而这两个漏洞被统称为“PHP2Shell”,属于远程代码执行类漏洞,与传统文件包含无直接关系,但利用链中可能涉及文件读取或写入环节。
所以严格来说,不存在“PHP 8.4.2 文件包含漏洞”的概念;测试重点应转向验证是否运行了含 PHP2Shell 漏洞的旧版(如 8.4.2~8.4.26),并确认其是否可被触发任意命令执行——这比单纯测 LFI 更危险、更关键。
确认当前 PHP 版本是否在风险范围内
执行以下命令查看真实版本:
php -v
若输出类似 PHP 8.4.2、8.4.15 或 8.4.26,则属于受影响版本(8.4.x 中所有低于 8.4.27 的版本均不安全)。
立即学习“PHP免费学习笔记(深入)”;
修复 Core bailout 状态损坏安全问题,以及 BZ2、DOM、PDO、Opcache/JIT 内存与执行错误,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
注意:仅看 phpinfo() 页面或 $_SERVER['SERVER_SOFTWARE'] 可能被篡改,优先以 CLI 命令为准。
PHP2Shell 漏洞的典型验证方式(非传统 LFI)
该漏洞本质是内存管理缺陷引发的类型混淆+UAF,最终导向 RCE。目前公开的可靠复现方式仍依赖特定上下文(如配合某些扩展或序列化场景),但可观察以下高风险信号:
- 应用使用了 unserialize() 且未严格限制
allowed_classes(PHP 8.4 对该选项行为已变更,旧逻辑可能失效) - 存在接收用户输入并传入 file_get_contents()、include()、require() 的路径参数,且未做白名单过滤(例如
?page=../../etc/passwd) - Web 服务返回异常详细的错误信息(如显示
__HALT_COMPILER()、Phar::mapPhar或内存地址偏移),说明底层反序列化机制暴露
实际可用的快速检测建议
不推荐盲目发送 LFI payload,而应聚焦于验证 PHP2Shell 是否可被触发。以下是较稳妥的操作路径:
- 检查 Web 应用是否使用了已知高危组件(如旧版 Laravel Ignition、老版本 phpMyAdmin、未更新的 WordPress 插件),这些是 PHP2Shell 的常见入口点
- 对疑似接口尝试发送带 Phar 伪协议的请求,例如:
GET /index.php?file=phar://example.phar/test.txt HTTP/1.1
若返回PharException或解析出内容,说明 Phar 反序列化未禁用,风险升高 - 使用 phpggc 生成针对 PHP 8.4 环境的 gadget 链,配合目标应用的 autoload 或 error handler 触发点进行试探(需具备基础反序列化知识)
最有效的缓解动作
PHP 官方明确表示:没有临时缓解措施,升级是唯一安全选择。
- 立即将 PHP 升级至 8.4.27 或更高版本(如 8.4.28+)
- 同步检查并更新所有基于 PHP 的 CMS 和框架(WordPress、Drupal、Laravel、Nextcloud 等),因它们可能自带漏洞利用面
- 禁用危险函数(
unserialize、eval、assert、create_function)在生产环境中的使用,通过disable_functions配置项落实 - 确保
phar.readonly = On(默认值),防止 Phar 文件被动态执行


















