ASYquan/wp2shell-cf-WAF-bypass

GitHub: ASYquan/wp2shell-cf-WAF-bypass

针对 WordPress CVE-2026-63030 SQL 注入漏洞的 PoC 工具,通过请求体填充技术内置了绕过 Cloudflare WAF 的功能。

Stars: 0 | Forks: 0

# wp2shell-cf-bypass 这是一个针对 WordPress 批量路由混乱 SQL 注入(CVE-2026-63030)的独立 PoC,内置了绕过 Cloudflare WAF 的功能。 Cloudflare 的 WAF 仅检查请求体的前约 128KB 数据。该工具使用约 140KB 的垃圾 JSON 键来填充外部和内部的批量 payload,从而将真正的 SQL 语句推送到检查窗口之外。完整的 `UNION SELECT` payload 可以在未被检查的情况下直接通过。 ## 受影响版本 | 版本范围 | 状态 | | ------------- | ------ | | <= 6.8.5 | 不受影响 | | 6.9.0 - 6.9.4 | 受影响 | | 7.0.0 - 7.0.1 | 受影响 | ## 环境要求 Python 3.8+,仅使用标准库。 ## 使用方法 ``` ./wp2shell-cf-bypass.py [options] ``` WAF 绕过填充默认开启。传入 `--no-waf-bypass` 可将其禁用。 ### 检查 发送一个标记探针以确认路由混乱漏洞。受漏洞影响的目标会返回 HTTP 207 以及三个标记代码:`parse_path_failed`、`block_cannot_read` 和 `rest_batch_not_allowed`。 ``` ./wp2shell-cf-bypass.py check target.example.com ``` ### 读取 ``` ./wp2shell-cf-bypass.py read target.example.com # server fingerprint ./wp2shell-cf-bypass.py read target.example.com --preset users # logins and password hashes ./wp2shell-cf-bypass.py read target.example.com --query "SELECT @@version" ``` `--technique auto`(默认)会首先尝试 UNION(每个值发送一次请求),若失败则回退到盲注二分查找(每个字符约需 8 次请求)。 ### shell 通过注入启动交互式 `SQL>` 提示符。查询结果需返回单一标量值。如果涉及多列,请使用 `CONCAT` 或 `GROUP_CONCAT`。 ``` ./wp2shell-cf-bypass.py shell target.example.com ``` ``` SQL> SELECT @@version 11.4.10-MariaDB-1-log SQL> SELECT GROUP_CONCAT(user_login SEPARATOR ', ') FROM wp_users admin, editor, subscriber ``` ## 选项 | 选项 | 应用模式 | 描述 | | --- | --- | --- | | `--proxy URL` | 所有 | HTTP 代理(例如 Burp) | | `--timeout N` | 所有 | 请求超时时间(秒)(默认:30) | | `--wp-path PATH` | 所有 | 如果 WP 不在根目录,需指定其子路径(例如 `wordpress`) | | `--no-waf-bypass` | 所有 | 禁用请求体填充 | | `--pad-size N` | 所有 | 填充大小(字节)(默认:143360) | | `--preset` | read | `fingerprint`(默认)或 `users` | | `--query` | read | 需提取的标量 SQL 表达式 | | `--prefix` | read, shell | 表前缀(默认:`wp_`) | | `--technique` | read, shell | `auto`(默认)、`union` 或 `blind` | ## WAF 绕过原理 Cloudflare 托管规则对请求体的检查会有一个可配置的限制,在大多数套餐中约为 128KB。批量 API 接受 JSON 格式,并且会忽略多余的键。一个填充了随机 ASCII 字符的 `"junk"` 键会被放置在两个批量层级中的 `"requests"` 键之前,这样 SQL payload 在序列化后的 JSON 中就会位于第 280KB 字节左右,远远超出了检查截止点。 如果不进行填充,`UNION SELECT ... FROM wp_users` 会收到 403 响应。进行填充后,相同的 payload 即可顺利通过,并且数据会通过带内方式返回。 ## 修复方案 将 WordPress 更新至 7.0.2(或在 6.9 分支上更新至 6.9.5)。作为临时缓解措施,可以在边缘节点封锁 `/wp-json/batch/v1` 和 `?rest_route=/batch/v1`,或者将该 endpoint 的请求体大小限制在 128KB 以下。 ## 法律声明 仅供授权的安全测试使用。请仅针对您拥有或已获得书面测试许可的系统使用此工具。 ## 参考 - Searchlight Cyber wp2shell 公告: https://slcyber.io/research-center/wp2shell-pre-authentication-rce-in-wordpress-core - Icex0/wp2shell-poc: https://github.com/Icex0/wp2shell-poc - Assetnote nowafpls: https://github.com/assetnote/nowafpls - WordPress 7.0.2 版本发布: https://wordpress.org/news/2026/07/wordpress-7-0-2-release/
标签:CISA项目, Homebrew安装, PNNL实验室, Python, WAF绕过, 安全攻防, 无后门