Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
php2shell-CVE-2026-109618-CVE-2026-109619-PoC — php2shell(CVE-2026-109618 / CVE-2026-109619)的概念验证(PoC)漏洞利用,演示在存在漏洞的 PHP 环境中实现远程代码执行。仅用于安全研究和教育目的。 | Kitploit
工具/GitHubGitHub/eness/php2shell-cve-2026-109618-cve-2026-109619-poc
内存取证漏洞分析漏洞利用Web应用程序漏洞利用渗透测试学习与教育远程访问工具
GitHubeness/php2shell-cve-2026-109618-cve-2026-109619-poc

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

php2shell-CVE-2026-109618-CVE-2026-109619-PoC

php2shell(CVE-2026-109618 / CVE-2026-109619)的概念验证(PoC)漏洞利用,演示在存在漏洞的 PHP 环境中实现远程代码执行。仅用于安全研究和教育目的。

查看仓库
780171414小时48分前尚未审核

php2shell — CVE-2026-109618 / CVE-2026-109619

php2shell — CVE-2026-109618 / CVE-2026-109619

严重安全公告(CVSS v4.0:9.2 - 严重): 2026 年 10 月 20 日,PHP 核心中两个预认证远程代码执行(RCE)漏洞的详细信息在协调披露之前泄露到网上。利用这些漏洞可直接从 Web 服务器执行任意命令。


目录

  • 概述
    • 根本原因
    • 验证与目标
  • 受影响的 PHP 版本
  • 威胁态势与检测指引
    • 行为指标与可疑子进程
    • 监控建议
  • 组织应采取的行动项
  • 概念验证(PoC)
    • 漏洞利用架构与阶段
    • 目标要求
    • 用法与参数
    • 配置文件与偏移量
  • 缓解措施与源码补丁
    • 1. 配置缓解(即时临时措施)
    • 2. 自动化快速修复脚本
    • 3. 源代码补丁(session-upload-progress-counters.patch)
    • 4. Cloudflare WAF 自定义规则
    • 5. FrankenPHP Caddyfile 配置
    • 6. Lighttpd 配置
    • 7. Apache 缓解措施(ModSecurity 与 .htaccess)
  • 免责声明

概述

php2shell 指两个影响 PHP 核心功能的严重漏洞(CVE-2026-109618 与 CVE-2026-109619)。主要演示的攻击向量是 PHP 核心会话上传进度机制中的堆释放后使用(UAF)漏洞,可导致任意代码执行(zend_call_function / system())。

  • 严重程度: 严重(CVSS v4.0:9.2)
  • 受影响版本: 报告表明 PHP 5、6、7 和 8 版本均可能受影响。修复预计主要针对当前受支持的 PHP 8 分支,而生命周期终止(EOL)版本(PHP 5.x、7.x、8.0、8.1)将暴露在无官方厂商补丁的风险之下。
  • 业界跟踪: 已获安全研究人员确认(watchTowr 复现了 CVE-2026-109618;Huntress 与 Florian Roth / process-watcher 正在进行监控)。

根本原因

PHP 的上传进度处理器(ext/session/session.c 中的 php_session_rfc1867_callback)将两个原始 zval * 桶指针(post_bytes_processed 和 current_file_bytes_processed)直接存储在活跃的 HashTable 结构中。

在请求处理过程中:

  1. 触发: 一个标准的多部分 POST 请求在默认配置值(session.upload_progress.enabled = 1)下激活进度跟踪。
  2. 释放: 一次进度更新周期会重新读取会话数据。函数 zend_hash_update() 使用析构函数 zval_ptr_dtor 销毁先前的数据树,从而释放内存块。
  3. 回收: 被释放的桶内存被回收。悬空指针被重定向到精心构造的 zend_fcall_info 和 zend_internal_function 结构。
  4. 执行: PHP 调用 zend_call_function(),导致任意系统命令执行。

验证与目标

  • 已在标准 php-src 构建上确认(包括 8.4.4 和 8.2.34 版本)。
  • 使用 zval_ptr_dtor 与 zend_call_function 之间的符号偏移量(--syms)来适配不同发行版的二进制布局(例如 Debian Bookworm、Ubuntu Noble、Ubuntu Jammy)。

受影响的 PHP 版本

下表汇总了受 CVE-2026-109618 和 CVE-2026-109619 影响的 PHP 版本,以及它们的支持与补丁状态:

