來自公眾號 : DeveloperPython
閱讀本文需要7.66分鐘
抓包
其實很多程序員都不陌生了,但是真正抓過包、分析過的又有幾個。
本文將介紹幾款簡單易用的抓包工具,并針對目前互聯(lián)網(wǎng)主流的Http和Https網(wǎng)絡(luò)包進行抓取并分析,同時分享手機抓包的技術(shù)
1. Charles、Fiddler和Wireshark
2. Http、Https及其原理
3. 手機抓包
4. Charles的附加功能
一、抓包工具
Fiddler
- 是之前我用Window電腦的時候,特別喜歡用的工具,而且當時的Fiddler足以滿足的我簡單的抓包工作,現(xiàn)在也應(yīng)該更新到Fiddler3了,如果用Windows的朋友可以用Fiddler3進行抓包。
Charles
- 自從換了Mac之后我就喜歡上了這個工具,不過Charles在Windows上同樣也有。
Wireshark
- 這個我不是怎么經(jīng)常用,這個抓包工具可以詳細的看到網(wǎng)絡(luò)請求的三次握手,并且可支持spdy、tcp等等的網(wǎng)絡(luò)協(xié)議抓包,當然其他兩個是不支持的。
我將以Charles為例分別抓取Http和Https包:
下載
Mac破解版下載地址:http://download.csdn.net/detail/m694449212/9770583
Win破解版下載地址:http://download.csdn.net/detail/m694449212/9770589
官網(wǎng)鏈接,需要購買LisenseKey:https://www.charlesproxy.com/
打開界面如下:
第二、Http、Https包
2.1、Http包
2.1.1 清理Charles列表,讓抓包更加清晰
2.1.2 以我的CSDN為例(m694449212),通過Chrome點擊‘我的博客’,抓到需要的包
從中我們過濾出m694449212的博客包,但是這個過濾的過程需要我們?nèi)ヒ粋€個找(當然如果你的經(jīng)驗比較足或者英語比較好的話,可以發(fā)現(xiàn)其實就是blog.csdn.net的包)
2.1.3 分析包
2.1.4 Reuqest
其中比較重要的是Cookie
,網(wǎng)站為了辨別用戶身份、進行 session 跟蹤而儲存在用戶本地終端上的數(shù)據(jù)(通常經(jīng)過加密).
同時Cookie在我們爬蟲的時候也是一個必不可少的東西,那么如何自動化獲取Cookie呢?后面會講解到。
2.1.5 Response
獲取Cookie,通過我以往的經(jīng)驗:
a. 獲取Cookie的時候首先需要保證我們的瀏覽器環(huán)境是干凈的,我說的干凈其實就是清楚當前瀏覽器保存的Cookie
,并重啟瀏覽器。
b. 重啟之后我們訪問www.csdn.net,當前Host的Request中就不包含Cookie,那么Cookie在哪呢,其實細心點的會發(fā)現(xiàn)Cookie在Response的Headers->set-cookie
中,并在下次請求中使用到。
c. 那么當我們登錄操作并攜帶Cookie在請求Headers中,那么登錄成功之后該Cookie就會生效。之后我們的所有請求攜帶該Cookie就會是一個正常的請求,并能拿到需要的結(jié)果。
關(guān)于某些請求攜帶sign參數(shù)的,后面的文章我會講解到破解Sign函數(shù)(其實有時候不是直接的破解而是函數(shù)的Hook,有興趣的可以提前了解下Android或者iOS的Hook,通過IDA找到sign函數(shù),并使用cycript調(diào)用),之后的文章我會以國外的知名App Instagram為例,Hook它的簽名函數(shù)。
來個美女提提神(圖片來自Instagram的Https包數(shù)據(jù)),繼續(xù)往下看
2.2、Https包
2.2.1、Https簡介
SSL相信大家都不陌生。其實Https就是在Http基礎(chǔ)上通過SSL協(xié)議進行加密之后的網(wǎng)絡(luò)傳輸。
并通過非對稱和對稱加密算法來對密碼和數(shù)據(jù)進行加密。具體看下圖:
1. Client明文將自己支持的一套加密規(guī)則、一個隨機數(shù)(Random_C)發(fā)送給服務(wù)器.
2. Server返回自己選擇的加密規(guī)則、CA證書(服務(wù)器地址、加密公鑰、以及證書頒發(fā)機構(gòu))、外加一個通過加密規(guī)則和HASH算法生成的隨機數(shù)(Random_S)
3. Client收到Server的消息之后會:
a:驗證證書(地址是否是正在訪問的和機構(gòu)是否合法)、
b:自己生成一個隨機的密碼(Pre_master)并使用CA證書中的加密公鑰進行加密(enc_pre_master)、
c:計算出一個對稱加密的enc_key,通過Random_C、Random_S、Pre_master、
d:生成握手信息:使用約定好的Hash算法計算握手信息,并通過enc_key和約定好的加密算法對消息進行加密
4. Client將enc_pre_master、加密之后的握手消息發(fā)送給Server
5. Server收到消息之后
a: 收到enc_pre_master之后,會通過私鑰進行解密(非對稱加密算法)得到pre_master
b: 通過pre_masrer、Random_C、Random_S計算得到協(xié)商密碼 enc_key
c: 通過enc_key解密握手信息,驗證HASH是否和客戶端發(fā)來的一致
d: 生成握手信息同樣適用enc_key和約定好的加密算法
6. Server發(fā)送握手信息給Client,也就是說Server驗證通過了Client,并再次發(fā)送消息給Client讓其驗證自己
7. 客戶端拿到握手信息解密,握手結(jié)束。客戶端解密并計算握手消息的HASH,如果與服務(wù)端發(fā)來的HASH一致,此時握手過程結(jié)束。
8. 正常加密通信,握手成功之后,所有的通信數(shù)據(jù)將由之前協(xié)商密鑰enc_key及約定好的算法進行加密解密。
其中Https使用到的加密算法如下:
- 非對稱加密算法:RSA,DSA/DSS
- 對稱加密算法:AES,RC4,3DES
- HASH算法:MD5,SHA1,SHA256
2.2.2、 Charles抓取Https原理
Charles本身就是一個協(xié)議代理工具,在上篇的Https原理上,客戶端和服務(wù)器的所有通信都被Charles捕獲到。
如下圖:
主要步驟如下:
1. Charles捕獲Client發(fā)送給Server請求,并偽裝成客戶端向服務(wù)器發(fā)起握手請求
2. 服務(wù)器響應(yīng),Charles獲取到服務(wù)器的CA證書,并用根證書公鑰進行解密,獲取到服務(wù)器的CA證書公鑰。然后Charles偽造自己的CA證書,偽裝為服務(wù)器的CA證書發(fā)送給客戶端
3. 客戶端收到返回之后,和上面講到的過程一樣,證書校驗、生成密碼、并使用Charles偽裝的證書公鑰進行加密,并生成 Https通信的協(xié)商密碼enc_key
4. Charles捕獲到Client發(fā)來的重要信息,并使用自己偽造的證書私鑰將密文解密,獲取到enc_key.然后Charles使用服務(wù)器之前返回的證書公鑰對明文進行加密并發(fā)送給服務(wù)器
5. 去之前一樣,服務(wù)器收到消息之后,用私鑰解開并建立信任,然后發(fā)送加密的握手信息。
6. Charles截獲服務(wù)器發(fā)來的握手密文,并用對稱密鑰解開,再用自己偽造證書的私鑰加密傳給客戶端
7. 客戶端拿到加密信息后,用公鑰解開,驗證HASH。握手過程正式完成,客戶端與服務(wù)器端就這樣建立了”信任“。
- 其實在整個過程中,最重要的就是enc_key,由于Charles從一開始偽造并獲取了enc_key,所以在整個通信過程中Charles充當?shù)谌撸行畔ζ鋪碇v都是透明的。
- 其次就是根證書,這是https一個信任鏈的開始。這也是Charles偽造的CA證書能獲得雙方信任的關(guān)鍵。
2.2.3、演示Charles抓取Https
原理清楚之后,其實操作就很簡單了,操作的核心點就是根證書。
-
安裝根證書(Charles Root Certificate)
-
讓系統(tǒng)信任該證書
-
接下來將需要抓的Https鏈接加入到CharlesSSL代理規(guī)則中,443是Https的默認端口
當然你也可以像我最后一條一樣,使用 *:443 來抓取所有https的包。
-
通過瀏覽器訪問自己要抓的鏈接,這樣所有的Https都可以像Http一樣明文展示都我們面前。
第三、手機抓包
手機抓包的原理其實也很簡單,讓手機和抓包工具處于同一局域網(wǎng),并將手機的WifiProxy手動代理到電腦的Ip和Charles設(shè)置的抓包端口上,具體操作可在網(wǎng)上找到,具體見http://blog.csdn.net/richer1997/article/details/52198024
我這邊主要講一下手機端Https包的抓取,其實和瀏覽器的抓取一樣:
-
首先需要安裝Charles的根證書到手機上。
-
點擊之后,會彈出讓你在手機上配置代理到對應(yīng)Ip和端口,之后通過手機瀏覽器打開chls.pro/ssl
使用手機訪問該鏈接之后,會自動被識別為證書,并跳轉(zhuǎn)到:(當然我這里已經(jīng)是安裝過的,未安裝的點擊右上角安裝即可)
- 之后就類似與PC端抓Https包原理一樣,手機端的證書被作為根證書使用,并通過Charles拿到enc_key.將所有通信過程透明化。
第四、Charles的附加功能
在我剛開始使用Charles的時候,我只是用來簡單的抓抓接口,直到我看到別人使用BurpSuite自定義請求數(shù)據(jù)并Repeat的時候,我在考慮Charles是否也有這種功能。當然不出我所料,Charles也是支持的。
在對應(yīng)接口上點擊右鍵,出現(xiàn)菜單,其中我經(jīng)常使用到的就是Compose、Repeat和RepeatAdvanced
Compose:可直接自定義對應(yīng)的請求,并執(zhí)行該請求。這個對我們抓包用處很大。我們可以從中得到該接口的必填參數(shù)等等的。
Repeat:很簡單就是執(zhí)行一次重復(fù)請求操作
Repeat Advanved:重復(fù)請求的高級操作,可自定義重復(fù)的次數(shù)、每隔多少秒執(zhí)行。這個功能對于我們的接口的壓測是很有用的。
除了這幾個我常用的功能,當然Charles還有更多更加實用的功能,如過濾、排序等等。還需要大家去自行使用,發(fā)現(xiàn)更多更好、并適用于自己的功能。
小結(jié)
抓包的用處其實很大,有時候可以用來調(diào)試我們的接口、有時候也可以用來做一些對工作有益的事,當然并"不建議"用來攻擊別人的網(wǎng)絡(luò)。
掃描‘二維碼’公告號,將自動執(zhí)行代碼
生活不止眼前的茍且,還有手下的代碼、和嘴上的扯淡
個人博客: https://www.alision.com