![]() |
Какое-то время назад я экспериментировал с ARP-спуфингом и обнаружил побочный эффект, который, в общем-то не является секретным, а вполне закономерным, если забыть включить на атакующей машине ip-форвардинг. На атакуемой машине пропадает сеть. Тогда я на это не обратил внимания, но совсем недавно наткнулся на любопытный скрипт, который отключает интернет в локальной сети именно с помощью ARP-спуфинга. Тогда я и вспомнил, что наблюдал это ранее. Давайте попробуем реализовать простой скрипт для воспроизведения этого эффекта с помощью Python.
Цитата:
Что будет делать скрипт? Обнаруживать компьютеры в сети, забирать их ip-адреса и делать по адресам рассылку. А после, когда машины отвалятся от сети, автоматически будет включатся широковещательный режим. И в этом случае, сети не будет ни у одной машины без защиты, за исключением вашей. Что потребуется? Для работы данного скрипта необходимо установить scapy. Так как данный скрипт работает с правами суперпользователя, то и устанавливать его необходимо с использованием sudo. Сделать это можно командой в терминале: Код:
sudo pip install --pre scapy[basic]После того, как вы установите scapy, импортируйте в скрипт библиотеки, которые понадобятся в его работе: Python: Код:
importПолучаем локальный IP-адрес Для получения локального ip-адреса создадим фунцию local_ipv4(). Данный код был взят на Stack Overflow и работает на отлично. Функция возвращает локальный ip-адрес. IP будет нужен для того, чтобы создать на его основе диапазон для сканирования, то есть CIDR, вида: 192.168.0.1/24. Python: Код:
defПолучение IP-адреса шлюза по умолчанию Создадим функцию router(), с помощью которой будем получать ip-адрес шлюза по умолчанию как в ОС Linux, так и в Windows, в зависимости от того, на машине под управлением какой ОС она запущена. Для начала определяем операционную систему с помощью platform.system(). Здесь все имеет немного сокращенную запись, так как system() импортируется напрямую. Затем, с помощью subprocess.check_output выполняем команду для получения записей маршрутизации route. Синтаксис данной команды примерно одинаков как в Linux, так и в Windows, за исключением того, что вывод будет парситься по другому. Далее парсим результат выполнения команды и возвращаем из функции ip-адрес шлюза по умолчанию. Python: Код:
defIP-адрес шлюза по умолчанию нам понадобиться для того, чтобы сообщать машине поддельный mac-адрес по данному адресу. Получаем ip-адреса машин в сети По большому счету, для того, чтобы выполнить спуфинг, нам mac-адреса не нужны. А нужны только ip-адреса машин в сети. Ну и, также, если получиться получить mac-адрес шлюза, то, он тоже понадобиться. Создадим функцию get_ip_mac_nework(ip, gateway), которая получает CIDR и адрес шлюза по умолчанию. Выполняем широковещательную рассылку в сети с помощью scapy. В ответ нам должны вернуть ip-адреса и mac-адреса машин. Проверяем, не равен ли полученный адрес адресу шлюза. Если да, забираем из него mac-адрес и записываем в переменную. Все остальные адреса помещаем в список и возвращаем из функции кортеж, в котором будет находиться список с ip-адресами и mac-адрес шлюза. Python: Код:
defСоздадим функцию arp_spoof(packets, packet_true), которая на входе получает два списка. Первый, это список пакетов для атаки. Второй список также содержит пакеты, но уже для восстановления нормального mac-адреса шлюза. Выводим сообщение о начале атаки. Запускаем бесконечный цикл и перебираем адреса для атаки из списка, на которые отправляем пакеты. Если мы прервем скрипт, то выполниться часть кода, которая написана в обработке исключения. На каждую машину в сети будет отправлен пакет с нормальным mac-адресом шлюза. Python: Код:
defФункция main. Запуск скрипта Создадим функцию main. Для начала проверим, на какой операционной системе он запущен. Если это Linux, проверяем, запущен ли он от суперпользователя. Если это не так, выходим из скрипта и сообщаем пользователю, что скрипт надо перезапустить. Если же все в порядке, получаем локальный IP-адрес, получаем IP-адрес шлюза. Выполняем функцию для получения IP-адресов машин в сети, а также для получения mac-адреса шлюза. Проверяем, найдены ли какие-либо машины. Если да, двигаемся дальше. Скажу сразу, что у меня не получилось подменить mac-адрес шлюза на моем смартфоне. Но, оно и понятно, он для соединения со шлюзом использует Wi-Fi. Выводим информацию для пользователя о полученных IP-адресах. Формируем пакеты для атаки и восстановления и передаем их в функцию для выполнения атаки. Python: Код:
defПоэтому, я сделал две виртуалки с ОС Windows, которые смотрят в мою сеть. Запустил скрипт и… а вот, что получилось, вы можете увидеть в видео, которое расположено ниже. А на этом, пожалуй, все. Спасибо за внимание. Надеюсь, данная информация будет вам полезна |
Теперь точно это заберу в свой ящик запутанности
|
| Время: 02:50 |