PortSwigger Web Academy Lab: Username enumeration via different responses
Вводная часть
В данной лабораторной работе, исходя из постановки задачи, необходимо будет перебрать списки возможных пользователей и паролей (атака методом Brute Force). Ссылка на лабораторную работу: https://portswigger.net/web-security/authentication/password-based/lab-username-enumeration-via-different-responses
Выбор инструментов и настройка
В любой задаче правильный туллинг и инструментация - уже 20% результата, а где-то даже больше. Будем использовать Burp Suite community edition (поставляется в наборе инструментов дистрибутива Kali Linux). Burp Suite работает в режиме proxy для анализа и изменения отправляемых запросов и получения ответов. Для быстрого переключения proxy в браузере при работе с Burp Suite советую использовать расширение FoxyProxy: https://addons.mozilla.org/ru/firefox/addon/foxyproxy-standard/.
Прохождение
В описании к данной работе нам предоставляются списки потенциальных логинов и паролей. Но для начала попробуем вручную протестировать форму авторизации (чтобы понять механизм авторизации и захватить несколько запросов для последующей работы с Burp Suite).
Заметим, как реагирует форма авторизации на попытку входа с неправильными учетными данными. Теперь рассмотрим как выглядит данный запрос в Burp Suite (Предварительно включив его перед работой и настроив proxy).
Для перебора логинов и паролей воспользуемся Intruder-ом. С помощью него можно будет формировать запросы с устанавливаемыми из подготовленных списков полями. В описании к работе нам предлагается по 100 возможных паролей и логинов для входа. Для полного перебора сразу логинов и паролей понадобится 100000 запросов, что Burp Suite в community версии в однопоточном режиме будет делать ощутимо долго. Поэтому для начала попробуем подобрать правильный логин, а потом уже пароль (максимум понадобится 200 запросов).
Отправим наш тестовый неудачный запрос на авторизацию в Intruder. Выберем тип атаки Sniper (будет доступен один набор payload-ов). Добавим метки вокруг поля с предполагаемым логином.
В названии работы была подсказка, поэтому и стоит обратить внимание на отличающуюся длину ответа (да и в любом случае стоило бы обратить внимание).
Теперь, когда у нас есть логин пользователя мы сможем подобрать его пароль. Теперь в intruder мы зафиксируем имя пользователя <ar>. А пароль будем перебирать из предложенного в работе списка.
Теперь попробуем авторизоваться с учетными данными ar:thunder.
Вывод
Из-за изменения вывода информационного сообщения при попытке входа с правильным логином, но неправильным паролем мы смогли подобрать пароль за 200 запросов. Даже если бы сообщение не изменялось мы бы смогли подобрать данные за 10000 запросов, т.к. форма авторизации не защищена от Brute-force атак.