TCP重置攻击演示

>>强大,10k+点赞的 SpringBoot 后台管理系统竟然出了详细教程!

前言

在TCP中,有一个标志是RST标志,它表示立即终止连接,也就是如果连接上的一方收到另一方的发送的RST数据包,它将立即关闭连接。

那是不是可以伪造一个数据包,让两台设备之间断开连接?

理论是可以的,但是需要几个很重要的参数,根据TCP规范,为了能正确响应RST数据包,RST数据包中必须具有与接受者期望的相同序列号,这个序列号如果不对,那还是无法断开连接。

假设A向B发送一个数据包,序列号为10,其中包含5个字节的数据,它将期望收到来自B的确认数据包,其确认号为15 (10 + 5)。

这需要知道TCP的三次握手过程。

三次握手分析

理解这一点的最好方法是使用Wireshark工具实际查看TCP数据包。

假设本机电脑ip是192.168.43.157,手机的ip是192.168.43.226。

TCP重置攻击演示
image.png

由电脑监听7070端口,手机连接之后首先会发出三个包,被称为TCP的三次握手,其实就是互相交换一下控制信息。

第一次握手是由手机发出,包中的Flag为SYN,只有来自发送方的第一个数据包才应该设置此标志,它还包含自己的SEQ号,如果对方回应了,则对方的ACK确认号就是自己的SEQ+1,这里的SEQ是1952416868.

TCP重置攻击演示
image.png

第二次握手是由电脑回应手机所发出的,包中的Flag为SYN、ACK,还有确认号是1952416869,用来告诉对方自己收到了你的请求,当然还要告诉对方自己的SEQ号,同样要等待对方回应,如果回应中的ACK值等于自己的SEQ+1,那么连接就建立完毕,这里的SEQ是1982386088。

TCP重置攻击演示
image.png

第三次还是手机发出,用来回应电脑,告诉自己也能收到你的数据包,包中的Flag为ACK,ACK确认号为1982386089,SEQ是1952416869。

TCP重置攻击演示
image.png

现在双方都互相持有对方的SEQ序列号,自身的SEQ值都被+1。

好了,现在由电脑先发出2字节的数据,Wireshark会捕获到4个包,原因是每发送一个数据包,都需要会有回应,电脑发送后,收到手机的回应,而手机也发送了2个字节的数据,需要电脑回应,所以有4个包。

TCP重置攻击演示
image.png

这里最重要的还是SEQ的变化。

下面是电脑发送的数据包,SEQ还是自己的序列号,但是Next sequence number变成了他自身的SEQ+数据包大小,而他希望收到手机回应的数据包中ACK必须是这个Next sequence number值(1982386091),

TCP重置攻击演示
image.png

所以来看下手机回应的。

可以看到ACK确认号就是1982386091,而其他都没有变。

TCP重置攻击演示
image.png

接着手机又发出两个字节的数据,同样的流程,同样的校验方式。

netwox伪造数据包

现在来伪造一个数据包演示RST攻击。

而这个数据包中要包含原地址/端口,目标地址/端口,还要最重要的SEQ号。

我找了很多向客户端发送RST数据包的方法,最后发现netwox这个工具很方便,可用于伪造数据包。在http://www.cse.iitm.ac.in/~chester/courses/19e_ns/slides/3_TCPAttacks.pdf  的第32页有一个很好的TCP攻击示例。

命令如下。

netwox 40 -l 原ip -m 目标ip -o 监听的端口号 -p 客户端端口后 -B -q 原的SEQ号

从Wireshark中就可以看到客户端的端口号是42560,而原的SEQ号由最初的1982386088变成了1982386091,所以最终执行以下命令。

netwox 40 -l 192.168.43.157 -m 192.168.43.226 -o 7070 -p 42560 -B -q 1982386091

执行后就能看到Android中抛出SocketException异常。

断开SSH连接

现在来尝试一下断开一个已经与远程服务取得连接的ssh。

还是来拿Wireshark筛选一下,条件是tcp.port==22 and tcp

netwox 40 -m 116.62.xx.xx -l 192.168.43.157 -o 22 -p 37156 -B -q 1328649361

最后在终端会输出以下内容

root@meet:~# packet_write_wait: Connection to 116.62.xx.xx port 22: Broken pipe

- END -



原文始发于微信公众号(十四个字节):TCP重置攻击演示