前言

作为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. arcgis api for js 之网络分析服务发布

    1.引言 百度地图上有这样的功能:点击两个点,地图上会显示对两个点的路径规划.这个功能能否利用 arcgis api 实现呢?答案是肯定的.不过在实现之前,我们需要将数据发布为网络分析服务,接下来我将 ...

  2. C#LeetCode刷题-队列

    队列篇 # 题名 刷题 通过率 难度 363 矩形区域不超过 K 的最大数值和   27.2% 困难 621 任务调度器   40.9% 中等 622 设计循环队列 C#LeetCode刷题之#622 ...

  3. C#LeetCode刷题之#231-2的幂(Power of Two)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3858 访问. 给定一个整数,编写一个函数来判断它是否是 2 的幂 ...

  4. C#LeetCode刷题之#189-旋转数组(Rotate Array)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3700 访问. 给定一个数组,将数组中的元素向右移动 k 个位置, ...

  5. Spring——IOC(控制反转)与DI(依赖注入)

    IOC与DI的理解及使用 控制反转IOC(Inversion of Control)是一种设计思想,DI(依赖注入)是实现IOC的一种方法.在没有IOC的程序中,我们使用面向对象编程,对象的创建于对象 ...

  6. Spring Boot整合ElasticSearch和Mysql 附案例源码

    导读 前二天,写了一篇ElasticSearch7.8.1从入门到精通的(点我直达),但是还没有整合到SpringBoot中,下面演示将ElasticSearch和mysql整合到Spring Boo ...

  7. [开源] .Net ORM FreeSql 1.8.0-preview 最新动态播报(番号:我还活着)

    写在开头 FreeSql 是 .NET 开源生态下的 ORM 轮子,在一些人眼里属于重复造轮子:不看也罢.就像昨天有位朋友截图某培训直播发给我看,内容为:"FreeSQL(个人产品),自己玩 ...

  8. volatile的特性代码验证

    一 . 可见性(visibility) volatile关键字修饰的变量,如果值发生了改变,其他线程会立刻获取到,从而避免了出现脏读的情况. public class TestVolatile { p ...

  9. 一步一步讲解如何安装Ubuntu18.04,零基础

    在一块空的硬盘上安装Ubuntu是最为简单的,我接下将介绍如何进行安装 1.准备 Ubuntu镜像,b( ̄▽ ̄)d 这个是肯定yaod Rufus,一个写入镜像的工具' U盘一个 2.开始 2.1.写 ...

  10. C++统计单词数

    [题目描述] 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数.现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在 ...