PHP 分支状态受影响版本修复 / 安全版本备注
PHP 8.5受支持(活跃)< 8.5.128.5.12已发布紧急安全版本
PHP 8.4受支持(活跃)< 8.4.278.4.27已发布紧急安全版本
PHP 8.3受支持(活跃)< 8.3.368.3.36已发布紧急安全版本
PHP 8.2受支持(仅安全修复)< 8.2.358.2.35已发布紧急安全版本
PHP 8.1生命周期结束(EOL)所有 8.1.x 版本无官方补丁(EOL)设置 session.upload_progress.enabled = Off 或使用 ELS/发行版向后移植补丁
PHP 8.0生命周期结束(EOL)所有 8.0.x 版本无官方补丁(EOL)官方支持已结束;必须采取配置缓解措施
PHP 7.x生命周期结束(EOL)所有 7.0 - 7.4 版本无官方补丁(EOL)核心 ext/session 逻辑存在漏洞;需紧急缓解或升级
PHP 5.x生命周期结束(EOL)5.4.0+(启用 RFC1867 进度跟踪)无官方补丁(EOL)官方支持已结束;隔离主机或禁用上传进度

[!WARNING] PHP 8.1 及更早的生命周期结束(EOL)版本不会获得 PHP 基金会提供的官方安全补丁。对于这些环境,请立即应用 session.upload_progress.enabled = Off,或使用提供的 C 源码补丁从源码重新编译 PHP。


威胁态势与检测指引

php2shell 的利用通常表现为由 PHP 工作进程(php-fpm、php-cgi、php-cgi.exe、httpd、apache2)直接派生的异常子进程。

行为指标与可疑子进程

监控并对以下 PHP 工作进程执行行为发出告警:

  • 交互式 Shell: /bin/sh、/bin/bash、cmd.exe、powershell.exe
  • 脚本解释器: python、perl
  • 网络 / 传输工具: curl、wget、nc、certutil.exe
  • 常见反弹 Shell 模式: /dev/tcp/、fsockopen、mkfifo
  • 即时侦察命令: whoami、id、uname -a、ipconfig

监控建议

对于未部署端点检测代理的 Linux Web 环境,可运行 Florian Roth 的免费工具 process-watcher(观察模式),以实时标记异常的子进程派生行为。


组织行动事项

  1. 清点所有 PHP 环境:
    • 运行 WordPress、Drupal、Joomla 或 Magento 等应用的面向公网 Web 服务器。
    • 内部设备、托管面板(cPanel、Plesk)以及捆绑的独立二进制文件(php.exe、php-cgi.exe)。
  2. 为补丁窗口做好准备:
    • PHP 及下游 Linux 发行版的官方紧急补丁计划于 2026 年 10 月 21 日星期三 14:00 UTC(美国东部时间上午 10:00) 左右发布。
    • 发布后立即应用供应商更新。
  3. 隔离生命周期结束(EOL)的安装:
    • 运行不受支持版本(PHP 5.x、7.x、8.0、8.1)的环境可能无法获得官方上游向后移植补丁。
    • 通过 VPN 限制访问、应用严格的 WAF 规则,或禁止公网暴露。
  4. 事件响应与调查:
    • 若检测到可疑子进程或异常文件,请隔离主机并保留 Web 服务器/PHP 日志。
    • 检查 Web 根目录和临时目录(/tmp、/var/tmp),查找投放的 webshell 或临时执行痕迹。

概念验证(PoC)

针对 CVE-2026-109618 的全自动一键远程利用程序位于 poc_109618.py。该利用程序通过纯 HTTP 请求远程绕过 ASLR,实现可靠的任意命令执行。

利用架构与阶段

攻击链由四个连续的 HTTP 阶段组成:

  1. 阶段 0 — HTTP Worker 轮换: 通过 HTTP 中止当前的 prefork worker,以确保新生成的 worker 子进程具有干净的堆状态。
  2. 阶段 1 — 堆基址泄漏: 通过超大 multipart 字段(--huge-mb,默认 12MB)触发内存耗尽(OOM)条件,从而通过 Set-Cookie: PHPSESSID 触发未初始化内存泄漏,提取 Zend MM 2MB 对齐的 chunk 基址。
  3. 阶段 2 — Libphp 基址泄漏: 利用会话序列化 / HashTable 分配对齐,通过 Set-Cookie 泄漏 ZVAL_PTR_DTOR 函数指针,计算 libphp.so 的基址。
  4. 阶段 3 — 伪造引用与任意执行: 在 167 字节的 zend_string 内伪造一个 HashTable 结构,其 pDestructor 直接指向 libphp.so 中的 zif_system。构造的引用覆盖 PS(http_session_vars)。当 PHP 释放会话数据时,zif_system 执行所提供的命令。

