前言
做为Web应用中最多见的数据传输协议之一的Websocket,在咱们平常工做中也势必会常用到,而在调试或测试中咱们经常也有直接改变Websocket数据报文以确认其对应用的影响的需求,本文将介绍一种灵活方便的方式篡改Websocket收发的数据。
以前的文章里已经提到了如何利用FreeHttp修改HTTP的请求/响应报文,其实借助FreeHttp一样能够对Websocket数据报文作任意修改。(事实上burp suite 及 fiddler 的script 等工具也是能够完成的)
FreeHttp能够提供更容易的方式让您使用提早按需求设置的一组规则对websocket发出及接送的数据进行任意的篡改(同时支持文本及二进制的数据修改)
FreeHttp介绍及安装
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篡改规则完成咱们刚刚的需求。
查看客服回复给咱们的WebSocket消息咱们很容易的能够看到直接修改高亮区域文本便可。
规则填写完成点击右下角确认保存您刚刚建立的篡改规则。
保存完成后您能够在右侧『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 “修改客服的回复为打折消息”对其进行编辑
注意修改完成后不要忘了点确认保存修改。
如上图,这个时候您再向客户发送“您好吧”这种消息的时候,客服的回复中就会直接使用咱们刚刚拾取的参数。
总结
事实上使用FreeHttp您可对APP移动应用,Web网页,小程序的Websocket 及 HTTP报文建立任意的篡改规则对报文进行修改。
