來(lái)自公眾號(hào) : DeveloperPython
閱讀本文需要7.66分鐘
抓包
其實(shí)很多程序員都不陌生了冀宴,但是真正抓過(guò)包灭贷、分析過(guò)的又有幾個(gè)。
本文將介紹幾款簡(jiǎn)單易用的抓包工具略贮,并針對(duì)目前互聯(lián)網(wǎng)主流的Http和Https網(wǎng)絡(luò)包進(jìn)行抓取并分析甚疟,同時(shí)分享手機(jī)抓包的技術(shù)
1. Charles、Fiddler和Wireshark
2. Http逃延、Https及其原理
3. 手機(jī)抓包
4. Charles的附加功能
一览妖、抓包工具
Fiddler
- 是之前我用Window電腦的時(shí)候,特別喜歡用的工具揽祥,而且當(dāng)時(shí)的Fiddler足以滿足的我簡(jiǎn)單的抓包工作讽膏,現(xiàn)在也應(yīng)該更新到Fiddler3了,如果用Windows的朋友可以用Fiddler3進(jìn)行抓包盔然。
Charles
- 自從換了Mac之后我就喜歡上了這個(gè)工具桅打,不過(guò)Charles在Windows上同樣也有。
Wireshark
- 這個(gè)我不是怎么經(jīng)常用愈案,這個(gè)抓包工具可以詳細(xì)的看到網(wǎng)絡(luò)請(qǐng)求的三次握手挺尾,并且可支持spdy、tcp等等的網(wǎng)絡(luò)協(xié)議抓包站绪,當(dāng)然其他兩個(gè)是不支持的遭铺。
我將以Charles為例分別抓取Http和Https包:
下載
Mac破解版下載地址:http://download.csdn.net/detail/m694449212/9770583
Win破解版下載地址:http://download.csdn.net/detail/m694449212/9770589
官網(wǎng)鏈接,需要購(gòu)買(mǎi)LisenseKey:https://www.charlesproxy.com/
打開(kāi)界面如下:
第二恢准、Http魂挂、Https包
2.1、Http包
2.1.1 清理Charles列表馁筐,讓抓包更加清晰
2.1.2 以我的CSDN為例(m694449212),通過(guò)Chrome點(diǎn)擊‘我的博客’涂召,抓到需要的包
從中我們過(guò)濾出m694449212的博客包,但是這個(gè)過(guò)濾的過(guò)程需要我們?nèi)ヒ粋€(gè)個(gè)找(當(dāng)然如果你的經(jīng)驗(yàn)比較足或者英語(yǔ)比較好的話敏沉,可以發(fā)現(xiàn)其實(shí)就是blog.csdn.net的包)
2.1.3 分析包
2.1.4 Reuqest
其中比較重要的是Cookie
,網(wǎng)站為了辨別用戶身份果正、進(jìn)行 session 跟蹤而儲(chǔ)存在用戶本地終端上的數(shù)據(jù)(通常經(jīng)過(guò)加密).
同時(shí)Cookie在我們爬蟲(chóng)的時(shí)候也是一個(gè)必不可少的東西,那么如何自動(dòng)化獲取Cookie呢盟迟?后面會(huì)講解到秋泳。
2.1.5 Response
獲取Cookie,通過(guò)我以往的經(jīng)驗(yàn):
a. 獲取Cookie的時(shí)候首先需要保證我們的瀏覽器環(huán)境是干凈的,我說(shuō)的干凈其實(shí)就是清楚當(dāng)前瀏覽器保存的Cookie
攒菠,并重啟瀏覽器迫皱。
b. 重啟之后我們?cè)L問(wèn)www.csdn.net,當(dāng)前Host的Request中就不包含Cookie辖众,那么Cookie在哪呢卓起,其實(shí)細(xì)心點(diǎn)的會(huì)發(fā)現(xiàn)Cookie在Response的Headers->set-cookie
中和敬,并在下次請(qǐng)求中使用到。
c. 那么當(dāng)我們登錄操作并攜帶Cookie在請(qǐng)求Headers中既绩,那么登錄成功之后該Cookie就會(huì)生效概龄。之后我們的所有請(qǐng)求攜帶該Cookie就會(huì)是一個(gè)正常的請(qǐng)求还惠,并能拿到需要的結(jié)果饲握。
關(guān)于某些請(qǐng)求攜帶sign參數(shù)的,后面的文章我會(huì)講解到破解Sign函數(shù)(其實(shí)有時(shí)候不是直接的破解而是函數(shù)的Hook,有興趣的可以提前了解下Android或者iOS的Hook蚕键,通過(guò)IDA找到sign函數(shù),并使用cycript調(diào)用)救欧,之后的文章我會(huì)以國(guó)外的知名App Instagram為例,Hook它的簽名函數(shù)锣光。
來(lái)個(gè)美女提提神(圖片來(lái)自Instagram的Https包數(shù)據(jù))笆怠,繼續(xù)往下看
2.2、Https包
2.2.1誊爹、Https簡(jiǎn)介
SSL相信大家都不陌生蹬刷。其實(shí)Https就是在Http基礎(chǔ)上通過(guò)SSL協(xié)議進(jìn)行加密之后的網(wǎng)絡(luò)傳輸。
并通過(guò)非對(duì)稱和對(duì)稱加密算法來(lái)對(duì)密碼和數(shù)據(jù)進(jìn)行加密频丘。具體看下圖:
1. Client明文將自己支持的一套加密規(guī)則办成、一個(gè)隨機(jī)數(shù)(Random_C)發(fā)送給服務(wù)器.
2. Server返回自己選擇的加密規(guī)則、CA證書(shū)(服務(wù)器地址搂漠、加密公鑰迂卢、以及證書(shū)頒發(fā)機(jī)構(gòu))、外加一個(gè)通過(guò)加密規(guī)則和HASH算法生成的隨機(jī)數(shù)(Random_S)
3. Client收到Server的消息之后會(huì):
a:驗(yàn)證證書(shū)(地址是否是正在訪問(wèn)的和機(jī)構(gòu)是否合法)桐汤、
b:自己生成一個(gè)隨機(jī)的密碼(Pre_master)并使用CA證書(shū)中的加密公鑰進(jìn)行加密(enc_pre_master)而克、
c:計(jì)算出一個(gè)對(duì)稱加密的enc_key,通過(guò)Random_C、Random_S怔毛、Pre_master员萍、
d:生成握手信息:使用約定好的Hash算法計(jì)算握手信息,并通過(guò)enc_key和約定好的加密算法對(duì)消息進(jìn)行加密
4. Client將enc_pre_master拣度、加密之后的握手消息發(fā)送給Server
5. Server收到消息之后
a: 收到enc_pre_master之后碎绎,會(huì)通過(guò)私鑰進(jìn)行解密(非對(duì)稱加密算法)得到pre_master
b: 通過(guò)pre_masrer、Random_C蜡娶、Random_S計(jì)算得到協(xié)商密碼 enc_key
c: 通過(guò)enc_key解密握手信息混卵,驗(yàn)證HASH是否和客戶端發(fā)來(lái)的一致
d: 生成握手信息同樣適用enc_key和約定好的加密算法
6. Server發(fā)送握手信息給Client,也就是說(shuō)Server驗(yàn)證通過(guò)了Client,并再次發(fā)送消息給Client讓其驗(yàn)證自己
7. 客戶端拿到握手信息解密,握手結(jié)束窖张∧凰妫客戶端解密并計(jì)算握手消息的HASH,如果與服務(wù)端發(fā)來(lái)的HASH一致宿接,此時(shí)握手過(guò)程結(jié)束赘淮。
8. 正常加密通信辕录,握手成功之后,所有的通信數(shù)據(jù)將由之前協(xié)商密鑰enc_key及約定好的算法進(jìn)行加密解密梢卸。
其中Https使用到的加密算法如下:
- 非對(duì)稱加密算法:RSA走诞,DSA/DSS
- 對(duì)稱加密算法:AES,RC4蛤高,3DES
- HASH算法:MD5蚣旱,SHA1,SHA256
2.2.2戴陡、 Charles抓取Https原理
Charles本身就是一個(gè)協(xié)議代理工具塞绿,在上篇的Https原理上,客戶端和服務(wù)器的所有通信都被Charles捕獲到恤批。
如下圖:
主要步驟如下:
1. Charles捕獲Client發(fā)送給Server請(qǐng)求异吻,并偽裝成客戶端向服務(wù)器發(fā)起握手請(qǐng)求
2. 服務(wù)器響應(yīng),Charles獲取到服務(wù)器的CA證書(shū)喜庞,并用根證書(shū)公鑰進(jìn)行解密诀浪,獲取到服務(wù)器的CA證書(shū)公鑰。然后Charles偽造自己的CA證書(shū)延都,偽裝為服務(wù)器的CA證書(shū)發(fā)送給客戶端
3. 客戶端收到返回之后雷猪,和上面講到的過(guò)程一樣,證書(shū)校驗(yàn)窄潭、生成密碼春宣、并使用Charles偽裝的證書(shū)公鑰進(jìn)行加密,并生成 Https通信的協(xié)商密碼enc_key
4. Charles捕獲到Client發(fā)來(lái)的重要信息嫉你,并使用自己偽造的證書(shū)私鑰將密文解密月帝,獲取到enc_key.然后Charles使用服務(wù)器之前返回的證書(shū)公鑰對(duì)明文進(jìn)行加密并發(fā)送給服務(wù)器
5. 去之前一樣,服務(wù)器收到消息之后幽污,用私鑰解開(kāi)并建立信任嚷辅,然后發(fā)送加密的握手信息。
6. Charles截獲服務(wù)器發(fā)來(lái)的握手密文距误,并用對(duì)稱密鑰解開(kāi)簸搞,再用自己偽造證書(shū)的私鑰加密傳給客戶端
7. 客戶端拿到加密信息后,用公鑰解開(kāi)准潭,驗(yàn)證HASH趁俊。握手過(guò)程正式完成,客戶端與服務(wù)器端就這樣建立了”信任“刑然。
- 其實(shí)在整個(gè)過(guò)程中寺擂,最重要的就是enc_key,由于Charles從一開(kāi)始偽造并獲取了enc_key,所以在整個(gè)通信過(guò)程中Charles充當(dāng)?shù)谌撸行畔?duì)其來(lái)講都是透明的怔软。
- 其次就是根證書(shū)垦细,這是https一個(gè)信任鏈的開(kāi)始。這也是Charles偽造的CA證書(shū)能獲得雙方信任的關(guān)鍵挡逼。
2.2.3括改、演示Charles抓取Https
原理清楚之后,其實(shí)操作就很簡(jiǎn)單了家坎,操作的核心點(diǎn)就是根證書(shū)嘱能。
-
安裝根證書(shū)(Charles Root Certificate)
-
讓系統(tǒng)信任該證書(shū)
-
接下來(lái)將需要抓的Https鏈接加入到CharlesSSL代理規(guī)則中,443是Https的默認(rèn)端口
當(dāng)然你也可以像我最后一條一樣乘盖,使用 *:443 來(lái)抓取所有https的包焰檩。
-
通過(guò)瀏覽器訪問(wèn)自己要抓的鏈接憔涉,這樣所有的Https都可以像Http一樣明文展示都我們面前订框。
第三、手機(jī)抓包
手機(jī)抓包的原理其實(shí)也很簡(jiǎn)單兜叨,讓手機(jī)和抓包工具處于同一局域網(wǎng)穿扳,并將手機(jī)的WifiProxy手動(dòng)代理到電腦的Ip和Charles設(shè)置的抓包端口上,具體操作可在網(wǎng)上找到,具體見(jiàn)http://blog.csdn.net/richer1997/article/details/52198024
我這邊主要講一下手機(jī)端Https包的抓取国旷,其實(shí)和瀏覽器的抓取一樣:
-
首先需要安裝Charles的根證書(shū)到手機(jī)上矛物。
-
點(diǎn)擊之后,會(huì)彈出讓你在手機(jī)上配置代理到對(duì)應(yīng)Ip和端口跪但,之后通過(guò)手機(jī)瀏覽器打開(kāi)chls.pro/ssl
使用手機(jī)訪問(wèn)該鏈接之后履羞,會(huì)自動(dòng)被識(shí)別為證書(shū),并跳轉(zhuǎn)到:(當(dāng)然我這里已經(jīng)是安裝過(guò)的屡久,未安裝的點(diǎn)擊右上角安裝即可)
- 之后就類似與PC端抓Https包原理一樣忆首,手機(jī)端的證書(shū)被作為根證書(shū)使用,并通過(guò)Charles拿到enc_key.將所有通信過(guò)程透明化被环。
第四糙及、Charles的附加功能
在我剛開(kāi)始使用Charles的時(shí)候,我只是用來(lái)簡(jiǎn)單的抓抓接口筛欢,直到我看到別人使用BurpSuite自定義請(qǐng)求數(shù)據(jù)并Repeat的時(shí)候浸锨,我在考慮Charles是否也有這種功能。當(dāng)然不出我所料版姑,Charles也是支持的柱搜。
在對(duì)應(yīng)接口上點(diǎn)擊右鍵,出現(xiàn)菜單剥险,其中我經(jīng)常使用到的就是Compose聪蘸、Repeat和RepeatAdvanced
Compose:可直接自定義對(duì)應(yīng)的請(qǐng)求,并執(zhí)行該請(qǐng)求。這個(gè)對(duì)我們抓包用處很大宇姚。我們可以從中得到該接口的必填參數(shù)等等的匈庭。
Repeat:很簡(jiǎn)單就是執(zhí)行一次重復(fù)請(qǐng)求操作
Repeat Advanved:重復(fù)請(qǐng)求的高級(jí)操作,可自定義重復(fù)的次數(shù)浑劳、每隔多少秒執(zhí)行阱持。這個(gè)功能對(duì)于我們的接口的壓測(cè)是很有用的。
除了這幾個(gè)我常用的功能魔熏,當(dāng)然Charles還有更多更加實(shí)用的功能衷咽,如過(guò)濾、排序等等蒜绽。還需要大家去自行使用镶骗,發(fā)現(xiàn)更多更好、并適用于自己的功能躲雅。
小結(jié)
抓包的用處其實(shí)很大鼎姊,有時(shí)候可以用來(lái)調(diào)試我們的接口、有時(shí)候也可以用來(lái)做一些對(duì)工作有益的事相赁,當(dāng)然并"不建議"用來(lái)攻擊別人的網(wǎng)絡(luò)相寇。
掃描‘二維碼’公告號(hào),將自動(dòng)執(zhí)行代碼
生活不止眼前的茍且钮科,還有手下的代碼唤衫、和嘴上的扯淡
個(gè)人博客: https://www.alision.com