HTTPS劫持
HTTPS劫持
https劫持分為代理劫持和透明劫持。
一、代理劫持https
這種https代理劫持在我們平時是用的很多的,比如Burp suite和Fiddler啟動代理服務器,瀏覽器配置一個代理就可以抓包進行調試、漏洞測試了。
1.1必備知識
1.1.1 SNI
其中SNI包含了在ClientHello中,在TLS(SSL的升級版)開始支持設置 Server Name(網站的域名)。因為現在一個https服務器可能存在多個域名,而在 TLS 握手信息中并沒有攜帶客戶端要訪問的目標地址,則無法確定該和那臺主機通信,而SNI有目標主機的域名。如下圖(1):
圖1 SNI圖
1.1.2 Pstream Certificates(上游證書)
當mitmproxy收到發往SSL保護服務的連接時,它會在讀取其請求數據之前凍結該連接,并與上游服務器建立連接以“嗅探”其 SSL 證書的內容。獲得的信息 Common Name(通用名稱)和Subject Alternative Names(主題備用名稱)然后用于生成攔截證書,該證書被發送到客戶端以便連接可以繼續。即使客戶端僅指定了 IP 地址而不是主機名,也可以讓我們無縫地生成正確的證書。這也意味著我們不需要嗅探額外的數據來在透明模式下生成證書。
1.2 https透明劫持基本思想
基本思想是對客戶端假裝是服務器,對服務器假裝是客戶端,而我們坐在中間解碼來自雙方的流量。棘手的部分是 證書頒發機構系統旨在通過允許受信任的第三方對服務器的證書進行加密簽名以驗證它們是合法的,從而完全防止這種攻擊。如果此簽名不匹配或來自不受信任的一方,則安全客戶端將簡單地斷開連接并拒絕繼續。我們對這個難題的回答是我們自己成為受信任的證書頒發機構。代理服務器包括一個完整的 CA 實現,可以動態生成攔截證書。為了讓客戶相信這些證書,我們手動可信CA。比如我們在使用burp suite 和fillder了都要安裝相應的CA證書。
1.3 https透明劫持基本流程
如圖(2):
1.先通過一個簡單的HTTP Connect請求來連接代理服務器;
2.代理服務器返回200,表明Connect管道建立完畢;
3.Client開始進行TLS連接,中間人通過SNI來獲知需要連接的目標誰;
4.代理服務器(圖中用Mitmproxy)連接真正的服務器;
5.代理服務器 開始根據SNI和CA自動簽發假的服務端證書,并返回給用戶,并進行握手;
6.握手成功,客戶端開始發送HTTP請求;
7. 代理服務器開始做用戶到真正服務器的流量互相轉發(可劫持)。
1.4 服務器的名稱問題
我們知道要在攔截證書中使用的域名-客戶端將驗證證書是否適用于它所連接的域,如果不是這種情況,則中止連接。
那問題來了,在用域名進行劫持是沒有問題的,但是用IP地址訪問時,沒有目標的域名,就沒有辦法進行劫持,在Mitmproxy有一個巧妙的機制,進行上游證書嗅探,一旦我們看到CONNEC請求,我們就暫停對話的客戶端部分,并同時啟動到服務器的連接。我們完成與服務器的TLS握手,并檢查它使用的證書。現在,我們使用上游證書中的通用名稱為客戶端生成虛擬證書。其中有時,證書通用名稱實際上不是客戶端連接到的主機名。這是因為證書中的可選主題備用名稱字段允許指定任意數量的備用域。如果預期域與其中任何一個匹配,客戶端將繼續,即使域與證書CN不匹配。因為當我們從上游證書中提取 CN 時,我們也提取了 SAN(是 SSL 標準 x509 中定義的一個擴展。使用了SAN字段的SSL證書,可以擴展此證書支持的域名,使得一個證書可以支持多個不同域名的解析),并將它們添加到生成的虛擬證書中。
二、透明代理http
2.1 https代理劫持基本思想
當使用透明代理時,連接被重定向到網絡層的代理,不需要任何客戶端配置.但是需要傳輸層劫持,比如bettercap先要進行arp欺騙,才能使用http代理。
2.2 https代理劫持基本流程
如圖(3):
1.客戶端與服務器建立連接;
2.路由器將連接重定向到代理服務器(圖中用Mitmproxy),它通常偵聽同一主機的本地端口。代理服務器然后咨詢路由機制以確定原始目的地是什么;
3.客戶端認為它正在與遠程服務器通信,并啟動TLS連接。它使用SNI來指示它所連接的主機名;
4.代理服務器連接到服務器,并使用客戶端指示的SNI主機名建立TLS連接;
5.服務器使用匹配的證書進行響應,其中包含生成攔截證書所需CN和SAN值;
6.代理服務器生成攔截證書,并繼續在步驟3中暫停的客戶端TLS握手;
7.客戶端通過已建立的 TLS 連接發送請求;
8.代理服務器通過步驟 4 中啟動的TLS連接將請求傳遞給服務器。
2.3 用IP地址進行透明代理問題
當用IP直接訪問的時候,沒有SNI,就沒有目標地址的域名,當目標IP下有多個域名,從而無法進行劫持,現有市場上主要https劫持工具沒有解決此問題,從理論下我們可以通過IP反查域名進行,然后按照域名的常用性進行排序,一個個去嘗試,當遇到目標域名就停下。
總結
- 上一篇: Educoder——Java入门:方法的
- 下一篇: 安卓手机投屏软件_苹果安卓手机投屏之(一