前言

作为Web应用中最常见的数据传输协议之一的Websocket,在我们日常工作中也势必会经常使用到,而在调试或测试中我们常常也有直接改变Websocket数据报文以确认其对应用的影响的需求,本文将介绍一种灵活方便的方式篡改Websocket收发的数据。
之前的文章里已经提到了如何利用FreeHttp修改HTTP的请求/响应报文,其实借助FreeHttp同样可以对Websocket数据报文做任意修改。(事实上burp suite 及 fiddler 的script 等工具也是可以完成的)
FreeHttp可以提供更容易的方式让您使用提前按需求设置的一组规则对websocket发出及接送的数据进行任意的篡改(同时支持文本及二进制的数据修改)
 

FreeHttp介绍及安装

FreeHttp是一个Fiddler插件,借助FreeHttp您可按照您自己的设定任意修改http请求或响应报文(同时支持websocket改包)

FreeHttp 安装可以直接查看 https://www.cnblogs.com/lulianqi/p/10428551.html#_label0_1 (内容比较长,您可以仅查看安装部分)

 

WebSocket改包实践

接下来将向您演示如何借助FreeHttp修改传输中的Websocket报文以满足我们假设的需求!
 

1:WebSocket编辑模式

进入FreeHttp Tab页后默认打开的是HTTP模式,您可以点击左下『HTTP/WS』切换至WebSocket模式(如果您没有看到『HTTP/WS』说明您使用的FreeHttp是1.3及以下版本,请通过上文提到链接升级FreeHttp即可,注意直接替换完成升级,升级也不会影响您已有的历史规则)
 

2:假设我们的场景

我们任意找一个使用WebSocket 的站点进行演示,通常Web系统里的即时聊天IM系统大多数直接使用WebSocket。
我们以京东的Web站为例进行演示(事实上网上是可以找到许多WebSocket在线测试站点可让大家调试使用,这里使用JD做演示完全没有恶意)
如上图我们直接进入京东首页点击右下角客服的IM聊天系统 (这个时期确保您的Fiddler是打开的)
 
 
您可以随意与京东客服说几句话(当然这个时候的客服很可能只是机器人)
假设我们要把客服给我们的回复修改掉,修改为“我东哥发话了,今天全场1折” (纯属玩笑请勿当真)
 

3:创建规则完成改包

