藉助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 直接提出

相關文章
相關標籤/搜索