РАЗБОР Pentest Статья

[Authentication Vulnerability] Перебор имён пользователей

apache2
apache2 Newbie · 64 сообщений
Подписаться
3 тыс.
[ обложка статьи ]
Режим чтения
Прежде чем перейти к практике, стоит понимать, зачем вообще нужен перебор имён пользователей. Username Enumeration — это уязвимость класса Information Disclosure, возникающая из-за ошибок в логике аутентификации: приложение так или иначе даёт понять, существует ли введённый логин в системе. Сама по себе эта уязвимость не даёт доступа к аккаунту, но она резко облегчает злоумышленнику дальнейшие шаги — брутфорс-атаки становятся точечными, а не случайными, а собранный список валидных логинов удобно использовать для целевого фишинга. Разница в ответах сервера может проявляться по-разному: в длине ответа, в кодах статуса, в тексте сообщения об ошибке или, как в разбираемом ниже случае, во времени обработки запроса. Именно последний вариант — самый скрытный и сложный для обнаружения, поэтому его и разберём на примере лабораторной работы.



Привет, это сегодня расскажу как можно пройти лабораторию "Username enumeration via response timing" от portswigger.
План статьи:​
1) Введение - теория, узнаем как перебирать имена пользователя если мы не нашли разницу в длине ответа и в кодах ответа. Узнаем что такое X-Forwarded-For и как его использовать
2) Работа в Intruder - практика, начинаем брутфорсить.



Введение
Зайдём на главную страницу сайта и введём туда данные которые как мы знаем точно не существуют, и давайте отправим запрос в Repeater
Предположим что мы посмотрели длину и коды ответов, и ничего не нашли.


- Теперь давайте найдём разницу между неверным именем пользователя и верным.
1703677877920.png

1703677985034.png

Неверный username занял у нас - 77 мс
Верный username занял - 108 мс
- Давайте ещё раз нажмём вдруг поменяется что то.
1703678164966.png

Видим, что нас вообще заблокировало, видимо он блокирует мой IP-адрес.
Давайте проверим, может тут слабый механизм блокировки. Нужно выяснить принимает ли он заголовок X-Forwarded-For
! X-Forwarded-For может использоваться для смены IP. Если в приложение встроена обработка данного хедера, просто отправьте X-Forwarded-For: desired_IP для подмены IP, чтобы обойти ограничение без использования дополнительных прокси
1703678350840.png

Отлично! всё сработало, но мы видим что нет большой разницы между неверным и верным username.

Следующее, что я собираюсь сделать, это увеличить длину пароля, потому что некоторые приложения проверяют первым на валидность имя пользователя, а если не действителен, то они не будут проверять пароль. Но если он действителен, то он будет проверять пароль и может возникнуть разница во времени
Давайте так и сделаем.
1703678596236.png

У нас получилось аж 597 мс! И кажется что серверная часть при увеличении длины пароля выполняет больше вычислений и поэтому требуется больше времени.

- Теперь давайте сделаем тоже самое для несуществующего пользователя. Не забываем менять наш заголовок!!!! А то заблокирует и плохо будет
1703678747781.png

Теперь указано 79 мс, почему так спросите? Потому что когда имя недействительно, то он дальше не идёт ничего проверять и отбрасывает нам invalid username or password.



Работа в Intruder
После того как мы разобрались во времени ответов, давайте похакаем!
Отправляем запрос в Intruder, включим тип атаки pitchfork для того что бы:
1) Менять наш X-Forwarded-For
2) Менять username

При этой атаке для каждой определенной позиции используется свой набор полезной нагрузки. Полезная нагрузка помещается в каждую позицию одновременно.
1703679254004.png


- В Payloads, ставим 1 payload в numbers, а во второй payload добавляем список пользователей
1703679122246.png


- Включаем показ времени ответа
1703679193944.png


Отлично, теперь сортируем по времени. И ищем самое большое число, теперь видим что наш username это alaska, теперь давайте для него подбирать пароль.
1703679301817.png


Меняем username на alaska, и ставим пароль в знаки амперсанда, и НЕ ЗАБЫВАЕМ менять X-Forwarded-For
1703679505488.png

Теперь мы полностью решили задачу, пароль известен, имя пользователя тоже!
Можете войти и проверить, но не забудь про X-Forwarded-For
Полезно · 3

Комментарии

2
Хорошая статья. Подредактируйте немного в плане оформления и устранения грамматических ошибок. Предложения не все начинаются с заглавной буквы, интервалы между текстом и скринами, а также распределения текста по ширине страницы сильно улучшили бы читабельность и внешний вид.
 
Хорошая статья. Подредактируйте немного в плане оформления и устранения грамматических ошибок. Предложения не все начинаются с заглавной буквы, интервалы между текстом и скринами, а также распределения текста по ширине страницы сильно улучшили бы читабельность и внешний вид.
Спасибо. Поправил, красные волнистые линии исправил :)