💻 LabProbe: пишу свой сканер на Rust и проверяю его на OWASP Juice Shop
«Сервер вернул 200 - значит, путь найден!» Звучит красиво. Пока не выясняется, что на любой выдуманный адрес приложение отдаёт одну и ту же HTML-страницу 😏
Именно с этой проблемой я разбирался, когда дорабатывал свой небольшой сканер HTTP-путей - LabProbe.
🔍 Что сделал
Вместо простого перебора адресов добавил калибровку. Перед основной проверкой сканер отправляет три запроса на случайные, предположительно несуществующие пути и сохраняет ответы для сравнения.
Дальше сравнивает не только размер страницы, но и:
▪ HTTP-статус;
▪ тип содержимого;
▪ заголовок перенаправления;
▪ тело ответа целиком.
Совпадения не скрываются, а помечаются отдельно. Почему это важно? Потому что в моём тесте даже главная страница совпала с калибровочными ответами. Если бездумно отбрасывать всё одинаковое, можно спрятать от себя вполне реальный маршрут.
⚙️ Что умеет текущая версия
🦀 Асинхронные запросы на Rust.
🇷🇺 Русскоязычные описания параметров и результаты.
🎛 Настройка параллельности и таймаута.
📦 Ограничение размера тела ответа.
🔀 Работа через явно заданный прокси - в том числе Burp Suite.
🛑 Отключённые автоматические редиректы.
🏠 Ограничение целей локальными адресами.
📊 Итоговая статистика без молчаливого проглатывания ошибок.
🧪 Что получилось на стенде
Запустил инструмент на Parrot Security OS против локального OWASP Juice Shop.
Результат проверки словаря:
- 6 запросов;
- 4 совпадения с калибровочными ответами;
- 2 отличающихся ответа;
- 0 ошибок запросов и задач.
Отдельно выделились /robots.txt и JSON-ответ /rest/products/search?q=apple. А выдуманные пути возвращали HTML по 9984 байта с кодом 200 - тот самый случай, когда один HTTP-статус ничего толком не говорит.
В карусели - четыре этапа: проверка и сборка проекта, справка, запуск на стенде и итоговая статистика. 📸
⚠️ Главное: «ответ отличается» не означает «найдена уязвимость». А «совпадает с заглушкой» не означает «пути не существует».
Пока это лабораторный инструмент для сбора наблюдений, а не волшебная кнопка «найти все дыры». Точное сравнение тоже не всесильно: динамические заглушки могут отличаться от запроса к запросу.
Мне в таких проектах нравится сам процесс: написать, запустить, увидеть слабое место в своей логике и исправить. Иногда главный баг на пентесте - не у приложения, а в предположениях сканера 😎
Тестирую только свой локальный стенд. Без чужих целей и приключений.
Просмотры: 7