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

TCP回话劫持原理和利用的更多相关文章

  1. TCP会话劫持_转

    前言通常,大家所说的入侵,都是针对一台主机,在获得管理员权限后,就很是得意:其实,真正的入侵是占领整个内部网络.针对内部网络的攻击方法比较多,但比较有效的方法非ARP欺骗.DNS欺骗莫属了.但是,不管 ...

  2. TCP协议设计原理

    TCP协议设计原理 最近去了解TCP协议,发现这是一个特别值得深思的协议.在本篇博客中,不会长篇大论的给大家介绍TCP协议特点.包头格式以及TCP的连接和断开等基本原理,而是会带大家深入理解为什么要这 ...

  3. TCP传输工作原理

    引言 在TCP/IP体系结构中,IP协议只管将数据包尽力传送到目的主机,无论数据传输正确与否,它都不做验证,不发确认,也不保证数据包的顺序,因而不具有可靠性.这一问题要由传输层TCP协议来解决,TCP ...

  4. TCP/IP协议原理与应用笔记18:构成子网和超网

    1. 引言: (1)类别IP编址(Classful IP)的缺陷 • 固定的3种IP网络规模      C类地址:少于255台主机的网络      B类地址:介于255~65535台主机的网络     ...

  5. TCP/IP协议原理与应用笔记17:IP编址(重点)

    1. IP地址(通用标识符) 对于同一个网络设备(主机或路由器)的不同网络连接,需要不同的IP地址进行标识 2. 主机标识符 主要有下面三种方式的主机标识方式: (1)Name:是什么,可读性强(了解 ...

  6. TCP/IP协议原理学习笔记

    昨天学习了杨宁老师的TCP/IP协议原理第一讲和第二讲,主要介绍了OSI模型,整理如下: OSI是open system innerconnection的简称,即开放式系统互联参考模型,它把网络协议从 ...

  7. 独家分析:安卓“Janus”漏洞的产生原理及利用过程

    近日,Google在12月发布的安卓系统安全公告中披露了一个名为"Janus"安卓漏洞(漏洞编号:CVE-2017-13156).该漏洞可以让攻击者绕过安卓系统的signature ...

  8. 初级安全入门——SQL注入的原理与利用

    工具简介 SQLMAP: 一个开放源码的渗透测试工具,它可以自动探测和利用SQL注入漏洞来接管数据库服务器.它配备了一个强大的探测引擎,为最终渗透测试人员提供很多强大的功能,可以拖库,可以访问底层的文 ...

  9. TCP连接的建立以及利用tcpdump分析连接建立的过程(转)

    原文地址:http://www.cnblogs.com/coser/archive/2010/12/05/1968812.html 一.实验目的 实验1_1: 使用Freebsd/Linux操作系统下 ...

随机推荐

  1. vue.extend与vue.component的区别和联系

    一味的闷头开发,却对基础概念缺乏理解,是个大坑... 查阅官网后现对自己的理解记录一下,用于日后复习巩固 Vue.extend({}) 简述:使用vue.extend返回一个子类构造函数,也就是预设部 ...

  2. 清除canvas画布内容--点擦除+线擦除

    清空canvas画布内容 1.重置宽或高 由于canvas每当高度或宽度被重设时,画布内容就会被清空,因此可以用以下方法清空:(此方法仅限需要清除全部内容的情况) var c=document.get ...

  3. ref关键字的用法

    ref 关键字通过引用(而非值)传递参数. 通过引用传递的效果是,对所调用方法中的参数进行的任何更改都反映在调用方法中. 例如,如果调用方传递本地变量表达式或数组元素访问表达式,所调用方法会将对象替换 ...

  4. 什么是SQL注入?什么是XSS攻击?什么是CSRF攻击?

    1. XSS(Cross Site Script,跨站脚本攻击) 是向网页中注入恶意脚本在用户浏览网页时在用户浏览器中执行恶意脚本的攻击方式. 1.1跨站脚本攻击分有两种形式: 反射型攻击(诱使用户点 ...

  5. linux漏洞分析入门笔记-栈溢出

    ida7.0 ubuntu16.04 lts 0x00:环境配置 使用IDA远程调试Linux程序步骤如下: 1. 在进行远程调试之前需要对Linux平台进行一些准备工作.在IDA的安装目录中的dbg ...

  6. spring---FactoryBean与BeanFactory的区别

    1.BeanFactory BeanFactory是IOC最基本的容器,负责生产和管理bean,它为其他具体的IOC容器提供了最基本的规范,例如DefaultListableBeanFactory, ...

  7. day014-反射、注解

    1. Junit 1.1什么是Junit Junit是Java语言编写的第三方单元测试框架(工具). 1.2单元测试 在Java中,一个类就是一个单元. 单元测试:开发中编写的一小段代码,用来检测类中 ...

  8. 如何使用代码获得一个function module的Where Used List

    如果要获得一个function module的Where Used List,我们通常用的办法是使用ABAP workbench里提供的功能. where used list显示结果如下: 但我接到一 ...

  9. ACM-ICPC(9/25)

    DP专题 记忆化搜索与递推(方式) DAG模型 记忆化搜索: 用d[状态] 的特殊值表示是否计算过. 用vis[状态]是否访问过 DAG模型: 矩形嵌套:d(i) 以 i 结点开始的最长长度,​ 存在 ...

  10. HDU 5723 最小生成树上的期望

    题意:求最小生成树,和任意两个点之间距离的期望 官方题解: 最后求两遍点的积的时候,还是要判断父子关系. 注意 long long #include <bits/stdc++.h> usi ...