有些時候我們需要抓取一些應用數據包,解密 https 流量甚至修改內容。在這方面,mitmproxy 這個工具相當出色。

它最大的優點是可以集成 python 腳本(如今是 python 2,悲),就憑這點比 BurpSuite 不知高到哪裏去……

也正是因爲 python 2,我還是用 Kali Live 搞的。

背景

(內容經過藝術加工,可能與現實有所差異)

一天,我正在宿舍摸魚。突然,T 委發來羣消息,他說:“你敢不敢和我舉行青年帶學習答題大戰?”我豪爽地答應了:“我怎麼不當然敢!”週日下午在XX路XX大學舉行,誰不完成誰就是慫貨。

見識過同學們爐火純青的搜索能力,T 委試圖通過增加“反作弊”的方法限制搜索,他的方法有三:

  1. 限時 660s 填寫個人神祕信息 + 搜完 10 道題
  2. 切屏不能超過 3 次,否則將視作“作弊”,無法提交
  3. 無任何動作交互 60 秒將自動提交

最重要的是必須使用 X 信登錄方可提交問卷,如果沒有最後一條限制,前三條將等同於沒有!

破解問卷

原本的方案是修改服務器響應,插入以下善意 JS 代碼:

maxCheatTimes = 2147483647
maxSurveyTime = 999999999
maxOpTime = 999999
curIp = "114.114.114.114"

保險起見,再加入以下代碼,有“時間停止”的奇效:

setInterval = function() {}

行動

mitmproxy-info-erased.jpg

首先需要一個能訪問大局域網(你懂)的小局域網,加入 PC 和目標手機。在終端用 mitmweb 開啓 mitmproxy 以及其 web interface(在 127.0.0.1:8081)。

之後設置目標手機的全局 HTTP 代理到 PC 的 8080 端口。由於實在找不到 android 能用的全局 http 代理應用,我是在 iOS 上搞的,iOS 裝根證書麻煩一點。無論哪個平臺,在目標機器上訪問 http://mitm.it,即可照提示安裝證書。

接下來,在 mitm web 的 Start 選項卡填入我們需要篡改的 URL。這樣用 X 信內置瀏覽器打開目標頁面,客戶端請求以及服務端響應都會被截獲,URL 顯示爲黃色,帶有暫停圖標。頁面右側的 panel 就會顯示請求/響應信息,這時就可以隨便玩了。我的目的是注入上面的善意 JS 代碼,不需要多麼高級的玩法。改完之後記得在 Flow 選項卡按 Resume 來 accept 這個流量。

最後,就可以掛着時間停止的 X 信頁面快樂搜索啦,輕鬆滿分。