1. 程式人生 > >藉助FreeHttp任意篡改Websocket報文(Websocket改包)

藉助FreeHttp任意篡改Websocket報文(Websocket改包)

前言

作為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完成的其他測試/除錯實踐

藉助FreeHttp為任意移動端web網頁新增vConsole除錯 

微信授權登入mock(在沒有真實微信賬號的情況下測試大量微信賬戶授權登入的情況)

HTTPS中間人攻擊實踐(原理·實踐)

使用FreeHttp強制登出微信公眾號登陸狀態(實現~原理)

使用瀏覽器訪問或除錯微信公眾號(跳過微信認證)

  上文使用的FreeHttp您可以在Github上檢視其原始碼 https://github.com/lulianqi/FreeHttp/ 任何使用上的問題您都可以在https://github.com/lulianqi/FreeHttp/issues 直接提出