因为 TCP 协议并无对 TCP 的传输包进行身份验证,因此在咱们知道一个 TCP 链接中的 seq 和 ack 的信息后就能够很容易的伪造传输包,伪装任意一方与另外一方进行通讯,咱们将这一过程称为 TCP 会话劫持(TCP Session Hijacking)shell
既然有了被攻击的风险,那随之而来的就有解决方案,因此为解决这个问题,一般会在网络层采用 IPSec 协议,在传输层采用 TLS 协议,对应的详细协议能够百度里了解一下。安全
简单的理解下TCP三次握手,详细的过程能够百度了解下。bash
因此对应没有加密的TCP协议,咱们是很容易劫持的,下面就让咱们来演示一下。服务器
演示说明:这里我用的是telnet协议测试。网络
虚拟机ip:tcp
攻击机工具: wireshark,netwox,shijack工具
服务器 须要配置 telnet 服务器(这里就不详细说明了,有兴趣的同窗能够自行百度)测试
过程:加密
首先,咱们让 客户机 链接 服务器 。spa
终端命令:
telnet 192.168.42.171
此时,客户端链接到服务器后输入ls命令,在同一网段的 攻击机 使用 wireshark 嗅探共用网卡,等待 客户机 和 服务器 通讯,捕捉 telnet 包。
这里咱们看到数据包的内容是 l ,由于咱们输入的命令是 ls 他会吧咱们发生的内容拆分开发生,咱们看一下下一个数据包就会发现内容是 s
直接找到最后的一个包,点击 TransmissionControl Protocol 查看其中的源端口,目的端口,next seq 和 ack 信息。(其中 服务器 的端口固定为 23 ,由于 telnet 端口是 23 )
由于咱们要伪造发下一个包,因此直接采用 next seq 做为下一个包的 ack ,采用 ack 做为下一个包的 seq
获取到信息以后,攻击机 使用 netwox 工具伪造 客户端 给 服务器 发一个 tcp 包。发送成功后,原来的 客户端 就会失去链接,同时 服务器 会把 攻击机 看成 客户端 ,这样 攻击机 就实现了会话劫持。
攻击机 终端输入:
netwox 40 --ip4-dontfrag --ip4-offsetfrag 0 --ip4-ttl 64 --ip4-protocol 6 --ip4-src 192.168.42.58 --ip4-dst 192.168.42.171 --tcp-src 38048 --tcp-dst 23 --tcp-seqnum 5 --tcp-acknum 102 --tcp-ack --tcp-psh --tcp-window 128 --tcp-data "6c"
说明:
由于咱们要伪造 客户端 给 服务的 发生TCP包,因此源ip:客户端(192.168.42.58)目的 ip:服务器(192.168.42.171) ,seq 和 ack 按刚才所说填写,末尾的 6c 是字母 l 的十六进制数,这里的l是咱们要发生的内容,其他参数默认就能够了。
如今咱们已经了解了tcp劫持的原理了,而后咱们推荐一款专业工具来测试TCP回话劫持漏洞。
一样,咱们先让 客户机 链接 服务器 。此时 攻击机 打开 wireshark 抓包,获取到源,目的 ip 以及端口号。
根据上面的信息,使用 shijack 工具输入如下命令:
./shijack-lnx eth0 192.168.42.58 35396 192.168.42.171 23
参数依次为网卡名,源地址,源端口,目的地址,telnet 端口
显示等待客户端和服务器通讯以便工具自动获取 seq,ack进行劫持。
在通讯以后显示劫持成功,这个时候客户端 就没法和 服务端 的进行通讯了。此时咱们在供给端输入 ls 并回车,用 wireshark 查看是否是真的成功发出伪造包。
如今咱们已经完成了TCP回话劫持了。
总结:
咱们在会话劫持成功后,攻击端是没有回显信息的,可是咱们仍是能够成功执行命令并执行的。若是咱们必需要它有回显的话,咱们能够利用反向 shell 的方法让攻击机获取服务器的权限。同时咱们要注意的是在渗透的时候可使用 nmap 这类工具对攻击点进行扫描,若是发现有相似 telnet 这种不安全的协议的端口开放的话就能够采用相应手段进行攻击了。