1.实验目的
tcp三次握手及tcp连接状态(含tcpdum抓包分析);
tcp四次挥手及tcp连接状态;
实战:在局域网中使用 awl伪装MAC地址进行多线程SYN攻击。
2.实验原理
TCP报文段的首部格式。
ACK:TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1;
SYN(SYNchronization同步):在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文。对方若同意建立连接,则应在响应报文中使SYN=1和ACK=1。因此,SYN置1就表示这是一个连接请求或连接接受报文。
FIN(finis)即完,终结的意思,用来释放一个连接。当FIN=1时,表明此报文段的发送方的数据已经发送完毕,并要求释放连接。
建立tcp连接时的tcp三次握手和断开tcp连接时的4次挥手整体过程。
3.实验任务
1.使用tcpdump抓取tcp三次握手;
2.tcp断开连接时的 4次挥手过程;
3.使用awl伪装MAC对服务器施实syn洪水攻击。
4.实验步骤
4.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.
seq 序列号范围:2^32 -1 到最大值,再从0开始,seq 序列号作用:依据seq是否连接成功与依据这个序列号来组数据。例子:xunlei下载视频时,将视频切n片,下载完成后再根据数据包序来重新组装成视频。
tcpdump常用参数:-c:指定包个数;-n IP,端口用数字方式显示;port 指定端口。
ping使用icmp协议,属于二层协议,不能演示三次握手。用ssh演示二个终端。tcpdump -n -c 3 port 22 -i ens33(在22端口抓3个包)
注:Flags [S] 中的 S 表示为SYN包为1,为什么最后一个ack为1 不是为y+1 ?client主机返回ACK,包序号为ack=1 ,这是相对序号,如果需要看绝对序号,可以在tcpdump命令中加-S。
4.2tcp断开连接时的4次挥手过程
a当客户A没有东西要发送时就要释放A这边的连接,A会发送一个报文(没有数据),其中FIN设置为1,seq=u;
b服务器B收到后会给应用程序一个信,这时A那边的连接已经关闭,即A不再发送信息(但仍可接收信息)。B会发送收一个报文,其中FIN设置为1,ack=u+1; A收到B的确认包后,进入等待状态,等待B请求释放连接;
c服务器B向客户A发送断开连接请求,包中FIN=1,seq=w,ack=u+1;
dA收到后回复一个确认信息,发送包,ack=w+1,并进入TIME_WAIT状态。
为什么要等待呢?
为了满足这种情况:B向A发送FIN=1的释放连接请求,但这个报文丢失了,A没有接到不会发送确认信息,B超时会重传,这时A在WAIT_TIME还能够接收到这个请求,这时再回复一个确认就行了。(A收到FIN=1的请求后WAIT_TIME会重新记时)
另外服务器B存在一个保活状态,即如果A突然故障死机了,那B那边的连接资源什么时候能释放呢?就是保活时间到了后,B会发送探测信息, 以决定是否释放连接。
为什么第二次和第四次没有seq序列号?因为已经要断开了,没有必要产生新的序列号。
总结:a我没有数据要传输了,要断了;b好;b数据传完我也要断;a好。
注:Time-Wait 连接消失时间为2倍的MSL;
MSL是Maximum Segment Lifetime英文的缩写,中文可以译为“报文最大生存时间” ,他是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。
RFC 793中规定MSL为2分钟,实际应用中常用的是30秒,1分钟和2分钟等。
TCP连接状态详解:
服务器端:LISTEN:侦听来自远方的TCP端口的连接请求;
客户端:SYN-SENT:在发送请求连接后等待匹配的连接请求;
服务器端:SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认;
客户端/服务器端:ESTABLISHED:代表一个打开的连接;
客户端:FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认;
服务器端:CLOSE-WAIT:等待从本地用户发来的连接中断请求;
客户端:FIN-WAIT-2:从远程TCP等待连接中断请求;
服务器端:LAST-ACK:等待原来的发向远程TCP的连接中断请求的确认;
客户端:TIME-WAIT:等待足够的时间以确保远程TCP接收到连接中断请求的确认;
服务器端:CLOSED:没有任何连接状态。
4.3SYN洪水攻击
SYN洪水攻击主要源于:tcp协议的三次握手机制。tcp协议面向链接的协议,正常的TCP三次握手过程。实战拓扑图。
SYN洪水攻击的过程:
在服务端返回一个确认的SYN-ACK包的时候有个潜在的弊端,如果发起的客户是一个不存在的客户端,那么服务端就不会接到客户端回应的ACK包。
这时服务端需要耗费一定的数量的系统内存来等待这个未决的连接,直到等待超关闭,才能施放内存。
如果恶意者通过通过ip欺骗,发送大量SYN包给受害者系统,导致服务端存在大量未决的连接并占用大量内存和tcp连接,从而导致正常客户端无法访问服务端,这就是SYN洪水攻击的过程。
4.3.1安装awl与apache
0.56与 0.53不能用。上搭建一台web服务器,模拟要被攻击的服务器。
4.3.2安装获到被攻击者mac
先用ping命令,再用arp -n查看。
4.3.3开始攻击并查看效果
awl参数如下:
-i 发送包的接口,如果省略默认是eth0;
-m 指定目标mac地址,注:如果-m没有指定mac,默认目标MAC地址是“FF.FF.FF.FF.FF.FF”,这表示向同一网段内的所有主机,进行SYN攻击,1-2分钟内,还容易使整个局域网瘫痪;
-d 被攻击机器的IP;
-p 被攻击机器的端口。
awl -i eth0 -m 00:0c:29:48:80:95 -d 192.168.1.64 -p 80
查看谁访问了80命令:netstat -antup | grep:80发现很多伪装成公网的IP在攻击。