借助FreeHttp任意篡改Websocket报文(Websocket改包)

前言

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

FreeHttp介绍及安装

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

 FreeHttp 安装能够直接查看 http://www.javashuo.com/article/p-dflfncnc-nc.html (内容比较长,您能够仅查看安装部分)html

 

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您能够手动建立更加符合您本身要求的匹配规则。( http://www.javashuo.com/article/p-dflfncnc-nc.html 您在这里能够找到Filter的详细规则)
 
查看客服回复给咱们的WebSocket消息咱们很容易的能够看到直接修改高亮区域文本便可。
 
由于咱们要修改的是接收数据,如上图咱们切换到『Websocket Receive Moditfic』,而后直接在『Payload Modific』区域填写上图中的规则便可(咱们使用最简单的文本替换,更复杂的场景咱们可使用正则替换或HEX等其余模式 , http://www.javashuo.com/article/p-dflfncnc-nc.html 您在这里的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设置细节您能够查看 http://www.javashuo.com/article/p-dflfncnc-nc.html 8.3 动态拾取参数化数据)
 
启用您刚刚添加的规则,并再次在IM聊天框中发送您好,咱们刚刚建立的规则就会从咱们发送的payload中拾取咱们发送的内容,如上图咱们经过『Modific Tool』『parameter data manage』打开参数管理器查看咱们拾取的内容(注意这个数据是会根据每次拾取动态变化的)
 
接下来咱们在后面的规则中直接使用咱们前面拾取的数据,咱们如今双击刚刚建立的Response Rule “修改客服的回复为打折消息”对其进行编辑
 
如上图咱们在须要插入动态参数的地方右键既能够方便的找到咱们刚刚拾取的“my content”参数,并将其直接应用到咱们的规则中,同时您能够点击下方的闹钟图标为本次session设置延时。(更多 parameter data manage 的使用您能够查看 http://www.javashuo.com/article/p-dflfncnc-nc.html 八:参数化数据设置)
注意修改完成后不要忘了点确认保存修改。
 
如上图,这个时候您再向客户发送“您好吧”这种消息的时候,客服的回复中就会直接使用咱们刚刚拾取的参数。
 
 

总结

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

相关文章
相关标签/搜索