[!NOTE] 命令直接嵌入在 167 字节的活跃 zend_string 载体中(0x98 头部 + NUL 字节限制),因此内联命令字符串被限制为最大 14 字节(MAX_CMD = 14)。对于更长的命令,可通过短触发器进行链式调用,例如 sh</tmp/c(8 字节)或 sh</out/c。

目标要求

默认漏洞利用配置针对 Apache prefork 下的 mod_php,具有以下设置:

  • display_errors = 1
  • memory_limit = 8M(或足够低于 --huge-mb)
  • max_input_vars = 1000
  • session.use_cookies = 1,session.use_strict_mode = 0
  • session.upload_progress.enabled = 1
  • 单 worker / prefork 进程模型

用法与参数

基本执行
# Default command execution against target URL
python3 poc_109618.py -u http://127.0.0.1:8088/index.php

# Execute a custom command (max 14 bytes) and verify via local proof file
python3 poc_109618.py -u http://127.0.0.1:8088/index.php -c 'id>/out/p1' --proof-file out/p1

# Execute command writing to webroot and verify via HTTP GET fetch
python3 poc_109618.py -u http://127.0.0.1:8088/index.php -c 'id>p1.txt' --fetch /p1.txt
命令行选项
选项描述默认值
-u、--url(必填) 目标 PHP 端点 URLNone
-c、--cmd要执行的命令(最大 14 字节)id>/out/p1
--proof-file用于在利用后检查的本地证明文件路径;'' 表示禁用out/p1
--fetch利用后用于 GET 的相对 HTTP 路径(例如写入 webroot 时)""
--profile目标构建配置:bookworm(官方 php:8.4.26-apache)或 lab(Apache 2.4.68)bookworm
--zif-offsetlibphp.so 中 zif_system 的偏移量(十六进制格式,例如 0x43a870)从偏移量文件加载
--dtor-offsetlibphp.so 中 ZVAL_PTR_DTOR 的偏移量(十六进制格式,例如 0x613c50)从偏移量文件加载
--htdata-offset167 字节活动字符串载体的块相对偏移量取决于配置(0x690d8 或 0x6e0d8)
--offsets-file用于加载/存储推导出的 libphp 偏移量的路径out/offsets.env
--docker-container用于在 localhost 上自动推导偏移量的 Docker 容器名称php2shell-target
--no-auto-offsets禁用通过 Docker 辅助程序自动提取偏移量False
--huge-mbOOM 载荷的大小(MB);必须超过目标的 memory_limit12
--timeout每个请求的网络套接字超时时间(秒)30.0
--retries每个泄漏阶段的尝试次数(阶段 3 运行 retries + 2 次)3
--no-pre-rotate跳过初始 worker 轮换(阶段 0)False
--no-retry-rotate在失败的阶段尝试之间不轮换 workerFalse
-q、--quiet抑制详细输出日志False

配置与偏移量

该漏洞利用脚本支持基于配置的预设:

  • --profile bookworm(默认): 针对运行在 Debian 12(Bookworm)上、使用 Apache 2.4.69 的官方 Docker 库镜像 php:8.4.26-apache 进行校准。
  • --profile lab: 针对自定义/最小化 Apache 2.4.68 构建进行校准。

当目标为本地 Docker 容器(127.0.0.1 / localhost)时,脚本可以使用 docker/offsets.py 直接从运行中的容器自动提取二进制符号偏移量,并将其缓存到 out/offsets.env。对于二进制布局与 Debian 12 不同的远程目标,请手动提供 --zif-offset 和 --dtor-offset。


缓解措施与源码修补

在您的软件仓库中的官方供应商软件包更新之前,您可以使用配置更改、自动化脚本,或使用随附的源码补丁编译 PHP 来保护您的环境。

1. 配置缓解(即时临时措施)

该漏洞依赖于 PHP 的会话上传进度机制(session.upload_progress.enabled),该机制默认启用。禁用此指令可消除攻击向量,同时保留常规文件上传功能:

在您的 php.ini 中:

session.upload_progress.enabled = Off
下载工具