Имен пользователей и паролей в компьютерной сети

HackWare.ru

Этичный хакинг и тестирование на проникновение, информационная безопасность

Получение имён пользователей сайта методом перебора

Одним из важных этапов подготовки к брут-форсу входа на сайт является сбор имён пользователей. Важность этого можно показать математически. Например, для брут-форса аутентификации веб-приложения подготовлен словарь на 10,000 имён пользователей и 40,000 паролей. Легко посчитать, что количество комбинаций имя-пароль составит 10,000*40,000=400,000,000, т.е. очень много.

Если удалось собрать имена пользователей, допустим, список получился из десяти имён, то для перебора пар имя-пароль с тем же словарём паролей получится 10*40,000=400,000, т.е. разница драматическая – на три порядка.

Метод сбора имён пользователя зависит от конкретного приложения: некоторые содержат этот список в открытом виде и достаточно его спарсить, некоторые содержат профили пользователей и их можно перебрать по ID или адресу в URL. В этой заметке я покажу, как собрать имена пользователей через форму входа, которая сама говорит, существует пользователь или нет. Например, имеется форма входа:

При вводе данных реального пользователя, но с неправильным паролем, она выдаёт:

Password incorrect – неверный пароль.

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

Account does not exist – аккаунт не существует.

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

Для осуществления перебора, в результате которого будет составлен список пользователей веб-сайта, я буду использовать Burp Suite и patator.

Делаем тестовый вход с заведомо неправильным логином и получаем:

POST /mutillidae/index.php?page=login.php HTTP/1.1 Host: localhost User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Referer: http://localhost/mutillidae/index.php?page=login.php Cookie: showhints=0; PHPSESSID=r0tduju2e6cl0q0jmc2b8qgfq5 Connection: close Content-Type: application/x-www-form-urlencoded Content-Length: 65 username=admin111&password=password&login-php-submit-button=Login

Эта информация дала нам следующие сведения:

  • Данные передаются методом POST
  • Они передаются хосту localhost на страницу /mutillidae/index.php?page=login.php
  • Передаётся строка username=admin111&password=password&login-php-submit-button=Login, в которой admin111 – это имя пользователя, а password – это пароль.
Читайте также:  Современная компьютерная сеть предприятия

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

Мы уже видели, что в случае отсутствия аккаунта появляется запись «Account does not exist». Т.е., вроде бы, если аккаунта нет, то в HTML коде должна быть строка «Account does not exist». Правильно?

Давайте проверим. Введём логин существующего пользователя, но с неправильным паролем. В Burp Suite мы переходим к новому пункту в HTTP history, выбираем вкладку Response и под-вкладку Raw. Теперь сделаем поиск по строке «Account does not exist»:

Как можно убедиться, строка «Account does not exist» присутствует, как и другие строки, которые выводятся при разных ошибках.

Это означает, что строка «Account does not exist» является частью кода, всегда содержится в странице, даже если мы её не видим. Т.е. эта строка не подходит для проверки был ли результат положительным или отрицательным.

Посмотрим на часть JavaScript кода:

switch(lAuthenticationAttemptResultFlag)< case cACCOUNT_DOES_NOT_EXIST: lMessage="Account does not exist"; lAuthenticationFailed = "TRUE"; break; case cPASSWORD_INCORRECT: lMessage="Password incorrect"; lAuthenticationFailed = "TRUE"; break; case cNO_RESULTS_FOUND: lMessage="No results found"; lAuthenticationFailed = "TRUE"; break; case cAUTHENTICATION_EXCEPTION_OCCURED: lMessage="Exception occurred"; lAuthenticationFailed = "TRUE"; break; >;

switch говорит о том, в зависимости от значения lAuthenticationAttemptResultFlag выбирается одна из случаев.

Сделаем поиск переменной lAuthenticationAttemptResultFlag. При несуществующем аккаунте:

Итак, если аккаунт не существует, значит в HTML коде будет содержаться строка:

var lAuthenticationAttemptResultFlag = 0;
wget https://raw.githubusercontent.com/1N3/BruteX/master/wordlists/namelist.txt
cat namelist.txt | sort | uniq > namelist_new.txt

Теперь у нас имеется вся необходимая информация для перебора имён пользователей на сайте.

Даже если вы пользуетесь Kali Linux, то рекомендуется проверить установленную версию patator и если она не является самой свежей, то загрузить свежую:

wget https://raw.githubusercontent.com/lanjelot/patator/master/patator.py chmod +x patator.py ./patator.py

У меня получилась такая команда:

./patator.py http_fuzz url="localhost/mutillidae/index.php?page=login.php" method=POST body='username=FILE0&password=password&login-php-submit-button=Login' 0=namelist_new.txt accept_cookie=1 -x ignore:fgrep='var lAuthenticationAttemptResultFlag = 0;'

Если вам в ней что-то непонятно, то обратитесь к инструкции «Брут-форс веб-сайтов: инструкция по использованию patator, Hydra, Medusa». Там подробно описывается процесс составления команд для брут-форса веб-приложений. Строка &password=password означает, что переменной &password всегда присвоено одно и то же значение (в данном случае password, но можно было выбрать любое произвольное слово, поскольку для брут-форса имён пользователей это несущественно).

Читайте также:  Программное обеспечение вычислительных сетей курсовая

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

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

Как видим, не совсем удачная реализация аутентификации или предварительная разведка позволяют очень значительно (на несколько порядков) сократить время, необходимое на брут-форс учётных данных для входа.

Связанные статьи:

Источник

Оцените статью
Adblock
detector