На странице
Сломанная логика 2FA
Лаборатория
2FA broken logic · Apprentice
Решение
Дано
This lab's two-factor authentication is vulnerable due to its flawed logic. To solve the lab, access Carlos's account page.
Your credentials: wiener:peter
Victim's username: carlos
You also have access to the email server to receive your 2FA verification code.
Анализ задания
Есть уязвимая логика 2FA на сайте, у нас есть свой аккаунт, где мы можем посмотреть, как работает механизм. Для решения лабы нам нужно получить доступ к странице пользователя carlos.
Разведка
Попробуем пройти 2FA-флоу под своим пользователем.
POST /login, в теле имя и пароль. Ответ + редирект на/login2:Set-Cookie: verify=wiener; HttpOnly Set-Cookie: session=EBdAlyofdB1mRMdQSvTDuKzeWSgj9t64; Secure; HttpOnly; SameSite=None- На
GET /login2форма ввода кода 2FA. Вводим его из имейла.POST /login2, в теле кодmfa-code=1507, и передаётся кука:Cookie: session=EBdAlyofdB1mRMdQSvTDuKzeWSgj9t64; verify=wiener
В ответ 302 — успешный вход.
Интересно, что кука verify ставится на первом шаге, потом на втором шаге редирект на страницу ввода кода. По сути эта кука указывает серверу, для какого пользователя осуществляется запрос, а мы можем её подменить. Попробовать вызвать GET /login2 с verify=carlos и тем самым вызвать создание 2FA-кода для него. И после чего с помощью вызова POST /login2 попробовать осуществить брутфорс-атаку на код, длина всего 4 символа.
- Отправим запрос на генерацию кода
GET /login2дляcarlos, задавverify=carlos. - Получили форму ввода кода, нажмём отправку кода.
- Улетел запрос на
POST /login2, его и закидываем в Intruder. - Выбираем нагрузку «Brute forcer», задаём 4 символа.
- Добавляем переменную в тело запроса
mfa-code=§pwd§. - Запускаем атаку.
Ищем 302 редирект. Мы получили код — 0314. Отправляем запрос:
POST /login2
Cookie: session=MAEXN9XadoWSU7iCsN4RFiE6GEQnk1hs; verify=carlos
mfa-code=0314
В ответ 302 и новая кука. Записываем куку session, заменяем у себя в браузере, обновляем страницу.
Лаба решена!
Ещё в этой категории
Эксплуатация небезопасной десериализации через функции приложения (PortSwigger Lab)
Подмена поля `avatar_link` в объекте сессии для удаления произвольного файла через функцию удаления аккаунта.
Изменение типов сериализованных данных (PortSwigger Lab)
Эксплуатируем нестрогое сравнение PHP, меняя тип `access_token` на целое `0` и обходя аутентификацию.
Изменение сериализованных объектов (PortSwigger Lab)
Меняем булево поле `admin` в PHP-сериализованной куке сессии и получаем права администратора.