💻 LabProbe: пишу свой сканер на Rust и проверяю его на OWASP Juice Shop
💻 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-статус ничего толком не говорит. В карусели - четыре этапа: проверка и сборка проекта, справка, запуск на стенде и итоговая статистика. 📸 ⚠️ Главное: «ответ отличается» не означает «найдена уязвимость». А «совпадает с заглушкой» не означает «пути не существует». Пока это лабораторный инструмент для сбора наблюдений, а не волшебная кнопка «найти все дыры». Точное сравнение тоже не всесильно: динамические заглушки могут отличаться от запроса к запросу. Мне в таких проектах нравится сам процесс: написать, запустить, увидеть слабое место в своей логике и исправить. Иногда главный баг на пентесте - не у приложения, а в предположениях сканера 😎 Тестирую только свой локальный стенд. Без чужих целей и приключений.