Привет, это сегодня расскажу как можно пройти лабораторию "Username enumeration via response timing" от
2) Работа в Intruder - практика, начинаем брутфорсить.
Введение
Зайдём на главную страницу сайта и введём туда данные которые как мы знаем точно не существуют, и давайте отправим запрос в Repeater
Предположим что мы посмотрели длину и коды ответов, и ничего не нашли.
- Теперь давайте найдём разницу между неверным именем пользователя и верным.
Неверный username занял у нас - 77 мс
Верный username занял - 108 мс
- Давайте ещё раз нажмём вдруг поменяется что то.
Видим, что нас вообще заблокировало, видимо он блокирует мой IP-адрес.
Давайте проверим, может тут слабый механизм блокировки. Нужно выяснить принимает ли он заголовок X-Forwarded-For
! X-Forwarded-For может использоваться для смены IP. Если в приложение встроена обработка данного хедера, просто отправьте X-Forwarded-For: desired_IP для подмены IP, чтобы обойти ограничение без использования дополнительных прокси
Отлично! всё сработало, но мы видим что нет большой разницы между неверным и верным username.
Следующее, что я собираюсь сделать, это увеличить длину пароля, потому что некоторые приложения проверяют первым на валидность имя пользователя, а если не действителен, то они не будут проверять пароль. Но если он действителен, то он будет проверять пароль и может возникнуть разница во времени
Давайте так и сделаем.
У нас получилось аж 597 мс! И кажется что серверная часть при увеличении длины пароля выполняет больше вычислений и поэтому требуется больше времени.
- Теперь давайте сделаем тоже самое для несуществующего пользователя. Не забываем менять наш заголовок!!!! А то заблокирует и плохо будет
Теперь указано 79 мс, почему так спросите? Потому что когда имя недействительно, то он дальше не идёт ничего проверять и отбрасывает нам invalid username or password.
Работа в Intruder
После того как мы разобрались во времени ответов, давайте похакаем!
Отправляем запрос в Intruder, включим тип атаки pitchfork для того что бы:
1) Менять наш X-Forwarded-For
2) Менять username
- В Payloads, ставим 1 payload в numbers, а во второй payload добавляем список пользователей
- Включаем показ времени ответа
Отлично, теперь сортируем по времени. И ищем самое большое число, теперь видим что наш username это alaska, теперь давайте для него подбирать пароль.
Меняем username на alaska, и ставим пароль в знаки амперсанда, и НЕ ЗАБЫВАЕМ менять X-Forwarded-For
Теперь мы полностью решили задачу, пароль известен, имя пользователя тоже!
Можете войти и проверить, но не забудь про X-Forwarded-For
Ссылка скрыта от гостей
.План статьи:
1) Введение - теория, узнаем как перебирать имена пользователя если мы не нашли разницу в длине ответа и в кодах ответа. Узнаем что такое X-Forwarded-For и как его использовать2) Работа в Intruder - практика, начинаем брутфорсить.
Введение
Зайдём на главную страницу сайта и введём туда данные которые как мы знаем точно не существуют, и давайте отправим запрос в Repeater
Предположим что мы посмотрели длину и коды ответов, и ничего не нашли.
- Теперь давайте найдём разницу между неверным именем пользователя и верным.
Неверный username занял у нас - 77 мс
Верный username занял - 108 мс
- Давайте ещё раз нажмём вдруг поменяется что то.
Видим, что нас вообще заблокировало, видимо он блокирует мой IP-адрес.
Давайте проверим, может тут слабый механизм блокировки. Нужно выяснить принимает ли он заголовок X-Forwarded-For
! X-Forwarded-For может использоваться для смены IP. Если в приложение встроена обработка данного хедера, просто отправьте X-Forwarded-For: desired_IP для подмены IP, чтобы обойти ограничение без использования дополнительных прокси
Отлично! всё сработало, но мы видим что нет большой разницы между неверным и верным username.
Следующее, что я собираюсь сделать, это увеличить длину пароля, потому что некоторые приложения проверяют первым на валидность имя пользователя, а если не действителен, то они не будут проверять пароль. Но если он действителен, то он будет проверять пароль и может возникнуть разница во времени
Давайте так и сделаем.
У нас получилось аж 597 мс! И кажется что серверная часть при увеличении длины пароля выполняет больше вычислений и поэтому требуется больше времени.
- Теперь давайте сделаем тоже самое для несуществующего пользователя. Не забываем менять наш заголовок!!!! А то заблокирует и плохо будет
Теперь указано 79 мс, почему так спросите? Потому что когда имя недействительно, то он дальше не идёт ничего проверять и отбрасывает нам invalid username or password.
Работа в Intruder
После того как мы разобрались во времени ответов, давайте похакаем!
Отправляем запрос в Intruder, включим тип атаки pitchfork для того что бы:
1) Менять наш X-Forwarded-For
2) Менять username
При этой атаке для каждой определенной позиции используется свой набор полезной нагрузки. Полезная нагрузка помещается в каждую позицию одновременно.
- В Payloads, ставим 1 payload в numbers, а во второй payload добавляем список пользователей
- Включаем показ времени ответа
Отлично, теперь сортируем по времени. И ищем самое большое число, теперь видим что наш username это alaska, теперь давайте для него подбирать пароль.
Меняем username на alaska, и ставим пароль в знаки амперсанда, и НЕ ЗАБЫВАЕМ менять X-Forwarded-For
Теперь мы полностью решили задачу, пароль известен, имя пользователя тоже!
Можете войти и проверить, но не забудь про X-Forwarded-For
Вложения
Последнее редактирование: