首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

mitmproxy 實戰指南:從安裝到 HTTPS 抓包與腳本擴展全解析

     編輯:Java 綜合教學

前言:為什麼選擇 mitmproxy?

HTTP 代理在 Web 滲透測試與移動應用分析中佔據核心地位。Burp Suite、Fiddler、Charles 等圖形化工具固然強大,但當面對「公司內網與移動網絡隔離」、「需要在無界面的 VPS 上長期運行」或「想要靈活編寫自動化處理腳本」等場景時,命令行下的 mitmproxy 顯得更加輕量、靈活且極具擴展性。本文將系統梳理 mitmproxy 的原理、安裝、CA 證書部署、實戰操作與進階 API 擴展,助你快速上手這把「中間人攻擊神器」。

一、核心原理:正向代理與透明代理的 HTTPS 解密之道

mitmproxy 支持 正向代理 與 透明代理 兩種模式,均能處理 HTTP 與 HTTPS 流量。其核心在於動態生成偽造證書,完成中間人解密:

  • HTTP 正向代理:客戶端顯式設置代理,直接轉發明文請求。
  • HTTPS 正向代理:客戶端發送 CONNECT 請求建立隧道,mitmproxy 簽發偽造證書完成解密。
  • HTTP/HTTPS 透明代理:配合 iptables/REDRECT 實現無感知攔截,HTTPS 同樣依賴證書偽造。

HTTP 正向代理流程

HTTPS 正向代理流程

HTTP 透明代理流程

HTTPS 透明代理流程

二、環境搭建:在 Linux (Debian/Ubuntu) 上安裝 mitmproxy

mitmproxy 基於 Python,跨平台特性極佳。以下以 Debian 7 為例:

1. 準備 Python 與 pip

# 安裝編譯工具鏈與 Python 頭文件
apt-get install build-essential python-dev python-setuptools
# 安裝 pip
wget https://pypi.python.org/packages/source/p/pip/pip-1.4.1.tar.gz
tar -xzf pip-1.4.1.tar.gz && cd pip-1.4.1 && python setup.py install

2. 安裝依賴庫

# 核心依賴
sudo pip install netlib pyopenssl pyasn1 urwid pil lxml flask
# 可選:解碼/測試用
sudo pip install pyamf protobuf nose pathod countershape

3. 安裝 mitmproxy 本體

sudo pip install mitmproxy

安裝成功後將生成兩個可執行文件:

  • /usr/local/bin/mitmproxy —— 交互式控制台界面
  • /usr/local/bin/mitmdump —— 非交互式批量處理工具(類 tcpdump)

4. 常見安裝報錯修復

若遇到 pkg_resources.DistributionNotFound,升級 setuptools 與 pip 即可:

sudo easy_install --upgrade distribute
sudo easy_install --upgrade pip

三、CA 證書部署:讓客戶端信任偽造證書

首次運行 mitmproxy 會在 ~/.mitmproxy 生成四個證書文件:

文件名用途
mitmproxy-ca.pem私鑰(妥善保管)
mitmproxy-ca-cert.pemLinux/macOS/通用格式
mitmproxy-ca-cert.cerAndroid 專用
mitmproxy-ca-cert.p12Windows 專用(含私鑰)

各平台安裝要點

  • Firefox:偏好設定 → 隱私與安全 → 證書 → 查看證書 → 匯入 .pem → 勾選「信任此 CA 辨識網站」
  • Chrome/Windows:設定 → 隱私權與安全性 → 安全性 → 管理憑證 → 受信任的根憑證發佈機構 → 匯入 .p12 (Win) 或 .pem (Chrome)
  • macOS:雙擊 .pem → 關鍵字串訪問 → 永遠信任
  • iOS:將 .pem 郵寄/上傳至手機 → 點擊安裝描述文件 → 設定 → 通用 → 關於 → 憑證信任設定 → 開啟完全信任
  • Android:將 .cer 放入 SD 卡根目錄 → 設定 → 安全 → 從儲存裝置安裝憑證
  • iOS 模擬器:使用 ADVTrustStore 工具注入 TrustStore.sqlite3

四、實戰啟動與常見坑點

1. 啟動命令

mitmproxy -b 0.0.0.0 -p 8080   # 監聽所有介面的 8080 端口

2. 解決「UTF console environment」報錯

VPS 預設 locale 為 POSIX,需修改為 UTF-8:

vim /etc/default/locale
# 修改為 LANG=en_US.UTF-8
locale-gen
echo "export LANG=en_US.UTF-8" >> /etc/profile
echo "export LANG=en_US.UTF-8" >> /etc/bash.bashrc
source /etc/profile && source /etc/bash.bashrc

3. 客戶端配置代理

手機/瀏覽器/PC 將 HTTP/HTTPS 代理指向 VPS_IP:8080,即可在 mitmproxy 界面看到明文流量。

五、交互式界面核心操作速查

mitmproxy 界面截圖

按鍵動作
↑/↓選中請求
Enter進入請求詳情
e進入編輯模式
q / Esc返回/保存退出
a新增字段 (Tab 切換)
r重放當前請求
w保存流量到文件

編輯模式下可修改:query、path、url、header、form、raw body、method 等所有關鍵字段。

六、mitmdump:非交互式批量處理與腳本化

mitmdump 是自動化測試的利器,常用參數:

  • -r file 讀取流量文件
  • -w file 寫入流量文件
  • -n 不啟動代理(離線處理)
  • -c 重放客戶端請求
  • -s script.py 載入 Python 腳本處理流量

範例:過濾微博流量並重放

# 1. 從 all.data 提取含 weibo 的流量存入 weibo.data
mitmdump -nr all.data -w weibo.data "~u weibo"

# 2. 重放 weibo.data 中的請求
mitmdump -nc weibo.data

範例:自定義腳本給響應添加 Header

# add_header.py
def response(context, flow):
    flow.response.headers["X-Custom-Header"] = ["mitmproxy"]
mitmdump -ns add_header.py -r infile -w outfile

七、進階擴展:基於 libmproxy 的二次開發

mitmproxy 將核心邏輯封裝為 libmproxy 庫,開發者可像搭積木一樣構建專屬工具。查看 API 文檔:

pydoc libmproxy

典型應用場景:自動化測試平台接入、流量異常檢測、協議模糊測試、敏感數據脫敏代理等。

八、遺留問題與社群交流

作者提到 mitmdump -S outfile 重放 HTTP 響應時卡死,原因未明。若你有解決方案或使用心得,歡迎在技術社群交流分享。


總結:mitmproxy 憑藉強大的 HTTPS 解密能力、極簡的命令行體驗與豐富的 Python 擴展接口,成為移動端抓包、自動化測試與安全審計的首選利器。掌握其安裝、證書部署、交互操作與腳本開發,將大幅提升你的流量分析效率。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved