如何使用mitmproxy來讀取和修改

HTTPS流量

【翻譯:2013年的文章,也就是4年前】

How To: Use mitmproxy to read and modify HTTPS traffic - Philipp‘s Tech Blog

在自己的機器上捕獲HTTP和HTTPS流量非常簡單:使用Wireshark或Firebug等工具,

嗅探

本地連線只需幾秒鐘。 但是若要捕獲+更改網路中其他計算機(如智慧手機或其他膝上型電腦)的HTTP / HTTPS流量並不容易。

首先,特別是嗅探SSL加密的HTTPS連線似乎是不可能的。 但是呢,我們可以用mitmproxy以非常簡單和直接的方式實現這個目的。

這個小教程顯示瞭如何使用mitmproxy來透明地嗅探和改變你的手機或網路中的其他裝置的(!)HTTPS連線。

內容

1。 原理

1。1。 攻擊HTTP連線

1。2。 攻擊HTTPS連線

1。3。 更多細節

2。安裝並執行mitmproxy

2。1。 安裝mitmproxy

2。2。 在手機中安裝mitmproxy CA證書

2。3。 啟用IP轉發和埠重定向

2。4。 啟動mitmproxy

2。5。 更改手機的標準閘道器

2。6。 捕獲並更改HTTP / HTTPS請求和響應

2。7。 停止mitmproxy並取消iptables更改

1。 原理

Mitmproxy是一個開源代理應用程式,允許任何HTTP(S)

客戶端

(如移動或桌面瀏覽器)和使用典型的

中間人

攻擊(MITM)的Web伺服器之間的HTTP和HTTPS連線進行攔截。

與其他代理(如Squid)類似,它接受來自客戶機的連線並將其轉發到目標伺服器。 然而,雖然其他代理通常透過快取來集中於內容過濾或速度最佳化,但是mitmproxy的目標是讓攻擊者實時監控,捕獲和更改這些連線。

如何使用mitmproxy來讀取和修改HTTPS內容

如何使用mitmproxy來讀取和修改HTTPS內容

1。1。攻擊HTTP連線

對於未加密的HTTP連線,這是非常簡單的:mitmproxy接受來自HTTP客戶端的連線,例如手機瀏覽器,在螢幕上向攻擊者顯示請求(及其請求引數),並將請求轉發到目標Web

伺服器

攻擊者即將確認 - 也許在調整請求負載後有一點。

mitmproxy只是作為一箇中間人:對客戶端來說,看起來好像mitmproxy伺服器只是簡單地中繼它的連線(像您的路由器或ISP的伺服器)。

而對於伺服器來說,它看起來像是客戶端的。

1。2。攻擊HTTPS連線

雖然攻擊未加密的HTTP流量可以完成,而無需處理X。509證書和證書頒發機構(CA),SSL加密的HTTPS連線會加密客戶端和伺服器端到端的每個請求和響應。而且由於傳輸的資料是用共享金鑰加密的,所以中間人(或代理)不能對交換的資料包進行解密。

當客戶端開啟到安全Web伺服器的SSL / TLS連線時,它透過檢查兩個條件來驗證伺服器的身份:首先,它檢查其證書是否已被客戶端已知的CA簽名。其次,它確保伺服器的通用名稱(CN,也是:主機名)與其連線的名稱相匹配。如果兩個條件均為真,客戶端假定連線是安全的。

為了能夠窺探連線,mitmproxy充當證書頒發機構,但不是一個非常值得信賴的機構:mitmproxy不會向實際的人員或組織頒發證書,而是動態地生成證書到連線所需的任何

主機名

如果客戶想要連線到

https://www。

facebook。com

,則mitmproxy會為“www。facebook。com”生成證書,並使用自己的CA進行簽名。如果客戶端信任此CA,則上述兩個條件均為真(可信CA,同一CN)

- 這意味著客戶端相信

mitmproxy伺服器

實際上是“www。facebook。com”。下圖顯示了此場景的請求/響應流程。這種機制稱為透明HTTPS代理。(Fiddle https proxy也是這樣用的)

為了保證這類攻擊成功,必須滿足一些條件:

Mitmproxy作為標準閘道器(HTTP和HTTPS):對於HTTP和HTTPS代理,執行mitmproxy的伺服器當然必須能夠攔截IP資料包 - 這意味著它必須位於

資料包路徑

的某處。 實現此目的的最簡單方法是將客戶端裝置中的預設閘道器更改為mitmproxy伺服器地址。

可信的mitmproxy CA(僅限HTTPS):要使HTTPS代理工作,客戶端必須知道(並信任!)mitmproxy CA,即必須將CA

金鑰檔案

新增到客戶端的信任儲存。

1。3。 更多細節

如果描述不夠詳細:在專案的官方網站上,有一個關於mitmproxy如何工作以及其不同模式的mitmproxy的解釋。

http://

mitmproxy。org/doc/howmi

tmproxy。html

mitmproxy - home

2。安裝並執行mitmproxy

在這個小小的理論會話之後,讓我們下定決心。

2。1。安裝mitmproxy

mitmproxy的安裝非常簡單,因為它是使用Python包管理系統(pip)打包的。 apt-get可以安裝其他的mitmproxy依賴項:

apt-get install python-pyasn1 python-flask python-urwid python-dev libxml2-dev libxslt-dev libffi-dev

pip install mitmproxy

2。2。在手機中安裝mitmproxy CA證書

接下來,您需要在要捕獲/更改HTTPS連線的裝置中安裝mitmproxy生成的CA證書。這可以是桌面瀏覽器或手機(Android,iOS,。。。)。 mitmproxy文件有一個很好的部分,告訴你如何做到這一點。

