Содержание статьи
Для автоматизации многошаговых атак отлично подходят скриптовые языки, но не всем и не всегда удобно тратить лишний час на написание и отладку кода, когда рядом лежит готовое решение, требующее минимальной настройки. Что не менее важно, для достижения высокой скорости отправки и обработки запросов, а также для параллельного исполнения нужно знать правильные стеки, которые не тормозят параллельное исполнение и не выполняют лишних действий, усложняющих исполнение.
Если тебе трудно реализовать подобные задачи при помощи языков программирования или ты считаешь, что на это уйдет много времени, можно воспользоваться Burp Suite. Этот инструмент предоставляет сразу несколько способов автоматизации:
- макросы;
- плагин Stepper от сторонних разработчиков;
- плагин Turbo Intruder от создателей Burp Suite.
Мы поговорим о том, что дают эти подходы, об их возможностях и ограничениях.
Рассматривать работу этих трех подходов мы будем на примере задачи, которую приходится решать очень часто: перебор четырехзначных одноразовых паролей, которые используются... Да почти везде. Кстати, на bug bounty за эксплуатацию таких уязвимостей можно получить немалое вознаграждение.
В качестве испытательного стенда прекрасно подойдет задание с образовательного ресурса PortSwigger Academy, требующее от нас выполнения сотен многошаговых повторяющихся действий.
Описание задачи
Вот как сформулирована тестовая задача на сайте PortSwigger Academy:
Двухфакторная аутентификация в этой лаборатории уязвима перед брутфорсом. Ты уже получил имя пользователя и пароль, но не имеешь доступа к верификационному коду пользователя 2FA. Чтобы решить эту проблему, перебором найди код 2FA и получи доступ к странице аккаунта Карлоса.
Учетные данные жертвы:
carlos:
.montoya
Особенность этой задачи состоит в том, что здесь недостаточно просто перебрать код одноразового пароля (One Time Password — далее OTP) с существующей сессией, потому что после двух неправильных попыток приложение перестает считать сессию валидной. Для решения задания нам предстоит выполнять предаутентификацию при помощи учетных данных, а после этого попытаться предсказать OTP-код.
Подробнее о задании
Нам дана страница аутентификации, которая выглядит следующим образом.
![Страница аутентификации Страница аутентификации](https://static.xakep.ru/images/c036c76eb56ee46f69a63321e9d61872/19550/auth-page.jpg)
При вводе учетных данных приложение отправляет следующий запрос на сервер:
POST /login HTTP/1.1Host: ace61ff51f4557d880dbab96004f009d.web-security-academy.netCookie: session=rcnBF1vzBD00ZSjcoswRzttRrEPIQNj2Content-Type: application/x-www-form-urlencodedContent-Length: 70csrf=AxCZcrNQ1Y7x8xTI9odKun0alLM34a9a&username=carlos&password=montoya
Если мы введем учетные данные корректно, на экране появляется следующая страница ввода OTP-кода.
![Страница ввода OTP Страница ввода OTP](https://static.xakep.ru/images/c036c76eb56ee46f69a63321e9d61872/19551/otp-page.jpg)
После ввода случайного OTP-кода приложение отправит следующий запрос:
POST /login2 HTTP/1.1Host: ace61ff51f4557d880dbab96004f009d.web-security-academy.netCookie: session=2gt4P1gFqzyxZJIonAlFv9czYetD5pm0Content-Type: application/x-www-form-urlencodedContent-Length: 51csrf=W9Nei8NhTXl5usVKeynuZ3kbjRHaVjW7&mfa-code=1234
Если мы сможем угадать OTP-код, мы решим задание. Шанс угадать, по сути, не так уж и мал: 1 к 10 000. С учетом того что количество попыток у нас не ограничено, пусть и требует дополнительных действий, результат гарантирован на 100%.
Что важно знать, прежде чем мы приступим к решению этой задачи?
- Приложение использует сессионный идентификатор, который мы получаем при входе на сайт. Он изменяется после первого этапа аутентификации при помощи корректных учетных данных.
- После аутентификации у нас есть только две попытки ввода OTP-кода. После двух неудачных попыток наша сессия инвалидируется и приходится начинать весь процесс с начала.
- Приложение использует CSRF-токены, которые меняются при каждом запросе. Их необходимо подхватывать и подменять для каждого нашего POST-запроса.
Осталось автоматизировать процесс получения сессии, ввода первичных учетных данных, подхвата CSRF-токенов и попыток предсказания OTP-кода. Приступим!
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»