zi3lak/wp2shell_scanner

GitHub: zi3lak/wp2shell_scanner

一个针对 WordPress wp2shell 漏洞链的纯被动、不利用漏洞的检测扫描器,通过版本指纹与公开接口读取来评估暴露风险。

Stars: 0 | Forks: 0

# wp2shell_scanner [![smoke](https://static.pigsec.cn/wp-content/uploads/repos/cas/db/db7c01dbbe6f72668a5d43b600b29ea92b824f3604ff74c4aa374941e7397867.svg)](https://github.com/zi3lak/wp2shell_scanner/actions/workflows/smoke.yml) [![License: MIT](https://img.shields.io/badge/License-MIT-informational.svg)](LICENSE) [![Python 3.7+](https://img.shields.io/badge/python-3.7%2B-blue.svg)](https://www.python.org/) [![Mode: detection-only](https://img.shields.io/badge/mode-detection--only-brightgreen.svg)](#what-it-explicitly-does-not-do) [![CVE-2026-63030 · CVE-2026-60137](https://img.shields.io/badge/CVE-2026--63030%20%C2%B7%202026--60137-C81E3A.svg)](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, 加密, 数字签名, 无后门, 漏洞扫描器, 逆向工具