由于 TCP 协议并没有对 TCP 的传输包进行身份验证,所以在我们知道一个 TCP 连接中的 seq 和 ack 的信息后就可以很容易的伪造传输包,假装任意一方与另一方进行通信,我们将这一过程称为 TCP 会话劫持(TCP Session Hijacking)

既然有了被攻击的风险,那随之而来的就有解决方案,所以为解决这个问题,通常会在网络层采用 IPSec 协议,在传输层采用 TLS 协议,对应的详细协议可以百度里了解一下。

简单的理解下TCP三次握手,详细的过程可以百度了解下。

所以对应没有加密的TCP协议,我们是很容易劫持的,下面就让我们来演示一下。

演示说明:这里我用的是telnet协议测试。

虚拟机ip:

  • 攻击机:192.168.42.162
  • 客户端:192.168.42.58
  • 服务端:192.168.42.171

实现条件:

攻击机工具: wireshark,netwox,shijack

服务器 需要配置 telnet 服务器(这里就不详细说明了,有兴趣的同学可以自行百度)

过程:

首先,我们让 客户机 连接 服务器 。

终端命令:

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 这种不安全的协议的端口开放的话就可以采用相应手段进行攻击了。

最新文章

  1. DEV express 对Gridview某行的元素赋值
  2. 【阿迪达斯 ZX850 系列】
  3. 论meta name= viewport content= width=device-width initial-scale=1 minimum-scale=1 maximum-scale=1的作用
  4. django book querysets
  5. 【转】Java中如何遍历Map对象的4种方法
  6. Android 类似未读短信图标显示数字效果的分析
  7. DevExpress ASP.NET 使用经验谈(7)-ASPxTreeList控件使用
  8. 5G+边缘计算,着眼可见的未来
  9. mysql案例~关于linux服务器本身的优化问题
  10. 用webstorm搭建vue项目
  11. Trailing Zeroes (III) LightOJ - 1138(二分)
  12. git log 高级用法
  13. 使用ThinkPHP实现生成缩略图及显示
  14. define和typedef
  15. java基础50 配置文件类(Properties)
  16. iOS:制作九宫格
  17. Oracle DSI系列 01 DSI初识BBED
  18. Asp.net 使用Neatupload 第三方控件上传大文件,在IIS7上无法正常工作解决
  19. web渗透-sql注入
  20. 我错了的N个学习

热门文章

  1. mui使用技巧
  2. 打杂程序员之ftp换成外网ip咋就登陆不上?
  3. 安装Android Studio的问题
  4. Python单元测试框架unittest使用方法讲解
  5. 在crontab中执行脚本重要事项
  6. Class.forName(),classloader.loadclass用法详解
  7. Windows装系统
  8. day3-基础 列表,元组,字典,模块
  9. 如何用ABAP代码读取CDS view association的数据
  10. 【转载】#446 - Deciding Between an Abstract Class and an Interface