關(guān)于iOS移動(dòng)端HTTPS抓包的教程雌贱,網(wǎng)上有很多确垫,很多是針對(duì)過(guò)時(shí)的平臺(tái)或工具,步驟復(fù)雜帽芽,而且存在安全問(wèn)題。本文介紹截止到2017年末筆者認(rèn)為的最佳實(shí)踐翔冀。方法可遷移到其它工具和平臺(tái)导街。
原料
- Mac。本文以MacBook Pro Early 2013纤子,當(dāng)前最新版本macOS High Sierra 10.13.1為例搬瑰。
- WiFi或手機(jī)熱點(diǎn)款票。
- iOS設(shè)備。本文以iPhone 6泽论,當(dāng)前最新版本iOS 11.1.2為例艾少。
- Charles for macOS。本文以當(dāng)前最新版 v4.2.1為例翼悴。官方下載地址: https://www.charlesproxy.com/latest-release/download.do# 缚够。
原理
Mac上的Charles通過(guò)8888端口提供網(wǎng)絡(luò)代理服務(wù)。iPhone通過(guò)該代理訪問(wèn)網(wǎng)絡(luò)鹦赎,其網(wǎng)絡(luò)請(qǐng)求會(huì)被Charles截獲谍椅。對(duì)于未加密的http請(qǐng)求,可以直接看到請(qǐng)求和響應(yīng)的內(nèi)容古话;對(duì)于https雏吭,需要借用“中間人攻擊”的原理( https://en.wikipedia.org/wiki/Man-in-the-middle_attack )實(shí)現(xiàn)請(qǐng)求和響應(yīng)內(nèi)容的查看。
iOS的安全策略能有效阻止中間人攻擊陪踩,因此讓https抓包變得困難杖们。為有意放行Charles進(jìn)行的該“攻擊”,需要給iOS系統(tǒng)安裝一個(gè)根證書(shū)肩狂,讓它告訴系統(tǒng):“相信我摘完,這個(gè)響應(yīng)是合法的,你盡管拿去用婚温∶柩妫”
Charles提供了這樣一個(gè)根證書(shū)。在iOS設(shè)備上添加和信任它即可栅螟。
過(guò)程
Mac和iPhone連接上同一WiFi荆秦。如果WiFi有限制,可以簡(jiǎn)單地用另一部手機(jī)建立熱點(diǎn)力图。連上該WiFi后步绸,Mac和iPhone的IP應(yīng)該在同一網(wǎng)段,形如192.169.43.*吃媒;它們都應(yīng)該可以訪問(wèn)互聯(lián)網(wǎng)或要抓包的目標(biāo)網(wǎng)絡(luò)瓤介。
在iPhone上設(shè)置所連的WiFi,在“HTTP代理”處選擇“手動(dòng)”配置代理赘那,服務(wù)器設(shè)為Mac的IP地址刑桑,端口設(shè)為8888。
在Mac上打開(kāi)Charles募舟,它會(huì)在8888端口開(kāi)啟代理服務(wù)祠斧,并在iPhone首次連接時(shí)檢測(cè)到iPhone有請(qǐng)求要經(jīng)過(guò)它(如果有彈出是否允許,選“允許”)拱礁。
此時(shí)在iPhone上訪問(wèn)網(wǎng)頁(yè)琢锋,Charles會(huì)順序列出所有請(qǐng)求和響應(yīng)辕漂。對(duì)于未加密的http請(qǐng)求,可以直接看到請(qǐng)求和響應(yīng)的內(nèi)容吴超;對(duì)于https钉嘹,走下一步。
在Mac上的Charles中選擇菜單項(xiàng)"Help > SSL Proxying > Install Charles Root Certificate on a Mobile Device or Remote Browser" 鲸阻,彈出提示如:
Configure your device to use Charles as its HTTP proxy on 192.168.43.65:8888, then browse to chls.pro/ssl to download and install the certificate.
-
按上述指示跋涣,在iPhone的Safari中訪問(wèn) https://chls.pro/ssl ,如下選擇“允許”赘娄,按提示一步步安裝Charles根證書(shū)仆潮。
-
在iPhone的 ”設(shè)置 > 通用 > 關(guān)于本機(jī) >(最底下)證書(shū)信息設(shè)置“ 中啟用剛安裝的根證書(shū)。
-
之后遣臼,回到Mac上的Charles性置,對(duì)以鎖標(biāo)志的https請(qǐng)求,右鍵選擇“Enable SSL Proxying”揍堰,啟用對(duì)它的“中間人攻擊”鹏浅,即對(duì)流量進(jìn)行SSL“解密-展示-加密”操作,然后就可以看到和操作https流量了屏歹。下圖展示了對(duì)微信公眾號(hào)數(shù)據(jù)進(jìn)行抓包的結(jié)果隐砸。
總結(jié)
所述方法使用的是最新版本的iOS和Charles,相對(duì)網(wǎng)上大量總結(jié)的舊方法有兩點(diǎn)變化蝙眶。一是iOS的安全性進(jìn)一步提升季希,證書(shū)安裝好后還要在第7步進(jìn)行啟用,這點(diǎn)是以前沒(méi)有的幽纷。二是Charles變得更加好用和安全了式塌,安裝根證書(shū)不再是下載一個(gè)通用版本的根證書(shū),而是每個(gè)Charles安裝副本一個(gè)根證書(shū)友浸,這就避免了安裝通用的根證書(shū)的設(shè)備被其它人進(jìn)行真正的中間人攻擊的可能峰尝,畢竟我們窮,我們的設(shè)備可能無(wú)法做到只專(zhuān)用于開(kāi)發(fā)收恢。
所述方法使用的是Mac+Charles+iOS武学,但思想和過(guò)程可遷移到Win+Fiddler+Android以及類(lèi)似平臺(tái)和工具。
在研究過(guò)程中我們發(fā)現(xiàn)伦意,進(jìn)行了證書(shū)固定的應(yīng)用火窒,上述方法無(wú)能為力,因?yàn)閼?yīng)用根本不相信我們添加的證書(shū)驮肉,即使我們讓系統(tǒng)信任了它沛鸵。可以安全是可以去不斷增強(qiáng)的,關(guān)鍵看成本收益了曲掰。