• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Атака на устройства в локальной сети через уязвимый роутер

tabac

CPU register
Пользователь
Регистрация
30.09.2018
Сообщения
1 610
Решения
1
Реакции
3 332
Если получен доступ к роутеру, можно ли получить доступ к устройствам в локальной сети? Чтобы ответить на этот вопрос, давайте разберёмся, как работает домашняя локальная сеть.


Как работает домашняя локальная сеть

В домашней локальной сети основой является роутер — довольно сложное сетевое устройство. Это устройство обеспечивает работу локальной сети. При подключении нового устройства к локальной сети роутера, он с помощью протокола DHCP присваивает новому устройству IP адрес. В качестве диапазона IP адресов в домашних сетях обычно используются 192.168.1.0/24, 192.168.0.0/24 или 192.168.100.0/24.

То есть у вашего компьютера или телефона, подключённого к Интернету через роутер, имеется локальный IP адрес.

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


NAT

NAT — это технология, которая позволяет множеству устройств выходить в Интернет используя один и тот же IP адрес. Кстати, в вашей локальной сети, в которой имеется роутер, уже применяется NAT — именно благодаря этому все ваши устройства могут выходить в Глобальную сеть и не нужно каждому из них иметь внешний IP.

Как вы понимаете, это часто используемая технология. Возможно, вы много лет ею пользуетесь, даже не зная про неё. Она действительно приносит очень много пользы, но у неё есть недостаток — она позволяет делать подключения «в одну сторону». То есть если ваш компьютер инициализировал подключение к Интернету, то он отправит его роутеру, роутер сделает две вещи: 1) запомнит, что запрос пришёл с определённого устройства и 2) отправить этот запрос в Интернет. Когда придёт ответ, роутер всё ещё «помнит», что этот запрос был сделан для определённого устройства в локальной сети, и отправит ответ именно этому устройству. И так происходит каждый раз.

Но вот если на роутер придёт новый HTTP запрос из Глобальной сети (не ответ на запрос, а именно новый запрос), то роутер банально не знает, для кого в локальной сети он предназначен (если не настроена переадресация портов). Поэтому с этим поступившим запросом роутер ничего не делает (источник).


Можно ли получить доступ к компьютеру в локальной сети, если есть доступ к роутеру?

Вроде бы, ответ очевиден — технология NAT не даёт такой возможности в принципе: подключение к локальным устройствам, у которых нет белого IP, а есть только локальный IP вида 192.168.0.*, невозможен.

Но я начал с того, что роутер это весьма сложное сетевое устройство. И это устройство поддерживает множество функций по настройке сети, в частности оно поддерживает:
  • настройку статичных IP адресов для устройств в локальной сети минуя протокол DHCP
  • Forwarding портов

Forwarding портов

Forwarding, который ещё называют «переадресацией» портов, «проброской портов», «перенаправлением портов» или «Port mapping» (сопоставление портов) позволяет делать очень замечательную вещь — с его помощью устройства за NAT, то есть устройство в локальной сети, имеющее локальный IP адрес, могут стать доступными глобально. Правила могут быть настроены весьма гибкой, можно сделать пересылку нескольких портов на один, или с одного на несколько, или несколько на несколько и так далее. Но для наших целей больше всего интересно следующее правило, которое словами можно выразить так:
Запрос, который пришёл на порт роутера 22 перенаправить на порт 22 устройства с IP адресом 192.168.0.5.
Номера портов необязательно должны быть одинаковыми, поэтому правило может быть таким:
Запрос, который пришёл на порт роутера 50080 перенаправить на порт 80 устройства с IP адресом 192.168.0.5.
В результате мы получим доступ к порту 80 (его обычно прослушивает веб-сервер) устройства в локальной сети 192.168.0.5.

Это означает, что мы можем получить доступ к любому открытому порту и запущенному на нём службе в локальной сети! Это может быть веб-сервер, SSH, FTP, сетевые протоколы Windows и т.д.


Просмотр устройств локальной сети. Настройка статических адресов в локальной сети

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

Рассмотрим пример. В локальной сети провайдера есть роутер с IP адресом 100.69.64.23 к которому получен административный доступ.

router.png


Все (или практически все) роутеры могут показать информацию о подключённых в данный момент клиентах. Эта информация может быть:
  • на странице статуса роутера
  • на странице настройки DHCP
  • на странице статуса LAN (локальной сети)
Например, на этом роутере информация собрана на странице DHCP Clients List:
router-2.png


Данный роутер показывает всего лишь MAC-адрес и локальный IP адрес устройств. Многие роутеры кроме этой информации также показывают, является ли это мобильным устройством или настольным компьютером. Поскольку здесь такой информации нет, то мне нужно самостоятельно догадаться о типе устройства на основе его производителя. Производителя устройства можно узнать по MAC адресу на этом сервисе: https://suip.biz/ru/?act=mac

