实验内容
- 使用一种
DoS工具进行试验,通过抓包工具,分析验证2种DoS攻击原理。 - 尝试在
Windows下编程实现SYN Flood攻击程序,并实现源地址伪装。
实验过程
实验环境
攻击机:
windows10IP地址:
10.122.232.200
靶机:
windows xpIP地址:
10.122.219.188
靶机开放端口:

UDP FLOOD
UDP FLOOD攻击原理:
攻击者利用大量UDP小包冲击DNS服务器或Radius认证服务器、流媒体视频服务器。 100k pps的UDP Flood经常将线路上的骨干设备例如防火墙打瘫,造成整个网段的瘫痪。由于UDP协议是一种无连接的服务,在UDP FLOOD攻击中,攻击者可发送大量伪造源IP地址的小UDP包。但是,由于UDP协议是无连接性的,所以只要开了一个UDP的端口提供相关服务的话,那么就可针对相关的服务进行攻击。
使用攻击工具LOIC,填写靶机IP、攻击端口、UDP数据包内容
Hellowindows xp、选择攻击模式、攻击速度进行攻击。
攻击机使用wireshark进行抓包,发现只有攻击机发送的数据包,没有靶机发送的数据包。

分析攻击机捕获的数据包:

- 数据包总长度为
58字节 - IP包总长度为
44字节 - 协议类型为
UDP协议(编号17) - 源IP地址:
10.122.232.200(攻击机IP地址) - 目标IP地址:
10.122.219.188(靶机IP地址) - UDP协议源端口号:57804(不同IP包的源端口号不相同,即攻击机与靶机建立了大量的UDP连接)
- UDP协议目标端口号:
445(和输入的目标端口号相同) - UDP长度:
24字节 - 校验和和校验和状态:未验证
- 数据段:
16字节,为ASCII码格式,转换成字符串后为输入的内容Hello windows xp
- 数据包总长度为
靶机使用wireshark进行抓包,同样发现只有攻击机发送的数据包,没有靶机发送的数据包。

分析靶机捕获的数据包:

- 数据包总长度为
60字节(比攻击机捕获的数据包多2字节) - 数据段等其它内容和攻击机捕获的数据包内容相同
- 数据包总长度为
判断DoS攻击是否成功。
命令行ping百度网址无法收到回复,浏览器无法访问百度。


关闭攻击软件后,ping百度网址可以收到回复,浏览器可以正常访问百度网址。


检查攻击机网络连接状态,发现建立大量UDP连接,说明了UDP FLOOD攻击的原理是攻击机向靶机同一端口发送多个UDP数据包,占用靶机资源,使靶机无法提供相关服务,从而使其与UDP相关的服务瘫痪。

SYN FLOOD
SYN FLOOD攻击原理:
SYN Flood不会完成TCP三次握手的第三步,也就是不发送确认连接的信息给服务器。这样,服务器无法完成第三次握手,但服务器不会立即放弃,服务器会不停的重试并等待一定的时间后放弃这个未完成的连接,这段时间叫做SYN timeout,这段时间大约30秒-2分钟左右。若是一个用户在连接时出现问题导致服务器的一个线程等待1分钟并不是什么大不了的问题,但是若有人用特殊的软件大量模拟这种情况,那后果就可想而知了。一个服务器若是处理这些大量的半连接信息而消耗大量的系统资源和网络带宽,这样服务器就不会再有空余去处理普通用户的正常请求(因为客户的正常请求比率很小),即服务器无法正常工作。
使用攻击工具LOIC,填写靶机IP、攻击端口、TCP数据包内容
Hello、选择攻击模式、攻击速度进行攻击。
攻击机使用wireshark进行抓包,不仅有攻击机发送的SYN数据包,还有靶机发送的ACK数据包,但是大量的SYN数据包并没有得到回复。

分析攻击机捕获的数据包:

- 数据包总长度为
66字节 - IP包总长度为
52字节 - 协议类型为
TCP协议(编号6) - 源IP地址:
10.122.232.200(攻击机IP地址) - 目标IP地址:
10.122.219.188(靶机IP地址) - TCP协议源端口号:
3443(不同IP包的源端口号不相同,即攻击机与靶机建立了大量的UDP连接) - TCP协议目标端口号:
135(和输入的目标端口号相同) - TCP头长度:
24字节 - 数据段:
5字节,只存在push ack包中,为ASCII码格式,转换成字符串后为输入的内容Hello
- 数据包总长度为
判断DoS攻击是否成功。
命令行ping百度网址收到回复,但出现很大程度的丢包现象,浏览器可以访问百度,但需要等待的时间较长。


关闭攻击软件后,ping百度网址没有丢包,浏览器可以以正常的速度访问百度网址。


检查攻击机网络连接状态,发现建立大量TCP连接,说明了TCP FLOOD攻击的原理是攻击机与靶机三次握手不完整,建立多个TCP连接,使靶机的资源耗尽,从而使其与TCP相关的服务瘫痪。

分析比较两种攻击方法
- 原理:
- UDP FLOOD攻击:攻击机向靶机同一端口发送多个UDP数据包,占用靶机资源,使靶机无法提供相关服务,从而使其与UDP相关的服务瘫痪。
- SYN FLOOD攻击:攻击机向靶机发送SYN数据包,建立TCP连接后,一直不完成三次握手,即与靶机建立多个TCP连接使靶机的资源耗尽,从而使其与TCP相关的服务瘫痪。
- 攻击差别:
- UDP FLOOD攻击个人理解是流氓攻击,一直占用资源,使靶机毫无还手之力。
- SYN FLOOD攻击当靶机有足够的资源进行回复时,还是可以访问其他网站的,即SYN FLOOD攻击不彻底。
编程实现SYN Flood攻击程序
在Windows下编程实现SYN Flood攻击程序,实现源地址伪装
实验环境
攻击机:
windows 10IP地址:
10.122.213.156靶机:
windows 10IP地址:
10.122.232.200编程工具:
VS2017
设计思路

搭建编程环境
下载安装
WinPcap运行库,下载解压WinPcap开发包。打开vs2017,新建
windows控制台应用程序。
打开
项目属性->配置属性->c/c++->预处理器->预处理器定义,在其中添加WPCAP、HAVE_REMOTE两个宏定义。
打开
项目属性->配置属性->链接器->输入->附加依赖项添加wpcap.lib和ws2_32.lib两个库。
打开
项目属性->配置属性->VC++目录->包含目录和同级的库目录分别添加之前下载解压的WinPcap开发包的Include目录和Lib目录路径。

数据结构
1 | /* SYN包结构 */ |
实验结果
进行攻击,打开程序,输入目标IP和目标端口,可以看到攻击源IP地址和源端口在不断改变。

使用wireshark进行抓包可以看到伪造的地址向目标IP地址的目标端口135号端口发送大量TCP SYN包。

打开捕获的SYN包,源MAC地址也是随机的,SYN包内容与理论预期符合。

实验总结
在实验过程中,通过对局域网内的主机进行UDP FLOOF攻击,意外地把整个局域网攻击了,查资料发现大量UDP包会把局域网堵塞,导致局域网内主机无法上网,这是一种可行的攻击手段。又发现如果攻击机和靶机同时连接手机热点,则攻击无法成功,经过实验,得出的初步结论是两台主机不在同一局域网下,即手机热点不能看做是一个局域网。当然还有一种猜测是手机热点在转发UDP包时做了防护措施,这一猜测目前还未进行验证。
实验核心代码
点击下载程序源代码
1 | /* SYN包结构 */ |