如上图我们需要先在Fiddler左侧Session列表里找到刚刚我们聊天的Websocket的Session (事实上Websocket建立链接的握手协商使用的是HTTP,一旦链接建立完成就会一直使用同一条链路传输数据,所以不管这个Websocket链接后面收发了多少次数据包,大部分抓包工具都会将他们显示在同一个Session 即创建链接的那个Session 中),这个Session 通常很容易在Session列表里被找出来,因为Session列表中被标记为Websocket的项通常不会太多(注意Session列表中那些带ws图标的Session)。
在列表中双击我们刚刚找到的Session就可以打开WS消息列表,我们在这里可以找到客服刚刚回复我们的内容,这也确认我们找到了正确的Websocket Session。
注意查看回复给我们的报文结构,后面我们将以此创建我们的篡改规则。
 
 
如上图现在我们切换到FreeHttp Tab页来创建一个简单的WebSocket篡改规则完成我们刚刚的需求。
您可以直接点击FreeHttp获取图标(上图中“Click here”的位置),FreeHttp会自动为您选择的session创建一个完全匹配规则(同时也会根据您选择的session类型自动切换http/ws模式)。当然如果你熟悉FreeHttp里的Filter您可以手动创建更加符合您自己要求的匹配规则。(https://www.cnblogs.com/lulianqi/p/10428551.html#_label1 您在这里可以找到Filter的详细规则)
 
查看客服回复给我们的WebSocket消息我们很容易的可以看到直接修改高亮区域文本即可。
 
因为我们要修改的是接收数据,如上图我们切换到『Websocket Receive Moditfic』,然后直接在『Payload Modific』区域填写上图中的规则即可(我们使用最简单的文本替换,更复杂的场景我们可以使用正则替换或HEX等其他模式 , https://www.cnblogs.com/lulianqi/p/10428551.html#_label2_0 您在这里的2.1.4可以找到其他模式的使用方法)。
规则填写完成点击右下角确认保存您刚刚创建的篡改规则。
 
保存完成后您可以在右侧『Response Rule』列表中看到您刚刚添加的规则,注意上图中黄色高亮区域按此设置启用您刚刚添加的规则(默认新加入的规则是不启用的)
 
完成规则创建后,我们再次对京东客服发送您好,可以看到Web网页上收到的回复已经按我们的规则发生了变化。(您可以在网页的开发者工具或Fiddler的session ws消息列表中同样看到变化)
注意到右下角的“咨询其他问题”的入口了吗,我们可以按刚刚的操作再添加一个规则,将这个“咨询其他问题”修改为“1折入口”(这里就不重复描述了)
 
我们再次发送您好可以看到右下角的快速入口也发生了改变
注意这里有一个细节,因为这里一个session需要匹配多个规则进行修改,如果您发现您的FreeHttp只能匹配其中一个,请在下方打开『Modific Tool』『http tamper setting』,并取消『is only match first tamper rule』
 

4:复杂的场景

虽然我们按上文的操作已经完成了我们最初的需求,不过现实场景中的需求往往不是一成不变的,FreeHttp同时提供了许多更精细的功能帮助您创建篡改规则对Websocket报文进行篡改。
同样是上面提到的例子通常Websocket里的的实时消息会有很多,并不是所有的消息都是客服回复我们的文本消息,我们没有必要对接收的所有消息都进行篡改。
 
如上图我们创建更加具体的Filter规则,配置仅指定payload开头的返回报文才能通过匹配,并为这条规则创建更容易辨识的别名“修改客服的回复·····”
 
有的时候我们需要获取发生或回复消息里的一些数据,把他们变成参数化数据供后面的规则使用,比如我们需要获取我们发送给客服的内容,我们就需要创建一个『Websocket Send Modific』规则并使用『parameter data』获取动态参数
 
通过分析我们发送的payload不难发现我们发送的文本消息都有固定的开头,我们可以如上图创建『Websocket Send Modific』的匹配规则
 
因为该规则并不用修改报文只是用来获取动态数据,我们『Payload Modific』什么都不用填写,只需要点击下方parameter图标(红色虚线框中的图标)添加如上图的parameter pick规则即可(参数名称为my content ,使用 string方式拾取,拾取范围是请求或响应实体,以},"content":"开头并以","render":"user"结尾的数据。更多parameter pick设置细节您可以查看 https://www.cnblogs.com/lulianqi/p/10428551.html#_label8_2 8.3 动态拾取参数化数据)
 
启用您刚刚添加的规则,并再次在IM聊天框中发送您好,我们刚刚创建的规则就会从我们发送的payload中拾取我们发送的内容,如上图我们通过『Modific Tool』『parameter data manage』打开参数管理器查看我们拾取的内容(注意这个数据是会根据每次拾取动态变化的)
 
接下来我们在后面的规则中直接使用我们前面拾取的数据,我们现在双击刚刚创建的Response Rule “修改客服的回复为打折消息”对其进行编辑
 
如上图我们在需要插入动态参数的地方右键既可以方便的找到我们刚刚拾取的“my content”参数,并将其直接应用到我们的规则中,同时您可以点击下方的闹钟图标为本次session设置延时。(更多 parameter data manage 的使用您可以查看 https://www.cnblogs.com/lulianqi/p/10428551.html#_label8 八:参数化数据设置)
注意修改完成后不要忘了点确认保存修改。
 
如上图,这个时候您再向客户发送“您好吧”这种消息的时候,客服的回复中就会直接使用我们刚刚拾取的参数。
 
 

总结

事实上使用FreeHttp您可对APP移动应用,Web网页,小程序的Websocket 及 HTTP报文创建任意的篡改规则对报文进行修改。
FreeHttp的更多使用细节您可以查看https://www.cnblogs.com/lulianqi/p/10428551.html 使用说明
 
上文使用的FreeHttp您可以在Github上查看其源码 https://github.com/lulianqi/FreeHttp/
任何使用上的问题您都可以在https://github.com/lulianqi/FreeHttp/issues 直接提出

借助FreeHttp任意篡改Websocket报文(Websocket改包)的更多相关文章

  1. 借助FreeHttp任意篡改http报文 (使用·实现)

    引言 FreeHttp是一个Fiddler插件借助FreeHttp您可按照您自己的设定修改请求或响应报文,这对测试及调试都非常有用 比如您发现线上页面js文件错误,直接使用规则替换新的js文件您可以在 ...

  2. 使用FreeHttp任意篡改http报文 (FreeHttp使用及实现说明)

    本文转自:https://www.cnblogs.com/lulianqi/p/10428551.html 前言 FreeHttp是一个Fiddler插件借助FreeHttp您可按照您自己的设定修改请 ...

  3. 借助FreeHttp为任意移动端web网页添加vConsole调试

        以下介绍在不用修改代码并发布项目的情况下,为我们日常使用的移动web应用(如手机web淘宝)添加vConsole调试工具的方法   vConsole介绍 vConsole是一个轻量.可拓展.针 ...

  4. 【WebSocket】WebSocket介绍

    1.背景 在WebSocket出现之前客户端向服务器发出请求是通过http协议实现的,而http协议有个特点是通行请求只能由客户端发起,然后服务端响应查询结果,HTTP 协议没法让服务器主动向客户端推 ...

  5. WebSocket协议与抓包

    WebSocket协议 WebSocket并不是全新的协议,而是利用了HTTP协议来建立连接,它的目的是在浏览器和服务器之间建立一个不受限的双向通信的通道,比如说,服务器可以在任意时刻发送消息给浏览器 ...

  6. 【WebSocket】WebSocket快速入门

    WebSocket介绍 WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议. WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动 ...

  7. nginx支持websocket及websocket部分原理介绍

    nginx支持websocket及websocket部分原理介绍最近ipc通过websocket与server进行通行,经过无法通过nginx进行反向代理,只有直连nodejs端口.而且部署到阿里云用 ...

  8. 【WebSocket】WebSocket消息推送

    准备使用WebSocket实现Java与Vue或者安卓间的实时通信,实现私密聊天.群聊.查询下资料备用. WebSocket客户端 websocket允许通过JavaScript建立与远程服务器的连接 ...

  9. WireShark 自带工具 editcap 和 text2pcap 配合完成改包操作

    一.拆包 首先声明这种方法比较复杂而且需要点技术水平,不建议菜鸟尝试(可以使用WireEdit编辑pcap包,不过要联网)其实在熟练这种方法后也可以很快的,但这种方法主要还是方便吧,不用下载其他什么软 ...

随机推荐

  1. 个性探测综述阅读笔记——Recent trends in deep learning based personality detection

    目录 abstract 1. introduction 1.1 个性衡量方法 1.2 应用前景 1.3 伦理道德 2. Related works 3. Baseline methods 3.1 文本 ...

  2. Java indexof

    java中字符串方法 indexof() indexof()可以返回输入的字符串在目标字符串中第一次出现的位置,如果没有出现返回int 0:

  3. Hydra's plan

    省选前的计划,实时更新(不知道能不能把挖的坑填完呢qwq) 链接

  4. Tensorflow Cpu不支持AVX

    Tensorflow从1.6开始从AVX编译二进制文件,所以如果你的CPU不支持AVX 你需要 从源码编译 下载旧版 从源码编译比较麻烦,如果你是初学的话,我建议使用旧版. 安装旧版: pip3 in ...

  5. day11面向对象 多态 静态方法 (三)

    多继承 class 类名(父类1,父类2)  ----- 默认使用第一个父类   重写父类方法 方法名和父类方法名一样 当父类和子类的方法名重名时,默认使用的是子类中的方法     调用被重写的父类的 ...

  6. 性能测试必备知识(11)- 怎么理解内存中的Buffer和Cache?

    做性能测试的必备知识系列,可以看下面链接的文章哦 https://www.cnblogs.com/poloyy/category/1806772.html 缓存 从 free 命令可以看到,缓存其实就 ...

  7. javaSE总结(转+总结)

    一:java概述: 1,JDK:Java Development Kit,java的开发和运行环境,java的开发工具和jre. 2,JRE:Java Runtime Environment,java ...

  8. Disruptor极速队列

    参考:http://www.cnblogs.com/haiq/p/4112689.html Disruptor 是线程内通信框架,用于线程里共享数据.LMAX 创建Disruptor作为可靠消息架构的 ...

  9. JavaScript学习系列博客_30_JavaScript Date 日期对象

    Date - 日期的对象,在JS中通过Date对象来表示一个时间 - 创建一个当前的时间对象 var d = new Date(); - 创建一个指定的时间对象 var d = new Date(&q ...

  10. composer安装包的时候触发PHP fatal error,提示允许的内存耗光

    在composer require之前加COMPOSER_MEMORY_LIMIT=-1