Например, для MAC 00:80:92:c4:6a:f9 найдена следующая информация:
Код:
008092     (base 16)        Silex Technology, Inc.
                2-3-1 Hikaridai,
                Kyoto    619-0237
                JP
Меня не интересуют мобильные телефоны и планшеты — как правило, на них все порты закрыты. Меня интересуют ноутбуки и настольные компьютеры, поскольку на них могут быть запущены службы, которые прослушивают порты.

Из всех устройств самыми интересными мне показались следующие
Код:
00:80:92:c4:6a:f9   192.168.1.3
a0:f9:e0:28:02:16   192.168.1.2
Причина в следующем:
  • их MAC-адреса, вроде бы, не принадлежат производителям мобильных телефонов
  • их IP адреса являются самыми первыми — то есть к роутеру весьма вероятно вначале подключаются проводные устройства, а затем устройства по Wi-Fi
  • эти устройства отсутствуют в списке беспроводных клиентов:
router-3.png


Если атака планируется длительной, то определённым устройствам можно присвоить статичные IP адреса. Дело в том, что проброска портов настраивается относительно IP адреса. А целевое устройство через некоторое время может сменить IP адрес на произвольный. Если это случиться, то правила переадресации портов будут работать — просто теперь они будут отправлять пакеты другому устройству, которое заняло этот IP адрес.

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


Настройка переадресации портов

В зависимости от модели роутера эта вкладка может называться
  • Forwarding
  • Port Forwarding
  • Port mapping
  • Переадресация портов
  • другие варианты
Например, на рассматриваемом роутере эту вкладку я нашёл по пути Application → Port Forwarding:

router-4.png


Всего портов 1-65535 и роутеры позволяют делать переадресацию диапазонов, то есть 65 тысяч портов не придётся настраивать по одному.

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

Обратите внимание, что некоторые роутеры работают не на 80, а на 8080 или 443 порте.

Итак, если веб-интерфейс роутера работает на 80 порту и мы хотим получить доступ к локальным ресурсам устройства с IP 192.168.1.2, то нам нужно установить следующие три правила:
  • Переадресацию портов 1-79 на 1-79 порты адреса 192.168.1.2
  • Переадресацию портов 81-65534 на 81-65534 порты адреса 192.168.1.2
  • Переадресацию порта 65535 на 80 порт адреса 192.168.1.2
Первые два правила с диапазонами (надеюсь) очевидны. Третьим правилом мы перенаправляем запросы, пришедшие на порт 65535, на 80 порт локального компьютера, поскольку там может быть веб-сервер или что-то другое интересное.

Начнём с того, что сделаем контрольный замер, какие именно порты открыты:
Код:
sudo nmap 100.69.64.23
Эта команда покажет открытые порты на роутере:

nmap-1.png


Добавляем первое правило:

router-6.png


Второе:

router-7.png


Третье:

router-8.png


Получаем:

router-9.png


Заново сканируем порты:
Код:
sudo nmap 100.69.64.23
nmap-2.png

Констатируем — нас постигла неудача. 80-й порт — это порт самого роутера, а на устройстве с IP 192.168.1.2 просканированные порты закрыты.

Не отчаиваемся — переделываю все правила на переадресацию портов на IP 192.168.1.3:

router-10.png


И опять сканируем порты:
Код:
sudo nmap 100.69.64.23
Поясню, хотя команда Nmap одна и та же, но на самом деле в предыдущий раз мы сканировали порты устройства в локальной сети с IP 192.168.1.2. А последняя команда уже сканирует порты на 192.168.1.3.

