LFI本身不能直接getshell,但可作为跳板:需结合日志注入、Session文件包含、/proc/self/fd读取或php://filter等条件才能升级为RCE;PHP 8.0因allow_url_include关闭、open_basedir限制及session.upload_progress.cleanup默认开启,进一步抬高利用门槛。

PHP 8.0 的文件包含漏洞(LFI)本身不能直接 getshell,但它是通向 getshell 的关键跳板——是否能落地,取决于环境配合条件。
修复 Core bailout 状态损坏安全问题,以及 BZ2、DOM、PDO、Opcache/JIT 内存与执行错误,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
本地文件包含(LFI)的局限性
单纯的 LFI 只能读取服务器上的文件,比如:
– /etc/passwd(确认系统用户)
– /proc/self/environ(若 Apache + mod_cgi 启用)
– Web 日志文件(如 /var/log/apache2/access.log)(需日志可写且可控输入)
– PHP session 文件(/var/lib/php/sessions/)(需 session.save_path 可预测、session.upload_progress.enabled 开启)
这些只是信息收集或间接利用的入口,不等于已执行命令。
能 getshell 的典型组合路径
LFI 要升级为 RCE 或 getshell,常见依赖以下至少一项:
- 日志注入 + LFI:通过 User-Agent 或 Referer 注入 PHP 代码到访问日志,再用 LFI 包含该日志文件触发解析
- PHP session 文件包含:若 session.upload_progress.enabled=On(PHP 默认开启),攻击者可上传含恶意 payload 的文件并控制 session 名,再包含对应 session 文件执行代码
- /proc/self/fd/xx 文件描述符读取:在某些配置下(如 PHP-FPM + nginx fastcgi_split_path_info 不当),可利用 LFI 读取正在处理的请求体,进而注入并包含
- php://filter + base64 编码读取源码:虽不能执行,但可获取加密 key、数据库配置、硬编码密钥等,辅助后续横向或爆破
特别注意 PHP 8.0 的现实约束
PHP 8.0 默认禁用了一些高危特性,例如:
– allow_url_include = Off(无法直接远程包含 php://input 或 data:// 等伪协议)
– open_basedir 若启用,会限制文件读取范围
– session.upload_progress.cleanup 默认为 On,导致上传进度 session 数据很快被清理,增大利用难度
这意味着:即使发现 ?page=../../etc/passwd 这类 LFI,也大概率无法直接构造出稳定 getshell 链,必须结合具体中间件、配置、权限和业务逻辑来推进。
当前高危替代风险:别忽略 PHP2Shell
比起传统 LFI,更需警惕的是近期爆发的 CVE-2026-109618/109619(PHP2Shell):
– 影响 PHP 8.2.35 之前所有主流版本,包括 PHP 8.0.x 全系列(未单独豁免)
– 利用 session.upload_progress 机制缺陷,无需登录、无需 LFI,一个特制上传请求即可 RCE
– CVSS 9.2,修复必须升级至 PHP 8.2.35+(PHP 8.0 已 EOL,官方不再提供补丁)
如果你的系统还在跑 PHP 8.0,优先评估是否受此核弹级漏洞影响,它比 LFI 更直接、更危险。


















