php2shell漏洞与session.upload_progress无直接功能关系,但后者常被用作攻击跳板:因其强制multipart解析、可控内存压力、可干预状态机等特性,能有效触发php2shell的oom路径use-after-free和状态重置缺陷。

PHP2Shell 和 session.upload_progress 没有直接的功能关系,但存在关键的攻击面交集:session.upload_progress 是 PHP 原生支持的上传进度追踪机制,而 PHP2Shell 漏洞(CVE-2026-109618 / CVE-2026-109619)的实际利用链中,常以该机制为入口或跳板。
PHP2Shell 的本质是内存管理缺陷,不是 upload_progress 功能漏洞
两个 PHP2Shell 漏洞都源于请求生命周期中的状态清理异常:
创建全面的交接文档,使新AI代理能够无缝继续工作,消除歧义。解决上下文耗尽问题。 时机:(1)用户请求保存交接,(2)上下文即将满,(3)主要任务完成,(4)会话结束,(5)恢复工作时。 关键词:保存状态、创建交接、上下文已满、暂停、从...恢复、加载交接、保存进度、会话转移、交接
- 一处在 OOM(内存超限)异常路径下未清空已释放内存对象(Use-After-Free)
- 另一处在多请求复用进程时,全局状态重置时机错误
它们不依赖session.upload_progress开启与否,而是利用 PHP-FPM 或 mod_php 这类长驻进程模型中请求间内存/状态残留这一底层特性。
为什么攻击者频繁结合 session.upload_progress?
因为该机制天然满足 PHP2Shell 触发所需的几个关键条件:
- ✅ 强制触发 multipart/form-data 解析:启用
session.upload_progress.enabled后,只要请求含enctype="multipart/form-data"且携带特定隐藏字段(如name="PHP_SESSION_UPLOAD_PROGRESS"),PHP 就会进入深度文件解析流程,大幅增加内存压力与状态复杂度 - ✅ 可控的长耗时、高内存占用路径:上传大文件 + 高频进度更新(如
freq="0.1%")可稳定诱发 OOM 边界场景,放大内存管理缺陷 - ✅ 服务端状态可预测、可干预:攻击者能通过构造
filename=""等 RFC 允许的边界值,配合$_SESSION写入,影响解析器内部状态机流转,为 Use-After-Free 创造内存布局条件 - ✅ 无需认证、HTTP 即可投递:和 PHP2Shell 整体特性一致,仅靠一个恶意 POST 请求即可启动整条利用链
实际攻击中常见组合模式
- 在 CTF 或真实渗透中(如 XNUCA2019 EasyPHP 题),攻击者先用
session.upload_progress写入恶意 payload 到临时 session 文件(如/tmp/sess_*),再通过本地文件包含(LFI)+ php://filter 读取并触发反序列化或代码执行 - 更高级的 PHP2Shell 利用则绕过 LFI,直接在 multipart 解析阶段,借
upload_progress触发的内存混乱,劫持函数指针或覆盖 Zend VM 指令流,实现无文件落地的 RCE
防护上不能“关掉 upload_progress 就安全”
- 关闭
session.upload_progress.enabled可消除上述利用路径之一,但无法防御 PHP2Shell 本身——攻击者可换用其他 multipart 边界场景(如畸形 boundary、超长 header、嵌套 multipart)达成相同效果 - 真正有效的缓解措施是:
- 立即升级到官方已修复版本(PHP 官方已于 2026-10-21 发布补丁)
- 若暂无法升级,将 PHP-FPM
pm.max_requests设为 1(强制每请求新建进程,破坏状态复用前提) - 严格限制
upload_max_filesize和client_max_body_size,减少 OOM 触发概率 - Web 层 WAF 规则应拦截含
filename=""、name="PHP_SESSION_UPLOAD_PROGRESS"且无合法业务逻辑的 multipart 请求
不复杂但容易忽略。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










