天天看點

在Mac上安裝與使用mitmproxy

[本文出自天外歸雲的部落格園]

Mitmproxy是一款支援HTTP(S)的中間人代理工具。不同于Fiddler2,burpsuite等類似功能工具,mitmproxy可在終端下運作,并且支援編寫腳本來批量處理請求。Mitmproxy使用Python開發,是輔助web開發&測試,移動端調試,滲透測試的工具。你不要在Windows上安裝它,因為用不了,Windows的指令行不支援mitmproxy的界面顯示。

1. 在終端安裝(安裝後會提示安裝路徑用來啟動mitmproxy),以下指令适合python2(注意brew和pip安裝的mitmproxy版本要一緻):

2. 在終端啟動(指定本機ip和運作端口号):

抓https的包需要在移動端安裝證書,在啟動mitmproxy之後在手機浏覽器輸入并通路“mitm.it”進行安裝證書,然後就可以抓手機端發送的https包了。

在主界面用滑鼠點選具體的請求可以進入請求界面。

1. 清屏:“shift+c”

2. 切換“Request/Response”欄:“tab”

3. 傳回上一級(包括退出):“q”

4. 在具體請求的“Response”欄界面以不同格式檢視傳回結果:“m+高亮的字母”進行選擇要編輯的部分

5. 在主界面删除指定請求:用小黃箭頭指定要删除的請求然後按“d”

6. 攔截請求:在主界面按“i+要攔截的字元串,例如:api.win”進行攔截包含指定字元串的請求

7. 在請求界面編輯請求或響應:e+“高亮的字母”進行選擇要編輯的部分

8. 在主界面發送指定的請求:用小黃箭頭指定要發送的請求然後按兩下“a”

腳本編寫如下,将傳回結果批量改成“666”:

運作腳本方式(在終端裡腳本所在路徑下運作如下指令,這裡的腳本叫“test_mit.py”):

運作以後在終端裡可以看到mitmproxy的主界面,按“e”可以檢視腳本的輸出資訊以及腳本報錯的資訊。

例如我随便通路一款手機上的app,這裡拿“一進制樂購”為例。在mitmproxy的主界面可以看到抓包資訊,随便點進去一個,檢視它的“Response”欄,可以看到傳回結果變成了“666”。而對應的在手機上我也無法打開這款app了,殺掉程序後重新進入app就會發生閃退。這種修改接口傳回值然後檢視用戶端是否能夠正确處理的測試就是app專項測試中的接口容錯測試。

我們可以用mitmproxy的filter請求攔截器或者通過編寫腳本的方式來進行接口的容錯測試。

以“一進制樂購”這個app為例,測試不同使用者到新的商品詳情頁後檢查各自可用的紅包清單,我們需要模拟不同的使用者來通路這個頁面,如果來回登出app通路這個頁面的話過程是非常繁瑣的。通過mitmproxy可以完美的進行請求資料篡改,在不切換登入使用者的前提下模拟不同使用者通路商品詳情頁面。腳本代碼如下:

編寫腳本的過程中,對于不知道是什麼類型的變量:

對于不知道包含什麼方法和成員的變量:

對于不知道怎麼用的方法,google之。

以上代碼中accountId和pwd變量為待模拟使用者的使用者名和密碼,我們在通過這個腳本啟動了mitmproxy之後,在無需重新開機mitmproxy的情況下修改腳本中的内容就可以實作對請求資料的篡改,進而達到我們模拟不同使用者登入通路商品詳情頁的目的!儲存好修改的腳本之後要做的就是手動重新整理app内的商品詳情頁面了,從可用紅包清單處可以看到通路商品詳情頁的使用者已經成功變為了腳本中指定的使用者。2017.3.13的晚上,又錯過了晚飯。我和大師兄朱勃在網易大廈的六樓一起研究,終于搞定了通過編寫mitmproxy腳本的方式來模拟不同使用者通路app内頁面。