zi3lak/wp2shell_scanner
GitHub: zi3lak/wp2shell_scanner
一个针对 WordPress wp2shell 漏洞链的纯被动、不利用漏洞的检测扫描器,通过版本指纹与公开接口读取来评估暴露风险。
Stars: 0 | Forks: 0
# wp2shell_scanner
[](https://github.com/zi3lak/wp2shell_scanner/actions/workflows/smoke.yml)
[](LICENSE)
[](https://www.python.org/)
[](#what-it-explicitly-does-not-do)
[](https://github.com/advisories/GHSA-ff9f-jf42-662q)
**用于 WordPress `wp2shell` 身份验证前 RCE 链的非侵入式检测扫描器。**
`wp2shell_scanner.py` 会对 WordPress 站点的核心版本进行指纹识别,并读取其公开的 REST API 接口,以判断该主机是否暴露于 **wp2shell** 链 —— **CVE-2026-63030 + CVE-2026-60137**。它**仅进行检测**:绝不会发送任何漏洞利用载荷。单文件,单一依赖(`requests`),对 CI 友好的退出代码,以及面向客户的 HTML / JSON / 电子邮件报告。
## 漏洞详情
`wp2shell` 是由两个 WordPress **核心**缺陷组成的链条,它们共同导致了**未经身份验证的远程代码执行**:
| CVE | 弱点 | 组件 | 在链条中的作用 |
|-----|----------|-----------|-------------------|
| **CVE-2026-63030** | CWE-436 — REST 批量路由混淆 (Critical, CVSS 7.5, `GHSA-ff9f-jf42-662q`) | `WP_REST_Server::serve_batch_request_v1()` · `/wp-json/batch/v1` | **入口点。** 路由混淆缺陷使得未经身份验证的请求能够到达内部查询路径。 |
| **CVE-2026-60137** | CWE-89 — SQL injection | `WP_Query` — `author__not_in` 参数 | **第二环。** 未经净化的输入到达数据库查询;与上述缺陷结合 → 未经身份验证的 RCE。 |
| | |
|---|---|
| **受影响版本** | WordPress `6.9.0`–`6.9.4` 和 `7.0.0`–`7.0.1` |
| **修复版本** | WordPress `6.9.5` 和 `7.0.2` |
| **首次受影响** | `6.9.0` (批量路由弱点在 6.9 版本中被引入) |
**运维提示:** 技术分析和可用的 PoC 目前已经公开。版本检测现在已是*最低要求* —— 当务之急是**打补丁**。请注意,更新虽然关闭了漏洞路径,但**无法移除在打补丁之前植入的后门** —— 因此报告中包含了入侵评估步骤。
## 扫描器功能
- 通过多个独立向量进行**被动版本指纹识别**:
- 主页上的 ``
- `/readme.html`
- RSS / Atom 订阅源中的 `` 标签
- `/wp-links-opml.php` (OPML)
- REST 根路径 `/wp-json/`
- **被动读取 REST 接口**,通过 `/wp-json/` 检查 `batch/v1` 命名空间是否已注册(即,漏洞 endpoint 是否可达)。**不会发送任何批量请求和载荷** —— 它仅读取公开的路由列表。
- **判定映射** —— 将检测到的版本与受影响/已修复的范围进行比较,从而得出针对每个 CVE 的判定结论,此外还提供:
- 一份**面向客户的 HTML 报告**(可打印为 PDF),
- 一条 **JSON 记录**(对 pipeline/EAV 友好),
- 一封**通知电子邮件草稿**。
### 明确**不**做的事
它**不会**利用任何漏洞。没有 SQL injection 载荷,没有批量路由混淆请求,也没有尝试执行代码或读取数据。检测是基于版本的,加上对公开 API 接口的被动读取。
## 安装
```
pip install requests
```
## 用法
```
# 单一目标
python3 wp2shell_scanner.py -t https://site.example --authorized
# 目标列表(每行一个,允许使用 # 注释)
python3 wp2shell_scanner.py -T scope.txt --authorized -o ./reports
# 使用合成数据预览输出格式 — 无需 network,无需 auth
python3 wp2shell_scanner.py --demo -o ./reports
```
### 参数标志
| 标志 | 含义 |
|------|---------|
| `-t, --target` | 单个目标 URL 或主机 |
| `-T, --targets-file` | 每行包含一个目标的文件 |
| `--demo` | 根据合成数据(无网络请求)生成**示例**报告/电子邮件 |
| `-o, --output-dir` | 输出目录(默认为 `./wp2shell_reports`) |
| `--formats` | 以逗号分隔的列表:`json,html,email`(默认:全部) |
| `--authorized` | **授权关卡** —— 实时扫描必填 |
| `--timeout` | HTTP 超时时间,单位秒(默认 12) |
| `--delay` | 目标之间的间隔秒数(保持礼貌;默认 1.0) |
| `--insecure` | 不验证 TLS 证书 |
| `--quiet` | 隐藏控制台摘要输出 |
`--authorized` 标志是一个显式的授权关卡 —— 如果没有它,实时扫描将被拒绝运行。
### 退出代码(对 CI 友好)
| 代码 | 含义 |
|------|---------|
| `2` | 至少有一个目标存在**漏洞** |
| `1` | 至少有一个目标结果**不明** / 出错 |
| `0` | 安全(已修补 / 未受影响 / 非 WordPress) |
### 配置
通知电子邮件的收件人是脚本顶部附近的 `CSSLTD_CONTACT` 常量(默认为 `ops@cyberssl.co.uk`)。请将其修改为您自己的接收地址。
## 判定结论
| 判定 | 含义 |
|---------|---------|
| `VULNERABLE` | 检测到的版本处于受影响范围内 —— 立即修补 |
| `PATCHED` | 处于已修复的发行版;未暴露于此漏洞链 |
| `NOT_AFFECTED` | 版本早于漏洞出现的版本 (< 6.9.0) |
| `UNKNOWN` | 无法确认版本 —— 需手动验证 |
| `NOT_WORDPRESS` | 未发现 WordPress 指纹特征 |
## 示例输出
[`examples/`](examples/) 目录包含了一个针对虚拟漏洞主机(`example.com`,WordPress 7.0.1)的**合成**(`--demo`)输出:
- [`wp2shell_report_example.com.html`](examples/) — 面向客户的 HTML 报告
- [`wp2shell_example.com.json`](examples/) — JSON 记录
- [`wp2shell_email_example.com.txt`](examples/) — 通知电子邮件草稿
## 修复建议(如报告中所输出)
1. 首先进行经过验证的备份(数据库 + 完整的文件树)。
2. 在对应的分支上将 WordPress 核心更新至 **6.9.5 / 7.0.2** 或更高版本。
3. 确认站点和管理后台仍然正常工作。
4. 如果主机在存在漏洞期间处于暴露状态,请**假定已被入侵** —— 对主题、插件、`uploads/`、`wp-config.php`、wp-cron 和管理员账户进行全面的入侵评估;针对已知良好的核心版本运行文件完整性检查。
5. 在边缘添加纵深防御(WAF 规则,限制 `/wp-json/batch/v1`)。
6. 如果怀疑遭到入侵,请轮换敏感凭证(auth salts、管理员/DB 密码、API 密钥)。
7. 重新扫描以确认判定结果现在显示为 **Patched**。
## 参考
- [WordPress GitHub Security Advisory — GHSA-ff9f-jf42-662q](https://github.com/advisories/GHSA-ff9f-jf42-662q)
- [WordPress releases (6.9.5 / 7.0.2)](https://wordpress.org/download/releases/)
## 免责声明
此工具仅供**授权的安全测试**使用。您有责任确保已获得扫描任何目标的许可。未经授权的扫描可能是非法的。作者对任何滥用行为不承担责任。
标签:CVE, Python, WordPress, 加密, 数字签名, 无后门, 漏洞扫描器, 逆向工具