На этом этапе вы определите и проанализируете целевую веб-форму для атаки методом «распыления паролей». В этом упражнении мы будем использовать специально уязвимое веб-приложение, запущенное на http://localhost:8080
. Метод «распыления паролей» заключается в попытке нескольких распространенных паролей на многих учетных записях пользователей, поэтому понимание структуры формы входа в систему является важным перед началом атаки.
-
Сначала убедитесь, что целевое веб-приложение запущено:
curl -I http://localhost:8080/login
Флаг -I
сообщает curl получить только HTTP-заголовки. Вы должны увидеть статус 200 OK
, подтверждающий, что страница входа доступна. Если вы получаете ошибку подключения, убедитесь, что веб-сервер запущен, прежде чем продолжать.
-
Изучите структуру формы входа, просмотрев исходный код страницы:
curl http://localhost:8080/login | grep -A5 -B5 "form"
Эта команда получает HTML-содержимое и показывает 5 строк до и после любых тегов <form>
. Найдите атрибут action
формы (куда отправляются данные) и имена полей ввода - обычно они называются username
и password
, но могут отличаться.
-
Создайте файл для тестового запроса, чтобы документировать параметры формы:
nano form_test.txt
Добавьте следующее содержимое, чтобы записать важные детали, необходимые Hydra:
Target URL: http://localhost:8080/login
Method: POST
Username field: username
Password field: password
Failure indicator: "Invalid credentials"
Индикатор неудачи помогает Hydra распознавать, когда попытки входа неудачны. Мы будем использовать этот файл позже для настройки атаки.
-
Протестируйте форму вручную с помощью одной пары учетных данных:
curl -X POST -d "username=admin&password=wrongpass" http://localhost:8080/login -v
-X POST
указывает HTTP-метод, а -d
отправляет данные формы. Флаг -v
показывает подробный вывод, чтобы вы могли проверить ответ "Invalid credentials". Это подтверждает, что форма работает как ожидается при неудачных попытках входа.
-
Проверьте политики блокировки учетных записей, отправив 5 быстрых запросов:
for i in {1..5}; do
curl -X POST -d "username=admin&password=wrong$i" http://localhost:8080/login -s -o /dev/null -w "Attempt $i: %{http_code}\n"
done
Этот цикл отправляет 5 быстрых неудачных попыток. Следите, не изменяется ли HTTP-статус код с 200 (успех) на 403 (запрещено), что может указывать на наличие защит от блокировки. В реальных приложениях часто есть такие защиты, но в нашей тестовой среде их нет.