Содержание статьи
warning
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону.
Brute force — это атака на аутентификацию через грубый перебор вариантов. Задача атакующего — подобрать данные для входа в систему: пару логин/пароль, одноразовый код при двухфакторной авторизации или токен сброса пароля. «Грубость» перебора заключается в том, что игнорируются все условия, кроме того, подошел пароль или нет.
Важное условие для брута — отсутствие ограничений на количество попыток либо возможность обойти эти ограничения, например через использование прокси. Если разработчик ограничил число попыток входа для аккаунта, схема ломается полностью или значительно замедляется. В этом случае брутить креды бессмысленно.
В веб‑брутфорсе серьезные проблемы может добавить капча (картинка, которую нужно «разгадать», чтобы доказать, что ты не робот). Капча — это всегда удорожание для брута. В лучшем случае потребуется подключить сервис разгадывания капчи. В худшем — писать бота, имитирующего поведение пользователя. Современные hCaptcha и reCaptcha прекрасно определяют ботов.
Брутфорс — очень шумная атака. Миллионы попыток авторизации заметит даже самый рассеянный админ. Используй брут только в крайних случаях и в ограниченном режиме. Помни, что такая атака допустима только при официально оформленном пентесте: брутить можно только ресурсы, на которые получено официальное разрешение. Но если подберешь пароль клиента, то сильно поможешь ему: чаще всего люди используют очень похожие пароли на разных ресурсах.
Примером реального брута может быть ситуация с «Вконтакте» в ранние годы существования. Раньше алгоритмы ВК вообще не интересовало, какой пароль у пользователя. Пользователи тоже не были искушены в вопросе выбора и ставили очень простые пароли.
Некоторые расслаблялись настолько, что использовали номер мобильного как логин и пароль. Хакерам оставалось составить базу номеров телефонов и написать скрипт, который выполнял запрос авторизации. Старички говорят, что за ночь брута можно было выловить сотню аккаунтов.
Первый брутфорс
Давай проведем атаку на специализированное уязвимое приложение — DVWA (Damn Vulnerable Web Application). В Kali Linux для этого выполняем
sudo apt update
sudo apt install dvwa -ysudo dvwa-start
После команды dvwa-start в браузере откроется тестовое приложение. Адрес приложения обычно выглядит так:
http://127.0.0.1:42001/login.php
Авторизуйся с данными admin/. Нажми Create / Reset Database. Лаба создаст базу данных и попросит снова авторизоваться. В этот раз используй креды admin/.
Для атаки пропустим трафик через Burp Suite. Обычно Burp проксирует на http://. У меня порт 8080 занят, поэтому я зашел на вкладку Proxy и нажал шестеренку Proxy . В появившемся окне настроек в списке прокси я добавил прокси на 8081. Жми Add, в поле Bind укажи номер порта.
Настрой браузер, чтобы трафик шел через Burp. Например, при помощи расширения браузера FoxyProxy.

Когда все будет готово, в левом меню DVWA выбери Brute Force. Попробуй авторизоваться с данными admin/. Попытка будет неудачной. Вернись в Burp на вкладку Proxy и в истории запросов найди подобный отчет:
POST /vulnerabilities/brute/ HTTP/1.1
Host: 127.0.0.1:42001
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded
Content-Length: 83
Origin: http://127.0.0.1:42001
Connection: keep-alive
Referer: http://127.0.0.1:42001/vulnerabilities/brute/
Cookie: security=impossible; PHPSESSID=c0fb20810a07f4eff1d5c4096d3a4469
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
Priority: u=0, i
username=admin&password=123&Login=Login&user_token=f08b2238488f57e6a3b0168afee6c137
У тебя будут отличаться значения PHPSESSID и user_token — это небольшая защита от брутфорса. Кликни по запросу правой кнопкой мыши и выбери Send to Intruder. В Burp Intruder выдели пароль 123 и жми кнопку Add, чтобы указать «Интрудеру» позицию для подстановки значений.
Скопируй этот незатейливый словарь:
123123
admin
password
p@$$w0rD
Gfhjkm

Когда ты добавил позицию для подстановки, справа появилось окно настроек. В блоке Payload configuration нажми кнопку Paste, чтобы подставить наш простой словарь. Для начала атаки нажми оранжевую кнопку Start attack и дождись окончания.

В списке результатов ищи тот ответ сервера, который отличается от других. Обрати внимание на столбец Length, успешная авторизация — 5133 байт, неуспешные попытки — 5059. Если откроешь вкладку Response, в тексте ответа найдешь Welcome to the password protected area.
Поздравляю, ты выполнил свою первую атаку брутфорсом!
Для подбора мы использовали собственный словарь с вариантами паролей. В реальных пентестах ты будешь обращаться к другим словарям. Например, для подбора пин‑кода из четырех цифр словарь будет состоять из числовых значений от 0000 до 9999. Атакуя роутер, будешь использовать набор заводских паролей, собранных на сайте производителя.
Для подбора пароля, который придумал пользователь, есть специализированные словари паролей. Чаще всего это пароли, слитые из разных баз данных взломанных ресурсов.
Словари для брута
Самый популярный словарь для брута — rockyou.txt. Словарь появился в результате атаки на компанию RockYou в 2009 году. Логины и пароли хранились в базе данных компании в открытом виде. Через SQL-инъекцию хакеры украли данные ~32,6 миллиона аккаунтов с логинами и паролями. База была очищена от дублей, в итоге в файле осталось 14 341 564 уникальных пароля.
Топовый набор словарей, включая варианты словарей с паролями, — SecLists. Можешь скачать набор словарей из репозитория. В Kali Linux, если набор не установлен, используй apt .
Есть альтернативы. Например, много вариантов словарей можно найти в fuzzdb в папке wordlists-user-passwd.
Чекнуть, есть ли твой любимый пароль в слитых базах и словарях, можно на сайте Have I Been Pwned.

Подходы в бруте
Перебор пар логин/пароль бывает нереальным с точки зрения количества вариантов. На большом ресурсе может быть миллион логинов. Если применить к ним 14 миллионов паролей из словаря rockyou, потребуется 14 триллионов попыток. При работе в 100 потоков ты потратишь 1 660 925 дней, или примерно 60 жизней! И это без каких‑либо лагов и задержек.
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
