针对近期 WordPress 核心 漏洞的非侵入式检测扫描器 — 包括 wp2shell 预认证 RCE 利用链。
wp2shell_scanner.py 对 WordPress 站点的核心版本进行指纹识别,并读取其公开的 REST API 表面,然后独立地针对每个受追踪的核心 CVE 对检测到的版本进行分类。判定结果是分支感知的——例如,一个 6.8.x 的站点会正确报告为暴露于 SQL 注入 CVE,但不是完整的 RCE 链。它仅检测:绝不发送任何利用载荷。单文件,一个依赖(requests),CI 友好的退出码,以及面向客户的 HTML / JSON / 电子邮件报告。
⚠️ 仅限授权使用。 仅扫描您拥有或已获得明确(书面)授权的系统。扫描器会发送一个标识性的
User-Agent,以便蓝队能够归因流量——它不会隐藏。
wp2shell RCE 链 = CVE-2026-63030 + CVE-2026-60137 共同作用 → 默认安装上的预认证远程代码执行。仅当两个 CVE 对检测到的版本均判定为“易受攻击”时,扫描器才会将链报告为“暴露”。
扫描器正确处理的分支细微差别:
6.8.x 仅携带 SQL 注入(CVE-2026-60137)——不是 RCE 链。6.9 分支上,CVE-2026-3906(笔记)在 6.9.2 中修复,但 wp2shell 链直到 6.9.5 才关闭。因此 6.9.2/6.9.4 对于笔记漏洞显示“已修补”,但对 RCE 链仍然“易受攻击”——因此扫描器在该分支上仅推荐 6.9.5 或更高版本,从不推荐 6.9.4。操作上很重要: wp2shell 的技术文章和可用的 PoC 已经公开。版本检测现在是绝对最低限度——优先级是打补丁。更新关闭了易受攻击的路径,但不会移除在补丁之前植入的后门——因此报告中包含入侵评估步骤。
这是一个核心版本扫描器。插件和主题 CVE——WPScan / Patchstack 目录中的绝大部分——需要实时的、精心策管的馈送以及每个插件的版本枚举,因此故意超出范围。在其领域内(近期 WordPress 核心 CVE),它旨在精确且分支准确,而不是复制商业漏洞数据库。
<meta name="generator">/readme.html<generator> 标签/wp-links-opml.php(OPML)/wp-json/ 以查看 WordPress 是否在其 REST 索引中公布了 batch/v1 命名空间。这确认命名空间是已注册的,不是端点可通过 WAF 访问。不发送任何批次请求或载荷。它不进行任何利用。没有 SQL 注入载荷,没有批次路由混淆请求,没有尝试执行代码或读取数据。检测基于版本以及被动读取公开的 API 表面。
pip install requests
# 单个目标
python3 wp2shell_scanner.py -t https://site.example --authorized
# 目标列表(每行一个,支持 # 注释)
python3 wp2shell_scanner.py -T scope.txt --authorized -o ./reports
# 使用合成数据预览输出格式——无需网络,无需授权
python3 wp2shell_scanner.py --demo -o ./reports
--authorized 参数是明确的授权门禁——实时扫描在不带此参数时拒绝运行。
| 退出码 | 含义 |
|---|---|
2 | 至少一个目标易受攻击 |
1 | 至少一个目标无结论 / 出错 |
0 | 干净(已修补 / 不受影响 / 非 WordPress) |
通知邮件的收件人是脚本顶部的 CSSLTD_CONTACT 常量(默认 [email protected])。将其编辑为您自己的接收地址。
examples/ 目录包含针对一个虚构的易受攻击主机(example.com,WordPress 6.9.1——暴露于所有三个追踪的 CVE)的合成(--demo)输出:
wp2shell_report_example.com.html — 面向客户的 HTML 报告wp2shell_example.com.json — JSON 记录wp2shell_email_example.com.txt — 草稿通知邮件这些数据由虚构数据生成,用于说明报告格式。它们不是扫描任何真实站点的结果。
6.9.5+ 是干净的——6.9.4 仍存在 wp2shell 链。)uploads/、wp-config.php、wp-cron 和管理员账户进行入侵评估;对比已知良好的核心运行文件完整性检查。/wp-json/batch/v1)。本工具仅用于授权安全测试。您有责任确保已获得扫描任何目标的权限。未经授权的扫描可能违法。作者对滥用不承担任何责任。
| CVE | 弱点 | 访问方式 | 受影响核心 | 修复版本 |
|---|
| CVE-2026-63030 — wp2shell | CWE-436 — REST 批次路由混淆 → RCE(严重;CVSS 9.8 WPScan CNA / 7.5 CISA-ADP;GHSA-ff9f-jf42-662q) | 未认证 | 6.9.0–6.9.4, 7.0.0–7.0.1 | 6.9.5, 7.0.2 |
| CVE-2026-60137 | CWE-89 — WP_Query 中 author__not_in 的 SQL 注入(独立时中等,CVSS 5.9;在链中严重;GHSA-fpp7-x2x2-2mjf) | 未认证 | 6.8.0–6.8.5, 6.9.0–6.9.4, 7.0.0–7.0.1 | 6.8.6, 6.9.5, 7.0.2 |
| CVE-2026-3906 | CWE-862 — 笔记 REST API 缺少授权(中等,CVSS 4.3,GHSA-6x83-fcf5-r65g) | 订阅者及以上 | 6.9.0–6.9.1 | 6.9.2 |
| 参数 | 含义 |
|---|
-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 | 抑制控制台摘要 |
| 判定结果 | 含义 |
|---|
VULNERABLE | 检测到的版本位于受影响范围内——立即打补丁 |
PATCHED | 位于已修复版本;不暴露于追踪的 CVE |
NOT_AFFECTED | 版本早于最早追踪的漏洞(< 6.8.0 — CVE-2026-60137) |
UNKNOWN | 无法确认版本,向量不一致,或检测到预发布版本——手动验证 |
NOT_WORDPRESS | 未发现 WordPress 指纹 |