泛洪攻击模拟复现详解

泛洪攻击模拟复现详解

原创 OlIyDg 泷羽Sec-shinyer安全 2025-01-14 00:55

文章仅供学习网络安全技术参考研究使用,请勿使用相关技术做违法操作,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负

我这篇文章讲的是现在比较常见的攻击方式SYN FLOOD泛洪放大攻击

SYN 洪水(半开连接攻击)是一种拒绝服务 (DDoS) 攻击,旨在耗尽可用服务器资源,致使服务器无法传输合法流量。通过重复发送初始连接请求 (SYN) 数据包,攻击者将可击垮目标服务器计算机上的所有可用端口,导致目标设备在响应合法流量时表现迟钝乃至全无响应。

环境准备

我们选取metasploitable2作为被攻击服务器,在SYN FLOOD攻击发起之前,可以正常访问服务器上的web服务

模拟攻击

SYN FLOOD攻击的原理就是阻断TCP三次握手的第三次ACK包,即不对服务器发送的SYN+ACK数据包做出应答。由于服务器没有收到客户端发来的确认响应,就会一直保持连接直到超时,当有大量这种半开连接建立时,即造成SYN Flood攻击。所以我们就可以按照这个思路进行数据包构造,这里我使用python的scapy模块来模拟发包

在发送数据包的同时,我们打开wireshark抓包,可以看到目标服务器成功给我们返回SYN+ACK数据包,但是第三个数据包确实RST数据包而不是ACK数据包,这是怎么回事?其实这个RST数据包是系统自己发送的,原因在于一开始的SYN数据包是我们使用scapy发出的,并不是操作系统自己主动发出的,所以当操作系统收到一个SYN+ACK数据包时,它会认为这个连接不是我发出的,就会主动拒绝连接,并返回RST数据包。既然这样,我们可以使用linux下的iptables命令禁止系统自动给目标发送RST数据包,从而达到建立半开连接的效果,命令如下

接下来我们就可以把刚刚构造数据包的思路加上多线程模块写成一个SYN FLOOD攻击脚本,代码如下

脚本使用方法在第15行,执行我们的syn_flood.py脚本后,发现目标服务器的web应用已经无法访问

打开wireshark抓包,可以看到抓取到大量的SYN请求数据包,而且已经没有RST数据包了

我们再登录服务器(metasploitable2)上,查看服务器所建立的连接。使用命令netstat -pantu | grep SYN查看已建立的SYN连接数,可发现此时已建立了大量连接