shinthink/pbck-exploit
GitHub: shinthink/pbck-exploit
针对 Joomla Page Builder CK 未授权文件上传漏洞(CVE-2026-56290)的批量利用与 RCE 验证框架。
Stars: 1 | Forks: 0
Joomla Page Builder CK 批量利用与验证框架
未认证任意文件上传 → 远程代码执行
## 📑 目录 - [漏洞概述](#-vulnerability-overview) - [受影响版本](#-affected-versions) - [功能特性](#-features) - [安装说明](#-installation) - [用法](#-usage) - [概念验证](#-proof-of-concept) - [技术深度剖析](#-technical-deep-dive) - [检测方法论](#-detection-methodology) - [防御与缓解措施](#-defense--mitigation) - [免责声明](#-disclaimer) - [参考资料](#-references) ## 🔴 漏洞概述 **CVE-2026-56290** 是 **Page Builder CK** (`com_pagebuilderck`) 中的一个严重漏洞,这是一款流行的 Joomla 页面构建器扩展。`browse.ajaxAddPicture` 控制器方法接受未经身份验证的文件上传,并且**目标路径可由用户控制**,允许攻击者将任意 PHP 文件写入 Web 可访问的目录中。 ### 根本原因 ``` // browse.php controller — NO authentication check function ajaxAddPicture() { $input = JFactory::getApplication()->input; $file = $input->files->get('file', null); // ← user-controlled file $path = trim($input->get('path', '')); // ← user-controlled path, only trim()! // ... uploads file to $path without validating the destination } ``` `path` 参数**仅经过 `trim()` 清理** —— 没有白名单限制,没有目录遍历检查,也没有身份验证关卡。由于任何 Joomla 页面上的 CSRF token 都是公开可访问的,攻击者可以将 PHP webshell 远程上传到任何可写的目录中。 ### 影响 | 向量 | 严重程度 | 影响 | |--------|----------|--------| | 未授权文件上传 | **9.8 (严重)** | 任意 PHP 代码执行 | | CSRF token 收集 | **5.3 (中等)** | 促成上传攻击链 | | 信息泄露 | **5.3 (中等)** | 扩展版本指纹识别 | ### 攻击链 ``` 1. HIT Joomla homepage → harvest CSRF token (hex32 + value "1") 2. POST file upload → task=browse.ajaxAddPicture&{token}=1 3. PHP shell lands in → media/com_pagebuilderck/gfonts/shell.php 4. GET shell URL → code executes, RCE confirmed 5. POST f=@file to shell → upload additional tools 6. GET ?cleanup=1 → shell self-destructs ``` ## 🟠 受影响版本 | Page Builder CK 版本 | 状态 | 备注 | |:---|:---:|:---| | **3.1.1 及以下** | 🔴 **存在漏洞** | 已确认未授权上传 | | **3.4.10 及以下** | 🔴 **存在漏洞** | 根据分析扩展的范围 | | **3.5.10 及以下** | 🔴 **存在漏洞** | 可能存在部分已修复的变体 | | > 3.5.10 | 🟢 可能已修复 | 通过 manifest XML 进行验证 | ## ✨ 功能特性
| ### 🔍 侦察 - **Joomla 检测** — 两阶段:HTML 指纹 + 管理面板探测 - **PBCK 检测** — 直接路径探测 + HTML 模式匹配 - **版本提取** — Manifest XML 解析 + HTML regex 回退 - **CSRF token 收集** — 多页面 token 提取(首页、登录、注册、后台管理) - **Endpoint 暴力破解** — 包含 1000+ 个 task/param/path 组合,支持基于时间的发现机制 | ### 💀 利用 - **40+ 种扩展名绕过** — 大小写混用、数字变体、双扩展名、Windows 技巧 - **20+ 种目标路径** — 扩展目录、Joomla 可写目录、目录遍历路径 - **Webshell 验证** — 基于 token 确认 PHP 已执行 - **自动清理** — Webshell 在验证后自毁 (`?cleanup=1`) - **实时 TXT 输出** — 将线程安全的实时结果写入文件 - **JSON 报告** — 包含每个目标完整详细信息的结构化报告 |
'; ?>``` **Webshell 功能:** - 📤 通过 POST `f=@file` 上传附加文件 - 🧹 通过 `?cleanup=1` 自毁 - 🔑 基于 token 的验证(扫描器验证输出中的唯一 token) ## 🔬 技术深度剖析 ### 架构 ``` ┌─────────────────────────────────────────────────────────┐ │ PBCK-EXPLOIT │ ├──────────────────┬──────────────────────────────────────┤ │ RECON PHASE │ EXPLOIT PHASE │ │ │ │ │ ┌────────────┐ │ ┌──────────────┐ ┌──────────────┐ │ │ │ Joomla │ │ │ Endpoint │ │ Extension │ │ │ │ Detection │ │ │ Brute-force │ │ Bypass Grid │ │ │ │ (2-phase) │ │ │ (1000+ combo)│ │ (40+ exts) │ │ │ └─────┬──────┘ │ └──────┬───────┘ └──────┬───────┘ │ │ │ │ │ │ │ │ ┌─────▼──────┐ │ ┌──────▼───────┐ ┌──────▼───────┐ │ │ │ PBCK │ │ │ CSRF Token │ │ PHP Shell │ │ │ │ Detection │ │ │ Harvester │ │ Deployment │ │ │ │ (probes) │ │ │ (5 pages) │ │ (20+ paths) │ │ │ └─────┬──────┘ │ └──────┬───────┘ └──────┬───────┘ │ │ │ │ │ │ │ │ ┌─────▼──────┐ │ │ ┌──────▼───────┐ │ │ │ Version │ │ │ │ Validation │ │ │ │ Check │ │ │ │ + Cleanup │ │ │ └────────────┘ │ │ └──────────────┘ │ └──────────────────┴──────────────────────────────────────┘ ``` ### Endpoint 发现策略 扫描器采用**分层暴力破解**方法,并为每个目标设置了时间预算 (15秒): | 层级 | 任务 | 文件参数 | 文件夹参数 | 目标路径 | 总组合数 | |:---|:---|:---|:---|:---|:---| | **第一层** (已确认) | `browse.ajaxAddPicture` + 3 个其他任务 | `file`, `Filedata` | `path`, `folder`, `dir` | 前 4 个 PBCK 目录 | 96 | | **第二层** (全网格) | 12 个任务 | 4 个参数 | 5 个参数 | 20+ 条路径 | 4,800+ | 每个组合:上传 `.txt` 探针 → 通过 GET 验证 → 成功则匹配。一旦确认立即返回。 ### 扩展名绕过原理 CKFile::makeSafe() 在某些配置下会阻止 `.php`。绕过策略如下: ``` Tier 1: Fast php, PHP, pht, phar ↓ (if blocked) Tier 2: Case juggling Php, pHp, PhP, pHt, PHT, PhTmL, pHtml, ... ↓ (if blocked) Tier 3: Alternative handlers php3, php4, php5, php6, php7, php8, phtml, shtml, inc ↓ (if blocked) Tier 4: Double extensions php.jpg, jpg.php, php.png, php.gif, php.txt ↓ (if blocked) Tier 5: Windows tricks php., PHP., php. , php.SWF ``` ### CSRF token 收集 Joomla 的 CSRF token 嵌入在**每个页面**中 —— 首页、登录、注册、联系表单、后台管理: ``` CSRF_PAGES = [ "", # homepage "/index.php?option=com_users&view=login", # login "/index.php?option=com_users&view=registration", # registration "/index.php?option=com_contact&view=contact&id=1", # contact "/administrator/index.php", # admin login ] ``` 模式 A — HTML 隐藏输入框: `` 模式 B — JSON 配置: `"csrf.token":"
⚡ 专为安全研究社区精心打造 ⚡
Joomla® 是 Open Source Matters, Inc. 的注册商标。
本项目不附属于 Joomla、Open Source Matters 或 Page Builder CK,也未获得其认可。
标签:CISA项目, Joomla, Python, 子域名变形, 批量攻击, 无后门, 编程工具, 网络信息收集, 远程代码执行, 逆向工具