Подбираем пароли с помощью Google Chrome
- среда, 10 января 2018 г. в 03:14:22
Согласно многочисленным исследованиям в области компьютерной безопасности, в ТОП-3 уязвимостей информационных систем входит подбор пароля.
Почти для каждой информационной системы сегодня существуют свои дефолтные учётные записи, которые широко распространены в сети Интернет. Например, их можно взять отсюда.
В случае, если мы имеем какой-либо портал, где пользователи – это люди, то бОльшую часть уязвимых слабых паролей можно отнести к одной из 4 групп:
Вся беда в том, что большинство людей – причем как рядовых пользователей, так и администраторов систем – стремится использовать легко запоминающиеся пароли.
Из выделенных групп частых паролей вытекает, что при подборе пароля можно использовать соответственно 4 методики создания словарей:
Собранные наборы паролей в дальнейшем могут быть «скормлены» таким утилитам как hydra, medusa, ncrack или patator, в зависимости от тестируемого сервиса.
В случае, если аутентификация реализована через web, а именно через http-формы (то есть не http-basic/digest аутентификация), то удобнее всего воспользоваться функционалом intruder от burp suite free (Рисунок 1).
Рисунок 1 — Bruteforce-атака подручными средствами
В случае с burp нужно внимательно следить за размером ответа: изменение размера ответа можешь означать, что логин или пароль присутствует в системе.
Также при bruteforce-атаках на web возможны сложности (и речь даже не про captcha):
Впрочем, для этих сложностей можно предложить решения:
Конечно, эти случаи не так часты. Однако порою, встретив подобную веб-форму, мы лишь вручную вводим туда дефолтные учётные записи и что-то тривиальное типа admin:admin.
Но что если производить брутфорс не на уровне http, а выше, на уровне интерфейса пользователя? Ведь если внедрить в контекст тестируемого веб-приложения javascript-код, который в цикле будет подставлять в форму заданные логин/пароли и отправлять её, то достаточно легко удастся обойти все перечисленные ранее сложности. Ведь по сути, вся работа при этом совершается браузером.
Реализовать это можно с помощью расширения для браузера greasemonkey и собственного javascript-кода, который будет жёстко заточен под разметку данной html-страницы. Но писать каждый раз js-код для каждой новой страницы неудобно. Удобнее всего было бы иметь всё это в виде отдельного расширения, в данном случае – для Google Chrome.
Всё, что потребуется, чтобы воспользоваться www_brute – это открыть какой-либо интересующий сайт и нажать на иконку расширения. Если всё сделано правильно, то появится примерно следующее (Рисунок 2).
Рисунок 2 — Добавление новой цели
Чтобы приступить к настройке брутфорса, нужно нажать на единственную кнопку – «плюс».
Вся настройка проста и сводится к двум моментам:
Перед выбором полей для ввода логина и пароля на странице сайта с формой, которую предстоит атаковать, будет внедрён скрипт, который последовательно отловит три нажатия на элементы страницы. Этими элементами должны быть поле username, password и кнопка отправки формы. Перечисленные элементы должны быть выбраны именно в данной последовательности (Рисунок 3).
Рисунок 3 — Выбор полей для ввода
При каждом нажатии на соответствующий элемент он будет становиться красным, что подтверждает его выбор. После выбора кнопки отправки данных страница может перезагрузиться (если она не использует ajax), в таком случае красное выделение пропадёт, но это нормально.
Тут очень важно отметить, что элементы ввода запоминаются по html-атрибутам и их значениям. Поэтому, если после отправки формы сайт «нарисует» другую форму, то при следующей попытке подбора поле ввода не будет найдено. Хотя логика поиска полей ввода допускает не полное соответствие атрибутов, всё же данную настройку лучше производить уже после хотя бы одной неудачной отправки учётных данных. Пример – facebook.com (Рисунки 4 и 5).
Рисунок 4 — Форма до первой попытки входа
Рисунок 5 — Форма после первой попытки входа
Словари поддерживаются для имен пользователей, паролей и фиксированных пар логин: пароль (combo) (Рисунок 6).
Рисунок 6 — Словари для bruteforce-атаки
Поскольку combo-словари используются для дефолтных учётных записей либо утечек, то вначале будут выбраны именно они. Затем будет выполнен полный перебор всех сочетаний имён пользователей и логинов. Причём будет выполнен перебор по каждому паролю всех логинов – для минимизации возможных блокировок пользователей при неудачных попытках. Итого общее количество попыток можно будет вычислить по формуле:
length(combo) + length(passwords) * length(users)
По окончании всех настроек можно начинать:
Рисунок 7 — Bruteforce-атака в действии
Значения username и password в popup-окне расширения — это следующие кандидаты на ввод.
Логика работы достаточно проста и заключается в переборе всех заданных сочетаний логин/пароль, а так же пар логин: пароль в цикле до тех пор пока:
Рисунок 8 — Процесс bruteforce-атаки на множество целей
Зелёным выделено то, что удалось подобрать, красным — безуспешная попытка. В ходе работы можно спокойно переключиться на другую вкладку либо полностью свернуть окно браузера, ведь как мы помним, брутфорс делает сам браузер, а мы лишь немного ему в этом помогаем.
Перебор пароля можно легко «распараллелить». Для этого достаточно просто открыть ещё одну или несколько вкладок на том же домене.
В любой момент времени брутфорс любого сайта может быть поставлен на паузу. Стоит заметить, что плагин не имеет обратной связи с ответами сервера, поэтому (особенно в случае с ajax) нужно правильно выбрать интервал между попытками. Не рекомендуется ставить слишком маленькое значение интервала.
Конечно данный способ никак не обходит такую вещь, как captcha, так что брутфорс таких вещей, как gmail.com и им подобных, продлится не долго. Однако в сочетании с proxy/vpn можно что-нибудь придумать...
Что же касается таких вещей, как брутфорс админок разных CMS, систем мониторинга, самописных сайтов и прочих вещей, которыми обычно пестрят сетевые периметры разных компаний, то данный способ подходит как нельзя лучше.
Плагин для chrome, а так же словарь для топ-1000 паролей доступен на тут и в webstore.