Представляю вашему вниманию очередную часть перевода OWASP Testing Guide. В данной статье речь пойдет об определении пользователей.

Предыдущие статьи


Резюме

В рамках данного теста необходимо определить можно ли собрать перечень имен пользователей, взаимодействуя с аутентификацией веб-приложения. Полученные результаты значительно увеличат вероятность успешного подбора паролей в дальнейшем.

Часто по реакции веб-приложения можно определить присутствует ли в системе определенный пользователь, это может быть из-за неправильной настройки или особенностей дизайна. Например, иногда при неудачной попытке авторизации мы получаем сообщение о том, что такого пользователя не существует или пароль является неправильным. Подобная информация может быть использована атакующим для определения пользователей.

Пентестер взаимодействуя с аутентификацией должен определить как веб-приложение реагирует на существующего и несуществующего пользователя, ведь данные реакции могут отличаться.

Как уже говорилось ранее чаще всего мы будем получать сообщение о том, что было указано неправильное имя пользователя или пароль, но в некоторых случаях можно определить пользователей, отправляя различные имена пользователей с пустым паролем.

Как тестировать

При пентесте по методу черного ящика, когда пентестеру ничего не известно о веб-приложении, необходимо изучать ответы от веб-приложения, если оно уязвимо, то будет присутствовать информация, позволяющая прямо или косвенно определить пользователей.

HTTP ответ
Реакция веб-приложения на существующего пользователя

Запишите ответ от сервера, когда было использовано существующее имя пользователя и правильный пароль.

Ожидаемый результат

С помощью перехватывающего прокси внимательно изучите ответ от сервера после успешной аутентификации (код ответа, длина ответа).

Реакция веб-приложения на существующего пользователя с неправильным паролем

Далее пентестер должен изучить сообщение об ошибке, которое выдаст веб-приложение на не существующий пароль

Ожидаемый результат

Браузер должен отобразить подобное сообщение об ошибке:

или сообщение об ошибке будет таким:

сообщение об ошибке может быть более информативно:


Login for User foo: invalid password

Зачастую веб-приложение выдает одно и тоже сообщение об ошибке на различные неправильные запросы. Если же этого не происходит, то пентестер должен выяснить в чем различаются ответы и почему веб-приложение ведет себя по-другому. Например:

  • Запрос клиента: Правильный логин/неправильный пароль  —> Ответ сервера: ‘The password is not correct’
  • Запрос клиента: Неправильный логин/неправильный пароль —> Ответ от сервера: ‘User not recognized’

Как видно из примеров веб-приложение по разному реагирует на правильные и неправильные данные, благодаря чему можно подобрать пользователей.

Другие способы определения пользователей

Существуют и другие способы определения поьзователей:

-Изучение кода ошибки

Некоторые веб-приложения выдают специфичный код ошибки или сообщение об ошибке, которые могут быть изучены.

-Изучение URL-ов и перенаправлений

Например:


http://www.foo.com/err.jsp?User=baduser&Error=0
http://www.foo.com/err.jsp?User=gooduser&Error=2

Как видно из примеров, при неудачной попытке логина веб-приложение выдает сообщение об ошибке и перенаправляет на новый URL. В первом случае использовался неправильный логин и пароль. Во втором примере правильный логин и неправильный пароль, благодаря подобным перенаправлениям можно определить существующих пользователей.

Перебор URL-ов

Иногда веб-сервер отвечает по-разному на запросы существующих и несуществующих директорий. Например, в некоторых порталах каждый пользователь ассоциируется с определенной директорией. Если пентестер попытается получить доступ к существующей директории, то получит ошибку.

Очень распространенная ошибка от веб-сервера:


403 Forbidden error code

И


404 Not found error code

Пример


http://www.foo.com/account1 - получаем от сервера: 403 Forbidden
http://www.foo.com/account2 - получаем от сервера: 404 file Not Found

В первом случае поьзователь существует, но у пентестера нет доступа к его директории. Во втором случае пользователь «account2» не существует.

-Изучение титула веб-страницы

Пентестер может получить полезную информацию из титула веб-страницы, в котором может содержаться специфичный код ошибки или же сообщение об ошибке.

Например, если пользователь не может пройти аутентификацию, то титул веб-страницы может быть следующим:


Invalid user
Invalid authentication

-Изучение сообщения, полученного при восстановлении пароля

При восстановлении пароля уязвимое веб-приложение в сообщении об ошибке расскрывает информацию о том существующуют ли указанные пользователи.

Наример, сообщения об ошибке может быть следующим:


Неправильное имя пользователя: Вы указали неправильный адрес электронной почты или пользователь не найден
Правильное имя пользователя: Ваш пароль был успешно от правлен на адрес, использованный при регистрации

-Перебор пользователей

Иногда имена пользователей следуют определенным правилам компании или администратора. Например, можно наблюдать имена пользователей в последовательном порядке:


CN000100
CN000101
….

Иногда имена пользователей создаются в последовательном порядке, но с добавлением префиксов:


R1001
R2001

Когда имена пользователей создаются в последовательном порядке — их можно перебрать автоматически с помощью: wget, CURL, Perl, Python.

Также имена пользователей могут создаваться на основе имени и фамилии пользователя. Например, Freddy Mercury — fmercury, Roger Taylor — rtaylor.

Также перебрать имена пользователей может помочь различная собранная информация с помощью LDAP запросов или результатов поиска.

Внимание: определяя пользователей существует риск заблокировать чужие учетные записи, также может быть заблокирован ваш IP адрес фаерволом или IPS.

Тестирование по методу серого ящика
Изучение сообщений об ошибках

Необходимо изучить как веб-приложение реагирует на каждую неудачную попытку аутентификации, в целом действия пентестера схожи с тестированием по методу черного ящика.

Ожидаемый результат:

Веб-приложение должно отвечать одинаково на каждую неудачную попытку аутентификации.

Например:


Credentials submitted are not valid

Инструменты

Справочные материалы

Противодействие атакующему

Убедитесь в том что веб-приложение одинаково реагирует на все неудачные попытки аутентификации: неправильные имя пользователя, неправильны пароль или другие пользовательские данные, используемые при аутентификации.

Убедитесь, что все конфигурационные и тестовые учетные записи удалены.