TCP会话劫持原理与测试

阅读本文之前建议了解 TCP 三次握手过程以及 TCP 的包头详细信息。

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

(可见,tcp 协议并无验证部分)

为解决这个问题,通常会在网络层采用 IPSec 协议,在传输层采用 TLS 协议,在应用层采用对应的协议。各协议安放位置如下。

所以对于一些未进行防护的,采用明文传输的协议,我们就可以很容易的进行会话劫持。

这里以 telnet 连接为例,采用三台虚拟机进行演示。

虚拟机配置如下:

攻击机 192.168.204.130 服务器 192.168.204.131 客户机 192.168.204.132

实现条件:

攻击机工具: wireshark,netwox,shijack

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

过程:

首先,我们让 客户机 连接 服务器 。按提示输入服务器的账户,密码(输入密码时字符不可显)。

终端输入命令:

telnet 192.168.204.131

此时,在同一网段的 攻击机 使用 wireshark 嗅探共用网卡,等待 客户机 和 服务器 通信,捕捉 telnet 包。

为了直接找到 telnet 包可以在 wireshark 设置过滤 telnet ,同时设置 wireshark 查看包实际序号(Edit Preferences->Protocols->TCP-> 不选 Relative Sequence Numbers)。

在 客户机 和 服务器 进行通讯后,我们成功捕捉到包。

直接找到最后的一个包,点击 TransmissionControl Protocol 查看其中的源端口,目的端口,next seq 和 ack 信息。(其中 服务器 的端口固定为 23 ,因为 telnet 端口是 23 )

因为我们要伪造发下一个包,所以直接采用 nextseq 作为下一个包的 ack ,采用 ack 作为下一个包的 seq(这里是 tcp 协议的规定,不懂的同学可以百度下 tcp 协议三次握手)

获取到信息之后,攻击机 使用 netwox 工具伪造 客户端3 给 服务器 发一个 tcp 包。发送成功后,原来的 客户端3 就会失去连接,同时 服务器 会把 攻击机 当作 客户端3 ,这样 攻击机 就实现了会话劫持。

攻击机 终端输入:

netwox 40 --ip4-dontfrag --ip4-offsetfrag 0 --ip4-ttl 64 --ip4-protocol 6 --ip4-src 192.168.204.132 --ip4-dst 192.168.204.131 --tcp-src 45116 --tcp-dst 23 --tcp-seqnum 3332505945 --tcp-acknum 4096321077 --tcp-ack --tcp-psh --tcp-window 128 --tcp-data "6c"

解释:因为是伪造 客户机 给 服务器 发送消息,所以源 ip 为 192.168.204.132,目的 ip 是 192.168.204.131 ,seq 和 ack 按刚才所说填写,末尾的 6c 是字母 l 的十六进制数,可以更换为别的,其余参数默认就可以了。

发送成功后 wireshark 显示出一个带着数据 l 的包,说明我们劫持成功。

上面每次伪造包的时候需要输入一大堆参数的实现过程是不是略显麻烦?这里推荐使用 shijack 工具(我的机子 hunt1.5 不能运行,,)。

同样,我们先让 客户机 连接 服务器 。此时 攻击机 打开 wireshark 抓包,获取到源,目的 ip 以及端口号。

根据上面的信息,使用 shijack 工具输入以下命令

./shijack-lnx eth0 192.168.204.132 45188 192.168.204.131 23

参数依次为网卡名,源地址,源端口,目的地址,telnet 端口

显示等待客户端和服务器通信以便工具自动获取 seq,ack进行劫持。

在通信之后显示劫持成功。此时我们输入 ls 并回车,用 wireshark 查看是不是真的成功发出伪造包。

Ok,劫持成功!

总结

那么会话劫持成功后,我们一遍可以采用反向 shell 的方法让攻击机直接获取服务器的权限,这部分内容以后再讲(我是不会告诉你们我是来刷文章数的 0.0 )。同时我们要注意的是在渗透的时候可以使用 nmap 这类工具对攻击点进行扫描,如果发现有类似 telnet 这种不安全的协议的端口开放的话就可以采用相应手段进行攻击了。

原文发布于微信公众号 - 信安之路(xazlsec)

原文发表时间:2017-11-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Coding01

学习 Lumen 用户认证 (一)

好久没写 PHP 代码了,尤其是 Lumen,我是 Lumen 的忠实用户,自从面世开始,我就将 Lumen 作为我 API 的主要框架使用。

1571
来自专栏Linyb极客之路

RESTful API设计指南

在RESTful架构中,每个网址代表一种资源(resource),所以网址中不能有动词,只能有名词,而且所用的名词往往与数据库的表格名对应。一般来说,数据库中的...

1143
来自专栏iKcamp

基于Koa2搭建Node.js实战(含视频)☞ 中间件用法

中间件用法——讲解 Koa2 中间件的用法及如何开发中间件 文章 middleware 中间件 正是因为中间件的扩展性才使得 Koa 的代码简单灵活。 在 a...

2755
来自专栏SDNLAB

OpenStack虚机网卡的创建过程

OpenStack最基本和常用的操作就是启动虚机。虚机启动的过程中涉及很多内容,其中非常重要的一个环节就是创建并绑定虚机的虚拟网卡。虚机的创建和管理是Nova的...

3537
来自专栏北京马哥教育

varnish学习总结

什么是web cache? Web缓存是指一个Web资源(如html页面,图片,js,数据等)存在与Web服务器和客户端(浏览器)直接的副本。缓存会根据进来...

3135
来自专栏Elson's web

webpack4实用配置指南-上手篇

算起来已经有3到4个项目的webpack构建打包经历。然而每次搭建起来还是有新手既视感,比较捉急。工具用法的东西,好记性不如烂笔头,有必要系统梳理下webpac...

1.7K14
来自专栏比原链

Derek解读Bytom源码-protobuf生成比原核心代码

Gitee地址:https://gitee.com/BytomBlockchain/bytom

1101
来自专栏程序员宝库

vue-cli 脚手架中 webpack 配置基础文件详解

vue-cli是构建vue单页应用的脚手架,输入一串指定的命令行从而自动生成vue.js+wepack的项目模板。这其中webpack发挥了很大的作用,它使得我...

2443
来自专栏landv

烽火2640路由器命令行手册-12-IBM网络配置命令

[no]dlsw local-peer [peer-id ip-address] [cost cost] [lf size] [keepalive second...

1182
来自专栏木头编程 - moTzxx

PHP 学习筆記[2] —— 自学PHP 笔记整理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/de...

1092

扫码关注云+社区

领取腾讯云代金券