
Rust CLI, который проверяет HTTP-методы (включая WebDAV и DeltaV-команды) на целевом URL для выявления подмены методов, обхода контроля доступа и непреднамеренного раскрытия методов.
Инструмент для HTTP Verb Tampering. Он проверяет HTTP-методы на целевом URL, чтобы выявить ошибки конфигурации, обходы и непреднамеренное раскрытие методов.
Если hvt вам не подходит, обратите внимание на следующие инструменты:
Некоторые веб-серверы и прокси обрабатывают HTTP-методы непоследовательно. Путь, возвращающий 403 при GET, может вернуть 200 при POST, PUT или каком-нибудь экзотическом методе WebDAV. 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
Запустите модульные тесты внутри dev-оболочки Nix (она предоставляет gcc, необходимый для зависимости ring):
nix develop
cargo test
Или запустите их полностью через Nix, не входя в оболочку:
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]
Методы, отличные от GET/HEAD, возвращающие 2xx или 3xx, отмечаются в сводке как потенциально интересные.
MIT