
CLI em Rust que testa métodos HTTP (incluindo verbos WebDAV e DeltaV) contra uma URL de destino para revelar verb tampering, contornos de controle de acesso e exposição não intencional de métodos.
Ferramenta para fazer HTTP Verb Tampering. Ela testa métodos HTTP contra uma URL alvo para descobrir configurações incorretas, bypasses e exposição não intencional de métodos.
Se o hvt não atende às suas necessidades, verifique estes:
Alguns servidores web e proxies tratam métodos HTTP de forma inconsistente. Um caminho que retorna 403 em GET pode retornar 200 em POST, PUT ou em um método WebDAV obscuro. O hvt dispara todos os métodos que você escolher contra um alvo e expõe qualquer coisa que valha a pena investigar.
Requer toolchain Rust e um linker 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
Para usuários de Nix ou NixOS, há um pacote disponível. Tenha em mente que as versões mais recentes podem estar presentes apenas no canal unstable.
$ nix-env -iA nixos.hvt
Execute os testes unitários dentro do shell de desenvolvimento do Nix (fornece o gcc exigido pela dependência ring):
nix develop
cargo test
Ou execute-os inteiramente através do Nix sem entrar em um shell:
nix flake check
nix flake check compila o projeto com gcc disponível e executa cargo test em um ambiente de build isolado.
hvt -u <URL> [OPTIONS]
| Flag | Padrão | Descrição |
|---|---|---|
-u, --url | (obrigatório) | URL de destino incluindo o esquema |
-t, --threads | 5 | Threads de requisições simultâneas |
--all | - | Testa todos os 53 métodos conhecidos (WebDAV, DeltaV, etc.) |
--safe | - | Testa apenas métodos seguros: GET, HEAD, OPTIONS |
-m, --methods | - | Lista personalizada de métodos separada por vírgulas |
-w, --wordlist | - | Arquivo com um método por linha (# para comentários) |
-s, --show | - | Mostra apenas estes códigos de status (separados por vírgulas) |
-x, --hide | - | Oculta estes códigos de status (separados por vírgulas) |
-H, --header | - | Cabeçalho personalizado, repetível ("Name: Value") |
-c, --cookie | - | String de cookie ("name=value; name2=value2") |
--proxy | - | URL do proxy (http://... ou socks5://...) |
-k, --insecure | - | Aceita certificados TLS inválidos/autoassinados |
-L, --follow-redirects | - | Segue redirecionamentos (desativado por padrão para expor 3xx) |
-T, --timeout | 10 | Tempo limite por requisição em segundos |
-o, --output | - | Salva os resultados em um arquivo de texto |
-j, --json | - | Exporta os resultados para um arquivo JSON |
-q, --quiet | - | Suprime o banner e as linhas de informação |
| Flag | Métodos |
|---|---|
| (padrão) | GET HEAD POST PUT DELETE CONNECT OPTIONS TRACE PATCH |
--safe | GET HEAD OPTIONS |
--all | 53 métodos - comuns + WebDAV (PROPFIND, MKCOL, COPY, MOVE, LOCK...), DeltaV (CHECKOUT, CHECKIN, MERGE...) e outros (PURGE, SEARCH, SUBSCRIBE, REBIND...) |
Varredura básica com os 9 métodos padrão:
hvt -u https://example.com/admin
Varredura completa, 20 threads, ocultar 405:
hvt -u https://example.com --all -t 20 -x 405
Métodos personalizados com cabeçalho de autenticação, salvar JSON:
hvt -u https://api.example.com/v1/users \
-m GET,POST,PUT,DELETE,PATCH \
-H "Authorization: Bearer <token>" \
-j results.json
Através do Burp Suite, ignore erros de TLS:
hvt -u https://target.local/api -k --proxy http://127.0.0.1:8080
Modo wordlist, mostrar apenas 2xx e 3xx:
hvt -u https://example.com -w methods.txt -s 200,201,301,302
Modo silencioso para piping:
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]
Métodos não-GET/HEAD que retornam 2xx ou 3xx são sinalizados no resumo como potencialmente interessantes.
MIT