
面向漏洞赏金和授权渗透测试的快速 HTTP 参数发现工具。 ParamTrace 将字典条目作为参数发送,并标记出那些与基线相比会改变响应的参数。
法律声明: 仅在你拥有或已获得明确书面许可测试的系统上使用 ParamTrace (例如,在范围内的漏洞赏金目标)。你对如何使用它负责。
参数发现工具已经存在(Arjun、x8、用于 Burp 的 Param Miner)。ParamTrace 是一个小巧、专注的替代方案:
--tolerance 可处理每次请求都会变化的页面。何时使用其他工具: 如果你已经习惯使用 Burp,Param Miner 更合适。对于每个请求批量测试多个参数,像 Arjun 或 x8 这样成熟的工具目前更快。批量测试已在 ParamTrace 的路线图中。
预构建的二进制文件(Linux x86_64 和 aarch64、macOS Apple Silicon、Windows)位于 Releases 页面,每个都附带 .sha256 校验和文件。例如,在 Linux 上(手机上用于 Kali NetHunter 请使用 aarch64 文件):
tar -xzf paramtrace-*-linux-x86_64.tar.gz
sudo cp paramtrace-*-linux-x86_64/paramtrace /usr/local/bin/
Termux 使用 Android 的 C 库,因此 Linux 二进制文件无法在其中运行。请改为从源码安装:cargo install --git https://github.com/CurioTrace/paramtrace
测试状态: Linux aarch64 二进制文件(Kali NetHunter)和 Termux 源码构建已由作者测试。Linux x86_64、macOS 和 Windows 二进制文件会在每次发布时自动构建,但作者尚未运行过它们,因此如果某个二进制文件无法正常工作,请提交 issue。这些二进制文件未签名,因此 Windows 或 macOS 在首次运行时可能会显示警告;你可以使用对应的 .sha256 文件验证下载内容。
或从源码构建:
git clone https://github.com/CurioTrace/paramtrace
cd paramtrace
cargo build --release
# binary: target/release/paramtrace
# optional: install it so you can just type `paramtrace`
cargo install --path .
已在 Termux(Android)和 Kali NetHunter 上测试。它应该能在任何 Rust 可构建的环境中构建(使用 rustls,无需 OpenSSL)。

以下示例假设
paramtrace已在你的 PATH 中(参见上文的cargo install --path .)。 如果你只运行了cargo build --release,请改用./target/release/paramtrace。 如果安装后找不到该命令,请将 Cargo 的 bin 文件夹添加到你的 PATH:export PATH="$HOME/.cargo/bin:$PATH"
paramtrace -u https://example.com/search -w wordlists/common.txt
paramtrace -u https://example.com/api -w words.txt -m post -t 20
paramtrace -u https://example.com/ -w words.txt -H "Cookie: session=abc" --proxy http://127.0.0.1:8080
paramtrace -u https://example.com/ -w words.txt -o out.json -f json
| 参数 | 描述 |
|---|---|
-u, --url | 目标 URL |
-w, --wordlist | 参数字典 |
-m, --method | get(默认)或 post |
-t, --threads | 并发请求数(默认 10) |
-H, --header | 额外请求头,可重复指定 |
--timeout | 请求超时时间(秒,默认 10) |
--delay | 每次请求的延迟(毫秒) |
--tolerance | 忽略不超过 N 字节的大小差异(适用于动态页面) |
--value | 为每个参数发送的值(值少于 4 个字符会禁用反射检查) |
--proxy | 代理 URL(Caido、Burp) |
-k, --insecure | 跳过 TLS 验证 |
-q, --quiet | 隐藏启动横幅 |
-o, --output / -f, --format | 将结果保存为 text 或 json |
在我自己的 PortSwigger Web Security Academy 实验环境中进行了测试:使用包含 6,454 个条目的字典(6,453 个错误名称加上真实参数 productId),ParamTrace 仅标记了 productId,没有误报,在 10 个线程下耗时约 3 分钟。服务器在带参数和不带参数时都返回 400,因此仅检查状态码会漏掉它。ParamTrace 通过比较响应大小捕获了它。
速度在很大程度上取决于网络,并且参数名称区分大小写,因此字典必须包含服务器期望的准确名称。
--tolerance 0 进行精确比较。wordlists/common.txt 中有一个小型入门列表。如需更大的列表,请参阅
SecLists。
对于真实目标,请下载更大的列表(约 6,000 个名称)并温和地扫描:
curl -L -o wordlists/burp-params.txt https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/burp-parameter-names.txt
paramtrace -u https://example.com/page -w wordlists/burp-params.txt -t 5 --delay 100
参数名称区分大小写。 如果服务器期望的是 productId,它不会对 productid 作出反应,因此 ParamTrace 只能找到你字典中拼写与目标完全一致的名称。许多字典都是全小写的,所以请先检查你的字典,例如:grep -c -x productId yourlist.txt。
-t, --threads 限制同时进行的请求数量(默认 10)。--delay N 在每个请求前等待 N 毫秒。它适用于每个并发请求,因此线程越多,整体每秒请求数仍然越多。--timeout 防止慢速请求挂起扫描。429 Too Many Requests,ParamTrace 不会将这些响应报告为发现结果。它会统计这些响应,并在结束时打印警告,因为结果可能不完整。请降低 --threads、增加 --delay,并查看目标关于请求速率的规则。它目前还不会自动退避或重试。在我自己的一次实验室测试中,-t 3 --delay 150 大约以每秒 6 个请求运行,-t 10 --delay 0 大约以每秒 30 个请求运行,因此速度在很大程度上取决于目标和你的网络连接。
会,这是计划中的主要功能:在一个请求中发送多个名称,并在响应发生变化时缩小范围,这应该需要少得多的请求。ParamTrace 是一个业余项目,因此没有确定日期。
如果 ParamTrace 在评估或漏洞赏金中帮助了你,请考虑留下一个 ⭐(仓库页面顶部的 Star 按钮),帮助其他人发现它。
欢迎在 Issues 中提交错误报告和想法。
MIT