
Быстрое обнаружение HTTP-параметров для авторизованного тестирования безопасности

Быстрый поиск HTTP-параметров для bug bounty и авторизованного тестирования на проникновение. ParamTrace отправляет записи из словаря в качестве параметров и отмечает те, которые изменяют ответ по сравнению с базовым.
Правовое уведомление: используйте ParamTrace только в системах, которыми вы владеете, или на которые у вас есть явное письменное разрешение на тестирование (например, в рамках bug bounty в пределах области действия). Вы несёте ответственность за то, как вы его используете.
Инструменты поиска параметров уже существуют (Arjun, x8, Param Miner для Burp). ParamTrace — это небольшая, сфокусированная альтернатива:
--tolerance обрабатывает страницы, которые меняются при каждом запросе.Когда стоит использовать что-то другое: если вы уже работаете в Burp, Param Miner подойдёт лучше. Для пакетной отправки множества параметров за один запрос зрелые инструменты вроде Arjun или x8 сегодня быстрее. Пакетная обработка есть в планах ParamTrace.
Готовые бинарники (Linux x86_64 и aarch64, macOS Apple Silicon, Windows) доступны на странице релизов, каждый с файлом контрольной суммы .sha256. Например, на Linux (используйте файл aarch64 для Kali NetHunter на телефоне):
tar -xzf paramtrace-*-linux-x86_64.tar.gz
sudo cp paramtrace-*-linux-x86_64/paramtrace /usr/local/bin/
Termux использует библиотеку C от Android, поэтому бинарники для 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. Если после установки команда не найдена, добавьте папку bin Cargo в ваш 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, без ложных срабатываний, примерно за 3 минуты при 10 потоках. Сервер отвечал 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.