抓包:Mitmproxy 之 Mitmweb

stephen發表於2024-12-24

一、專案資訊

  • 專案地址
  • 文件地址

二、能解決什麼問題、優點

我知道大部分測試人員都不喜歡看文件,所以稍微總結一下測試平時使用的功能,或者大家感興趣的功能,一般是其他抓包軟體無法或者不容易實現的

  • https 抓包 + 伺服器部署 +web 視覺化介面
  • 請求/響應 替換
  • python 外掛支援
  • 解密 response
  • 上游模式 - 科學抓包
  • 長連線支援,websocket、udp、tcp
  • wireguard 透明代理

三、安裝 + 證書

寫了又刪了,其他帖子都寫這個,我就不寫了,有興趣自己會去裝的
擱這看 官方
需要注意的是,如果伺服器安裝了,要在區域網其他裝置訪問,需要指定引數

--web-host 0.0.0.0

四、技巧篇

1、內容替換

有什麼用

就測試而言,我舉幾個例子:
1、 可以測試客戶端的不同響應,而不需要伺服器的參與
比如我有一個登入或者 serverstate 介面,返回{"status": 1}。 現在我要測試停服介面,一般,我只需要把響應結果改成{"status": 0},客戶端就會進入停服介面
2、 簡單的安全測試
以下例子其實已經屬於安全的範疇了,尤其在弱聯網遊戲中,很容易修改玩家的數值

怎麼做

在 mitmweb 中,點選 options-edit options,找到 modify_body,新增一行

/~s/"status":1/"status": 0

這個表示把響應中的status: 1改為status: 0
同理, 我要測試 Bilibili 的硬幣
修改之前:

修改之後:

使用的替換就是

/~s/"coin":\d+/"coin": 99999999999

所以這裡是顯示沒問題的。

官方教程

官方

2、解密 response

一般的抓包軟體,即便我知道解密演算法,那也無法視覺化,只能抓包拿到 body,再透過其他的工具或程式碼解密
透過外掛這裡就可以視覺化請求和響應
解密前:

解密後:

3、上游模式 - 抓科學包

如果想要抓取某些包,比如谷歌商店的請求,一般是比較困難的。這裡可以指定上游代理,前提是你已經安裝了代理軟體

--mode "upstream:http://localhost:7890@$proxy_port"

4、長連線支援

一般手機的長連線抓包是比較麻煩的,比如使用 root 然後 tcpdump,使用 wireshark 進行分析。 裡面的內容是又多又亂。
這裡直接使用 wireguard 模式

5、外掛支援

官方外掛: doc.mitmproxy
github 外掛:github
這裡我舉例幾個:
1、上文中提到的解密,例子為
contentview
當然,解密邏輯需要自己寫
2、ssl 握手失敗的問題,可以直接讓它透過,以免影響正常功能測試
check_ssl_pinning
3、 新增一個新的 option 選項,自定義功能
options-simple
4、 常見 sql 漏洞檢測
xss_scanner

綜合來說,拿到請求,是可以為所欲為的。比如我自己做的幾個外掛:
解密、api 文件生成、弱網路模擬、響應碼檢查等

五、常見問題

如何安裝第三方 python 包?

pipx inject mitmproxy <package-name>

如何解決安卓 7.0 後 ssl pin 的問題?

只提供思路,具體的可以查一下,也可以討論
方法一:官方文件-Certificate Pinning
方法二:使用安卓 7.0 以下裝置或模擬器
方法三:root+magisk

記憶體使用過大的問題?

1、使用定時指令碼重啟
2、使用-w 寫入檔案

[編輯中]

相關文章