如何使用mitmproxy來讀取和修改HTTPS內容

如何使用mitmproxy來讀取和修改HTTPS內容

如何使用mitmproxy來讀取和修改HTTPS內容

如何使用mitmproxy來讀取和修改HTTPS內容

如何使用mitmproxy來讀取和修改HTTPS內容

如何使用mitmproxy來讀取和修改HTTPS內容

以下是摘要:(Android)

將位於〜/ 。mitmproxy /

mitmproxy-ca-cert。cer

的證書上傳到您的Android裝置的/sdcard/Download/mitmproxy-ca-cert。cer。

轉到設定,安全性,然後單擊“從裝置儲存安裝”

輸入“

mitmproxy-ca-cert

”(無後綴!),然後單擊“確定”

現在點選“可信憑證”並選擇“使用者”標籤。證書現在應該出現在列表中。

2。3。 啟用IP轉發和埠重定向

mitmproxy應用程式內部執行在TCP埠8080上,但外部必須監聽埠80 / HTTP和443 / HTTPS。 因此,一般IP轉發(系統必須作為路由器),並且從8080到80和443的重定向對於所有到達的IP分組是必需的。

iptables的“nat”表可以很容易地做到這一點。 這也在mitmproxy手冊的Linux部分中描述。

sysctl -w net。ipv4。ip_forward=1

iptables -t nat -A PREROUTING -i eth0 -p tcp ——dport 80 -j REDIRECT ——to-port 8080

iptables -t nat -A PREROUTING -i eth0 -p tcp ——dport 443 -j REDIRECT ——to-port 8080

我不清楚為什麼應用程式不是繫結到埠80和443埠,但這是現狀,用就是了。

2。4。 啟動mitmproxy

如上所述,mitmproxy在埠8080上執行,但也需要繫結80和443,所有三個埠不能被任何其他應用程式同時使用。 所以只需停止可能阻止這些埠的任何東西(Apache Web伺服器,Tomcat,Glassfish等)。 如果您不確定,請檢視

netstat -ntap

重要的注意事項:mitmproxy具有選項“-p”,它允許您選擇與8080不同的埠。當我嘗試此選項時,此選項對我來說不起作用。 雖然它在給定的埠聽,但沒有請求被攔截。 顯示器保持空白。 不幸的是,我花了三個小時找這個原因。

要實際啟動mitmproxy,只需執行以下命令:

mitmproxy -T ——host

你會看到一個空白的黑色螢幕,底部有一個藍色的條形碼,沒有任何事情會發生,因為您的手機(或瀏覽器)尚未透過mitmproxy進行通訊。 熟悉使用者介面,閱讀官方網站上的文件,然後輸入幫助頁面。

如何使用mitmproxy來讀取和修改HTTPS內容

如何使用mitmproxy來讀取和修改HTTPS內容

2。5。 更改手機的標準閘道器

為了能夠窺探您的手機(或瀏覽器)HTTP / HTTPS連線,您需要將標準閘道器更改為mitmproxy伺服器的IP地址。

您可以在Android上執行此操作,如下所示:

如何使用mitmproxy來讀取和修改HTTPS內容

如何使用mitmproxy來讀取和修改HTTPS內容

轉到設定,Wi-Fi並長按所連線的網路。

如何使用mitmproxy來讀取和修改HTTPS內容

如何使用mitmproxy來讀取和修改HTTPS內容

選擇“修改網路配置”。

選中“顯示高階選項”,將IP設定設定為“靜態”,並手動將閘道器地址更改為mitmproxy伺服器地址。 點選“儲存”。

2。6。 捕獲並更改HTTP / HTTPS請求和響應

更改設定後,開始與裝置進行互動(轉到facebook。com,更新您的WhatsApp狀態,開啟瀏覽器)。 如果一切正常,您應該在mitmproxy螢幕上看到很多HTTP和HTTPS(!)請求。

如何使用mitmproxy來讀取和修改HTTPS內容

如何使用mitmproxy來讀取和修改HTTPS內容

您可以使用箭頭鍵上下導航。 如果你喜歡,按返回鍵更詳細地檢視請求。

您會注意到,沒有機會更改任何請求。 發生後你可以簡單地看看他們。 要實際擷取,更改然後傳送請求(或響應),您必須設定一個擷取過濾器。 要這樣做,請按i並輸入一個過濾器表示式,例如“facebook。com”(攔截其URL中包含“facebook。com”的所有請求)或簡單地“。*”(擷取所有請求/響應)。

如何使用mitmproxy來讀取和修改HTTPS內容

如何使用mitmproxy來讀取和修改HTTPS內容

在UI中,被檢測的流將顯示為橙色。 在您接受(不管或不編輯它們)之前,它們將不被進一步處理。 要接受流量,請按a。 要接受所有持有流量,請按A。

如何使用mitmproxy來讀取和修改HTTPS內容

如何使用mitmproxy來讀取和修改HTTPS內容

也可以透過按返回鍵更詳細地檢查擷取的流。 然而,與之前相反,也可以透過按e鍵進行編輯。 根據您選擇的模式,您可以編輯請求的不同部分:標題,正文等 - 使用vim或其他編輯器。

2。7。 停止mitmproxy並取消iptables更改

在停止mitmproxy之前,請確保您不想儲存任何流。 如果你要儲存那麼用w 若要退出,請按q然後按y。

要撤消我們之前做過的iptables更改,只需鍵入iptables -t nat -F(flush / delete整個表)。 如果您有任何其他’nat‘表條目,您可能需要逐個刪除條目。 如果不確定,請先檢查

iptables -t nat

-L。

如果需要,也可以透過鍵入sysctl -w net。ipv4。ip_forward = 0撤銷IP轉發設定。