先用fscan扫描
fscan -h 10.129.245.100
发现80端口,去访问发现服务是
FreePBX 16.0.40.7
网上查找到对应的rce脚本
直接进行利用反弹shell
nc -l 4444
得到了用户的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:关键代码:
这里的利用思路是:
- 外层传入只包含安全字符的 base64 字符串,绕过
sysadmin_manager的参数过滤。
fwconsole-commandshook 会对该参数做base64_decode + gzuncompress + json_decode。
- 解码后的
$settings[0]会被拼接进/usr/sbin/fwconsole $command 2>&1。
- 由于这里没有转义
$command,可以通过分号追加 root 命令。
需要注意的是,
/var/spool/asterisk/incron 同时监听 IN_MODIFY、IN_ATTRIB、IN_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:

- 作者:NotionNext
- 链接:http://qetx.top/article/3afb233d-8731-805f-870a-d2a3c3ee75fd
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。







