单文件、自包含的扫描器,用于 Joomla! JCE Editor < 2.9.99.5 — 未授权远程代码执行 (CVE-2026-48907)
作者:Alma
[!CAUTION]
🚨 免责声明 — 使用前请阅读
这是一个侵入式安全测试工具。
本工具仅限授权安全评估使用。
扫描您不拥有或未经书面许可进行测试的系统,在大多数司法管辖区属于违法行为。
作者(Hussein Mohamed masta ghimau)对因使用本工具而产生的任何误用、损坏、法律诉讼或数据丢失绝对不承担任何责任。
运行此扫描器即表示您同意:
仅扫描您拥有或获得明确书面同意的资产。
理解作为侵入式准确性检查的一部分,会向目标服务器上传一个无害的 POC PHP 文件。
在使用后立即手动删除每个上传的 POC 文件。
风险自负。
[!IMPORTANT] 为什么“侵入式”对准确性很重要: 为了达到最高置信度并消除误报,此工具执行实时数学验证载荷测试。它上传一个安全的 PHP 概念验证行,然后通过验证服务器返回的确切计算结果来确认远程代码执行。仅读取版本字符串的非侵入式扫描器可能会遗漏向后移植的补丁或自定义热修复。本工具验证漏洞确实存在。 因此,它本质上是侵入式的——请明智使用,并确保获得全面授权。
masta-cve-2026-48907.py 是一个完全原创、单文件的 Python 扫描器,用于检测运行 JCE Editor 组件版本低于 2.9.99.5 的 Joomla! 实例中的 CVE-2026-48907。
requests/httpx。.py 文件,随处可放。openpyxl 或 rich 也能工作,但安装后界面更美观。ThreadPoolExecutor 快速扫描整个 URL 列表。.xlsx) 报告。openpyxl 用于 Excel 报告rich 用于漂亮的终端卡片其余均为 Python 标准库(urllib、http.cookiejar、argparse、threading 等)。
# 1. 克隆仓库
git clone https://github.com/YOUR_USERNAME/masta-cve-2026-48907.git
cd masta-cve-2026-48907
# 2. (可选但推荐)安装额外依赖
pip install -r requirements.txt
您也可以直接运行脚本而无需安装任何内容(仅终端输出,无 Excel):
python masta-cve-2026-48907.py -u https://target.com
python masta-cve-2026-48907.py -u https://target.com/joomla
python masta-cve-2026-48907.py -l targets.txt -t 10
python masta-cve-2026-48907.py -u https://target.com -p http://127.0.0.1:8080
python masta-cve-2026-48907.py -h
-u URL 单个目标 URL
-l FILE 包含 URL 的文件(每行一个)
-o OUTPUT 自定义 Excel 输出路径
-t THREADS 并发线程数(默认:5)
-p PROXY 代理 URL(例如 http://127.0.0.1:8080)
--timeout N 请求超时秒数(默认:12)
--verify-ssl 启用 SSL 证书验证(默认:禁用)
-v, --verbose 扫描期间显示每个目标的完整结果卡片
-d, --debug 显示内部 HTTP 请求跟踪
--no-color 禁用彩色终端输出
以下是从输入到最终报告的完整扫描逻辑。
flowchart TD
A[用户提供 -u URL 或 -l FILE] --> B[标准化并去重目标]
B --> C[启动 ThreadPoolExecutor]
C --> D[对于每个目标]
D --> E1[probe_joomla<br/>GET /, meta, manifest,<br/>静态资源, README]
E1 --> F1{检测到 Joomla!?}
F1 -- 否 --> R1[状态: NOT_JOOMLA]
F1 -- 是 --> E2[probe_jce<br/>GET jce.xml, 端点,<br/>JCE 特定标记]
E2 --> F2{检测到 JCE?}
F2 -- 否 --> R2[状态: SAFE<br/>JCE 未安装]
F2 -- 是 --> F3{版本 >= 2.9.99.5?}
F3 -- 是 --> R3[状态: PATCHED]
F3 -- 否 --> E3[extract_csrf<br/>解析 Joomla! CSRF 令牌]
E3 --> F4{找到令牌?}
F4 -- 否 --> R4[状态: PATCHED<br/>CSRF 缺失 → 可能已加固]
F4 -- 是 --> E5[构建数学验证载荷<br/>masta-cve-2026-48907-poc ...]
E5 --> E6[向量 1: Multipart POST<br/>profile_file 上传至 tmp/]
E6 --> F5{HTTP 200?}
F5 -- 是 --> E7["GET /tmp/masta-{rand}.xml.php"]
E7 --> F6{响应体包含<br/>MATHOK:3105:END ?}
F6 -- 是 --> R5[状态: VULNERABLE<br/>置信度: CONFIRMED]
F6 -- 否 --> E8[向量 2: 浏览器链<br/>通过 RPC 上传并重命名]
E8 --> F7{RCE 已确认?}
F7 -- 是 --> R5
F7 -- 否 --> E9[检查 WAF 拦截页面]
E9 --> F8{检测到 WAF?}
F8 -- 是 --> R6[状态: BLOCKED_BY_WAF]
F8 -- 否 --> R7[状态: SAFE]
F5 -- 否 --> E8
R1 --> S[将结果追加到 Excel + 终端卡片]
R2 --> S
R3 --> S
R4 --> S
R5 --> S
R6 --> S
R7 --> S
S --> D
D --> T[打印摘要仪表板]
T --> U[保存 Excel 报告到 reports/]
U --> V[打印清理提醒<br/>所有已上传的 POC 文件]
style R5 fill:#ff0000,stroke:#333,color:#fff
style R3 fill:#32CD32,stroke:#333,color:#000
style R6 fill:#FFD700,stroke:#333,color:#000将下方图片替换为您的实际终端截图。
终端截图占位
将下方图片替换为您的实际 Excel 报告截图。
Excel 报告占位
提示:针对本地测试 Joomla! 实例运行扫描器以生成真实截图。将它们提交到 assets/ 文件夹,即可在 GitHub 上自动渲染。
本扫描器上传一个无害的 PHP 概念验证到目标服务器以确认漏洞。工具会在扫描结束时始终打印提醒,列出所有已上传的文件。测试后您必须手动删除它们。 这些文件命名为 masta-{random}.xml.php 或类似名称,并包含以下纯文本归属行:
masta-cve-2026-48907-poc. This test is done as part of Security Assessment - masta ghimau.
使用本软件即表示您承认对自己的行为负全部责任。代码按“原样”提供,不附带任何担保。如果您不了解运行侵入式 RCE 验证扫描器的后果,请不要使用本工具。
🛡 用于保护您自己的资产,而非伤害他人。
| 功能 | 描述 |
|---|
| 🔍 多源指纹识别 | 通过 meta 标签、manifest、静态资源、语言文件和 JCE 特定端点检测 Joomla! 和 JCE |
| 🛡 WAF 检测 | 识别 Cloudflare、Incapsula、Sucuri 和 ModSecurity 拦截 |
| 🧪 安全的侵入式 POC | 上传一个无害的 PHP 数学验证器(带有归属说明并明确标记以便清理) |
| 📊 卡片式终端界面 | 每个目标显示 Rich Panel + Table 卡片(或 ANSI 回退) |
| 📁 Excel 报告 | 自动生成 .xlsx,包含表头、冻结窗格、列宽和颜色编码的状态单元格 |
| ⚙️ 代理支持 | 通过 Burp / ZAP / 任何 HTTP 代理路由所有流量 |
| 🧵 线程化 | 可配置的工作线程数,用于批量列表 |
| 状态 | 含义 | 置信度 |
|---|
| VULNERABLE | PHP 载荷已执行,数学证明已验证。RCE 真实存在。 | CONFIRMED |
| VULNERABLE_UPLOAD_ONLY | 文件上传成功,但 PHP 执行被阻止。可被利用但未确认 RCE。 | HIGH |
| PATCHED | 检测到 Joomla! / JCE 且版本为 >= 2.9.99.5,或 CSRF 已加固。 | HIGH / MEDIUM |
| SAFE | JCE 未安装,或利用向量失败(可能已修补/加固)。 | HIGH |
| BLOCKED_BY_WAF | Web 应用防火墙阻止了测试。 | LOW |
| NOT_JOOMLA | 目标似乎不是 Joomla! 站点。 | CERTAIN |
| ERROR | 网络/连接/未处理的异常。 | LOW |