Новое Распределяем каналы MAX по категориям и территориям. Читать новость

Репост из «Хакер | Этичный хакинг с Михаилом Тарасовым»

Прокачал сканер на Rust: теперь он не верит каждому 200 OK 🦀🔍



В прошлом посте я показал асинхронный сканер путей, который собрал за 30 минут и запустил на локальном OWASP Juice Shop. На этом решил не останавливаться: доработал инструмент - и заодно поймал ловушку, из-за которой сканер может радостно находить то, чего на сервере нет.

Что добавил:

- Внешний словарь: пути теперь читаются из файла, а не зашиты в исходник.
- Аргументы командной строки: можно задать адрес стенда, словарь, лимит одновременных запросов и прокси.
- Ограничение конкурентности через Semaphore в Tokio: количество запросов в работе теперь контролируется.
- Прокси для Burp Suite: запросы можно разбирать в HTTP history, а не судить о результате только по терминалу.

Но самое интересное началось после запуска.

Сканер показал 200 OK для /.env, /.git, /admin и других путей. На первый взгляд - праздник баг-хантера. Только шампанское оказалось преждевременным. 😏

Сервер отвечает - это ещё не находка
На нашем стенде приложение возвращало HTML-заглушку даже при обращении к несуществующему пути. Поэтому проверка «получил 200 - значит, нашёл файл» давала ложные срабатывания.

Добавил калибровку: перед проходом по словарю сканер запрашивает заведомо выдуманный путь и измеряет размер тела ответа. Затем отбрасывает ответы с такой же длиной. В вывод также добавил размер и Content-Type - теперь видно не только статус, но и характер ответа.

На моём стенде размер заглушки составил 9984 байта. После фильтрации из словаря на 13 путей в выводе остались:

[200] [28 байт] [text/plain] /robots.txt
[200] [26227 байт] [text/plain] /metrics
[200] [26411 байт] [application/json] /api/Products

Это результат конкретного локального прогона, а не список подтверждённых уязвимостей. Зато шума стало заметно меньше: вместо пачки одинаковых HTML-страниц - ответы, которые можно разбирать дальше.

Как запускаю

./target/release/juice_scanner \
-u http://127.0.0.1:3000 \
-w paths.txt \
-t 5 \
-p http://127.0.0.1:8080

Здесь -t 5 задаёт лимит пяти одновременно выполняющихся запросов, а -p направляет трафик через Burp Suite. Проверку провожу на своём локальном полигоне.

Важная оговорка: фильтр пока сравнивает только длину тела ответа. Совпадение размеров не доказывает, что содержимое одинаковое, поэтому считать такую проверку универсальной защитой от ложных срабатываний я не буду. Это полезная эвристика прототипа, а не магия.

Главный апгрейд здесь даже не новые флаги. Я перестал считать зелёную строку в терминале доказательством находки.

Написать сканер, который радуется каждому 200 OK, несложно. Научить его сомневаться - вот где начинается интересная инженерная работа. 💻
Просмотры: 7
Открыть в MAX Сообщить о неточности

Сообщить о неточности

Опишите, что нужно исправить. Если есть источник, добавьте ссылку.

Вы покидаете datool.ru

Ссылка ведёт на внешний сайт. datool.ru не отвечает за его содержимое — проверьте адрес, прежде чем вводить пароли или платёжные данные.

Переход через 10 с

Перейти