前言
做爲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報文建立任意的篡改規則對報文進行修改。
