用于进行 HTTP 动词篡改(HTTP Verb Tampering)。它针对目标 URL 探测 HTTP 方法,以发现错误配置、绕过以及意外暴露的方法。
如果 hvt 不符合你的需求,可以看看这些:
一些 Web 服务器和代理对 HTTP 方法的处理方式不一致。一个在 GET 请求下返回 403 的路径,在 POST、PUT 或某个冷门的 WebDAV 方法下可能返回 200。hvt 会对你选定的每个方法向目标发起请求,并暴露出任何值得进一步调查的内容。
需要 Rust 工具链和 C 链接器(gcc)。
git clone <repo>
cd hmt
cargo build --release
./target/release/hvt --help
nix-shell # drops into a shell with cargo + gcc
cargo build --release
nix build # produces result/bin/hvt
nix run . -- -u https://example.com
nix develop # dev shell
对于 Nix 或 NixOS 用户,有可用的软件包。请注意,最新版本可能仅存在于 unstable 频道中。
$ nix-env -iA nixos.hvt
在 Nix 开发 shell 中运行单元测试(该 shell 提供 ring 依赖所需的 gcc):
nix develop
cargo test
或者完全通过 Nix 运行它们,而无需进入 shell:
nix flake check
nix flake check 在 gcc 可用的条件下编译项目,并在沙箱构建环境中执行 cargo test。
hvt -u <URL> [OPTIONS]
| 标志 | 默认值 | 描述 |
|---|---|---|
-u, --url | (必填) | 目标 URL(包含协议方案) |
-t, --threads | 5 | 并发请求线程数 |
--all | - | 测试全部 53 种已知方法(WebDAV、DeltaV 等) |
--safe | - | 仅测试安全方法:GET、HEAD、OPTIONS |
-m, --methods | - | 逗号分隔的自定义方法列表 |
-w, --wordlist | - | 每行一个方法的文件(# 表示注释) |
-s, --show | - | 仅显示这些状态码(逗号分隔) |
-x, --hide | - | 隐藏这些状态码(逗号分隔) |
-H, --header | - | 自定义请求头,可重复使用("Name: Value") |
-c, --cookie | - | Cookie 字符串("name=value; name2=value2") |
--proxy | - | 代理 URL(http://... 或 socks5://...) |
-k, --insecure | - | 接受无效/自签名 TLS 证书 |
-L, --follow-redirects | - | 跟随重定向(默认关闭,以便暴露 3xx 响应) |
-T, --timeout | 10 | 每个请求的超时时间(秒) |
-o, --output | - | 将结果保存到文本文件 |
-j, --json | - | 将结果导出到 JSON 文件 |
-q, --quiet | - | 抑制横幅和信息行输出 |
| 标志 | 方法 |
|---|---|
| (默认) | GET HEAD POST PUT DELETE CONNECT OPTIONS TRACE PATCH |
--safe | GET HEAD OPTIONS |
--all | 53 种方法 - 常见方法 + WebDAV(PROPFIND、MKCOL、COPY、MOVE、LOCK...)、DeltaV(CHECKOUT、CHECKIN、MERGE...)以及其他方法(PURGE、SEARCH、SUBSCRIBE、REBIND...) |
使用默认 9 种方法进行基本扫描:
hvt -u https://example.com/admin
完整扫描,20 个线程,隐藏 405:
hvt -u https://example.com --all -t 20 -x 405
带认证头的自定义方法,保存 JSON:
hvt -u https://api.example.com/v1/users \
-m GET,POST,PUT,DELETE,PATCH \
-H "Authorization: Bearer <token>" \
-j results.json
通过 Burp Suite,忽略 TLS 错误:
hvt -u https://target.local/api -k --proxy http://127.0.0.1:8080
词表模式,仅显示 2xx 和 3xx:
hvt -u https://example.com -w methods.txt -s 200,201,301,302
用于管道传输的静默模式:
hvt -u https://example.com -q -j - | jq '.results[] | select(.status < 300)'
Target : https://example.com
Methods : 9 (common)
Threads : 5
METHOD STATUS SIZE TIME INFO
──────────────────────────────────────────────────────────
GET 200 1256 B 42ms OK
HEAD 200 0 B 38ms OK
POST 405 312 B 41ms Method Not Allowed
PUT 405 312 B 40ms Method Not Allowed
DELETE 405 312 B 39ms Method Not Allowed
CONNECT 400 0 B 38ms Bad Request
OPTIONS 200 0 B 38ms OK Allow: GET, HEAD, OPTIONS
PATCH 405 312 B 39ms Method Not Allowed
Summary
Target : https://example.com
Tested : 9
Errors : 0
2xx : GET [200], HEAD [200], OPTIONS [200]
返回 2xx 或 3xx 的非 GET/HEAD 方法会在摘要中被标记为可能值得关注。
MIT