А вот здесь нам повезло:
Код:
Starting Nmap 7.80 ( https://nmap.org ) at 2019-09-29 09:08 MSK
Nmap scan report for 100.69.64.23
Host is up (0.017s latency).
Not shown: 993 closed ports
PORT     STATE SERVICE
21/tcp   open  ftp
23/tcp   open  telnet
80/tcp   open  http
443/tcp  open  https
515/tcp  open  printer
631/tcp  open  ipp
9100/tcp open  jetdirect

Nmap done: 1 IP address (1 host up) scanned in 5.83 seconds
nmap-3.png


Напомню, что все эти порты, кроме 80, открыты на устройстве, у которого даже нет белого IP адреса, у него IP адрес 192.168.1.3.

А как проверить 80 порт на 192.168.1.3? Делаем это так:
Код:
sudo nmap -p 65535 100.69.64.23
Порт оказался закрыт.

Чтобы собрать информацию об отрытых портах, изучим их баннеры:
Код:
sudo nmap -sV --script=banner 100.69.64.23
Получаем:
Код:
PORT     STATE SERVICE    VERSION
21/tcp   open  ftp        Brother/HP printer ftpd 1.13
| banner: 220 FTP print service:V-1.13/Use the network password for the I
|_D if updating.
23/tcp   open  telnet     Brother/HP printer telnetd
|_banner: \x1B[2J\x1B[1;1f
80/tcp   open  http       GoAhead WebServer 2.5.0 (PeerSec MatrixSSL 3.4.2)
|_http-server-header: GoAhead-Webs/2.5.0 PeerSec-MatrixSSL/3.4.2-OPEN
443/tcp  open  ssl/http   Debut embedded httpd 1.20 (Brother/HP printer http admin)
515/tcp  open  printer
631/tcp  open  ipp?
9100/tcp open  jetdirect?
Service Info: Device: printer
nmap-4.png


Не очень интересно — видимо, это всё функции связанные с принтером.

Чтобы подключиться к HTTPS порту, достаточно открыть ссылку в веб-браузере:
А там мы видим интерфейс многофункционального устройства (принтер-копер-сканер) MFC-J5910DW:

router-11.png


Ещё раз для тех, кто потерялся, это устройство с IP адресом 192.168.1.3!

router-12.png


Также я сумел подключиться к FTP:

ftp.png



Заключение

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

Другие варианты атак:
  • подмена DNS на сервера злоумышленника и манипуляция трафиком на основе поддельных DNS ответов (подвержены все роутеры)
  • перенаправление трафика с помощью VPN канала на оборудование злоумышленника (подвержены только более продвинутые модели с поддержкой VPN)
  • доступ к медиа носителям, подключённым к роутеру (подвержены только модели с такой функциональностью)

взято с hackware.ru
 
А что есть про автоматизацию подобных процессов? те. скан на наличие уязвимых роутеров, включение упнп если не включен, проброс портов, скан портов.
 
А что есть про автоматизацию подобных процессов? те. скан на наличие уязвимых роутеров, включение упнп если не включен, проброс портов, скан портов.
Нечего. Только свое что-то кодить (что-то типа бота). В свое время (год назад) хотел подобное провернуть искал какой-нибудь инструмент но нечего не нашел.
 
А что есть про автоматизацию подобных процессов? те. скан на наличие уязвимых роутеров, включение упнп если не включен, проброс портов, скан портов.
Можно написать скрипт для определенных моделей роутеров на зеннопостере, или басе. При этом, тип модели роутера определять с помощью роутерскана, в соответствии с моделью, запускать нужный сценарий на басе, или зенке.
Гемора ручного много на самом деле, много однотипных действий для разных моделей надо исследовать и прописать.
 
Можно написать скрипт для определенных моделей роутеров на зеннопостере, или басе. При этом, тип модели роутера определять с помощью роутерскана, в соответствии с моделью, запускать нужный сценарий на басе, или зенке.
Гемора ручного много на самом деле, много однотипных действий для разных моделей надо исследовать и прописать.
Я совсем не понял того что вы написали...не компетентен в скриптах
Как я вижу ситуацию
1.Бот на компе находит роутер и пробует сразу пробросить порты, логиниться для этого не нужно.
2.Если проброс портов не проходит бот определяет модель если роутер уязвимый бот логиниться через уязвимость, дальше включает упнп и переход к шагу 1.
Вот шаг 1 для меня понятен и более того я такое делал для поднятия соксов и тунелей.
Шаг 2 это нужно разбираться..врядли там чтото особо трудное просто сейчас времени нет.
 
Логика/алгоритм работы автоматизированного конфигуратора уязвимых роутеров будет примерно таков/а.

1. Продукт состоит из двух независимых частей: сканера (используется готовый роутерскан от Стаса) и собственно-конфигуратора (для разных моделей роутеров - разный конфигуратор скорее всего). Сканером сканируются диапазоны, сохраняются результаты скана в таблицу, или текстовый файл, который является входными данными для "конфигуратора"
2. Конфигуратор - программа/скрипт, написанная на средстве для автоматизации веб-страниц (например, на зеннопостере, или Browser Automation Studio), которая получает в качестве входящих данных из текстового файла следующие параметры: ип роутера, логин, пароль, что на что менять.
3. Предположим, мы упрощаем задачу и в качестве пилотного проекта пишем конфигуратор под одну модель роутера. Из насканенного роутерсканом выбираем только эти роутеры, вносим их в текстовый файл. После этого добавляем данные, которые мы хотим изменять и запускаем скрипт. Скрипт поочередно открывает вебадминки роутеров, логинится, кликает по нужным пунктам меню и вводит нужные данные в нужные поля.

Как-то примерно так.

Сам писать подобное не планирую, как-то оно мне для моих задач вроде не надо.
 
Ну я понимаю что в принципе можно прогрузить на ботнет сканер стас.м. и заставить его работать без гуи, но как на ботнете выполнять какие то скрипты(кому я их там передам на выполнение и будет ли это невидимо для юзера) это совсем темный лес(мои знания ограничиваются ц++ и асм).
Но в любом случае понятно что задача решаемая.
 
Whisper, я немного по другому задачу понял (не на распределенных компьютерах (ботнете) запускать, а на одном), но, в принципе, логика описанная мной в предыдущем сообщении будет +/- такая же, но немного на базе других инструментов надо будет реализовывать. В любом случае, эта задача вполне может быть реализована при наличии опытного кодера.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх