抓包神器之Charles配置和使用手冊

抓包神器之--Charles配置和使用手冊

image-20210719153634905

天降大任

charles簡介

Charles 是常用的網(wǎng)絡(luò)封包截取工具, 通過將自己設(shè)置成系統(tǒng)的網(wǎng)絡(luò)訪問代理服務(wù)器,使得所有的網(wǎng)絡(luò)訪問請求都通過它來完成,從而實現(xiàn)了網(wǎng)絡(luò)封包的截取和分析。

Charles 主要功能包括:

  1. 截取 Http 和 Https 網(wǎng)絡(luò)封包

  2. 支持重發(fā)網(wǎng)絡(luò)請求,方便后端調(diào)試

  3. 支持修改網(wǎng)絡(luò)請求參數(shù)

  4. 支持網(wǎng)絡(luò)請求的截獲并動態(tài)修改

  5. 支持模擬慢速網(wǎng)絡(luò)

主界面介紹

image-20210719154036465

Charles 主要提供兩種查看封包的視圖,分別名為 “Structure” 和 “Sequence”。

  1. Structure 視圖將網(wǎng)絡(luò)請求按訪問的域名分類。
  2. Sequence 視圖將網(wǎng)絡(luò)請求按訪問的時間排序。

大家可以根據(jù)具體的需要在這兩種視圖之前來回切換。請求多了有些時候會看不過來,Charles 提供了一個簡單的 Filter 功能,可以輸入關(guān)鍵字來快速篩選出 URL 中帶指定關(guān)鍵字的網(wǎng)絡(luò)請求。

image-20210719154252360

對于某一個具體的網(wǎng)絡(luò)請求,你可以查看其詳細(xì)的請求內(nèi)容和響應(yīng)內(nèi)容。如果請求內(nèi)容是 POST 的表單,Charles 會自動幫你將表單進(jìn)行分項顯示。如果響應(yīng)內(nèi)容是 JSON 格式的,那么 Charles 可以自動幫你將 JSON 內(nèi)容格式化,方便你查看。如果響應(yīng)內(nèi)容是圖片,那么 Charles 可以顯示出圖片的預(yù)覽。

夜魅以求

下載

說明

charles是收費軟件,有條件者請選擇正規(guī)渠道下載并付費授權(quán)使用

下載地址:https://www.charlesproxy.com/

windows端

筆者開發(fā)電腦為mac,windows端沒有收藏鏈接,不過windows端的charles破解版應(yīng)該很多~

mac端

mac端Charles這里可以推薦個下載網(wǎng)站:未來mac下載

地址:https://mac.orsoon.com/ (非廣告植入)

需要付費會員才可以下載,但某寶上代理會員下載的商家很多,一兩元可以搞定,費用感覺還行~

得心應(yīng)手

charles基礎(chǔ)配置

以下內(nèi)容筆者使用mac端charles4.2.8版本進(jìn)行演示

CA證書安裝

安裝CA證書是為了抓包https請求,完成SSL的證書驗證環(huán)節(jié)

1.電腦下載Charles CA證書

image-20210719114452057

2.安裝證書并設(shè)置為始終信任

image-20210719114725647

訪問權(quán)限列表-白名單設(shè)置

設(shè)置白名單,即設(shè)置允許哪些IP可以通過代理進(jìn)行請求抓包

  1. 進(jìn)入Proxy → Access Control settings

  2. 點擊add添加運許的IP地址,筆者這里填入了0.0.0.0/0,即允許任意IP。筆者主要用測試手機連接charles代理服務(wù)器抓包進(jìn)行逆向分析,沒有其他特殊用途,這里就不限制IP了。手機連WIFI后IP是通過DHCP隨機分發(fā)的,設(shè)置某個IP作為白名單也不太方便。

image-20210719115611070

charles代理服務(wù)器配置

  1. 進(jìn)入Proxy → proxying settings

  2. 配置代理服務(wù)器端口

Port:8888 默認(rèn)端口號為8888,若端口被占用需手動更改;筆者8888端口已被其他應(yīng)用占用,這里改為了8899

Enable transparent HTTP proxying(透明HTTP代理):

透明代理使Charles能夠去支持那些不支持HTTP代理服務(wù)器的客戶端,或者說不知道他們正在使用HTTP代理服務(wù)器,例如TCP / IP連接由路由器或防火墻重定向到Charles。

image-20210719140730440

開啟https 443端口代理

基于安全考慮現(xiàn)在的請求接口都是https,http很少見了。因此配置SSL代理來抓包https必不可少。

  1. 進(jìn)入Proxy → SSL Proxying settings

  2. IP設(shè)置為通配符*,代表任意服務(wù)器IP,端口設(shè)為443,當(dāng)然端口也可以設(shè)置為*;https的默認(rèn)端口為443,一般來說企業(yè)不會去修改它。當(dāng)然端口配置為*更嚴(yán)謹(jǐn)一些

image-20210719140315929

略知一二

抓包

當(dāng)我們分析一個應(yīng)用,做的第一件事情往往是先抓個包看看,它發(fā)送和接收了哪些數(shù)據(jù)。收包發(fā)包是應(yīng)用的命門,企業(yè)為用戶服務(wù)過程中最為關(guān)鍵的步驟——注冊、瀏覽商品、下單購買、點贊評論、意見反饋等行為,均通過收包發(fā)包來完成。出于網(wǎng)絡(luò)安全的考慮,企業(yè)會對數(shù)據(jù)的收發(fā)包采取安全策略來校驗。試想如果對收包發(fā)包的數(shù)據(jù)沒有校驗,黑灰產(chǎn)業(yè)可以直接制作相應(yīng)的協(xié)議刷工具,脫離應(yīng)用本身進(jìn)行實質(zhì)性業(yè)務(wù)操作,給企業(yè)和用戶帶來巨大的損失。

抓包原理

借用一張圖。原理一言以蔽之:構(gòu)建中間人,發(fā)起中間人攻擊(MITM)。

image-20210719150612020

配置Charles代理構(gòu)成中間人后,本來C/S架構(gòu)的通信過程會“分裂”為兩個獨立的通信過程,app本來驗證的是服務(wù)器的證書,服務(wù)器的證書手機的根證書是認(rèn)可的,直接內(nèi)置的;分裂成兩個獨立的通信過程之后,app驗證的證書就成了Charles的證書,這就是為什么我們抓包前需要安裝在手機端和電腦端均安裝charles證書。

其實這樣的抓包方式在某些情況下也許并不能成功。簡單提兩種情況:

1.安卓系統(tǒng)版本

如果你用的是android手機,會發(fā)現(xiàn)當(dāng)android版本在7.0(包含)以上時,并不能抓到https的接口請求(charles中顯示為unknown)

這是因為谷歌基于數(shù)據(jù)安全考慮,android7.0之后版本不再信任用戶級別證書,只信任系統(tǒng)級別證書。而charles的證書默認(rèn)是安裝在用戶目錄下的。它的證書手機根證書并不認(rèn)可,并不是由手機內(nèi)置的權(quán)威根證書簽發(fā)機構(gòu)簽發(fā)的,所以手機不認(rèn),app也不認(rèn)。

當(dāng)然有防必有攻,是有應(yīng)對策略的:

  • 將android版本降低到6.0以下
  • 既然7.0之后版本只信任系統(tǒng)級別的CA證書,那我們把charles的證書想辦法移動到系統(tǒng)目錄下就好了。

具體操作可參考:https://www.pianshen.com/article/97291182754/

2.SSL planning證書綁定機制

現(xiàn)象為手機連接代理后,操作app時出現(xiàn)網(wǎng)絡(luò)異常。

一般大廠都很重視軟件安全,他們的應(yīng)用幾乎都有安全策略,SSL planning就是常見的一種。可以簡單理解為在應(yīng)用代碼中還有一層對證書校驗的流程,如果不是自己簽發(fā)的證書直接拒絕服務(wù)。SSL planning機制可以利用Frida或Objection通過hook來應(yīng)對,這里不再展開。

牛刀小試

移動端通過charles代理抓包接口

以蘋果手機 IOS系統(tǒng)為例演示

前置工作

連接charles代理服務(wù)

【注】注意前提條件,電腦和手機必須在同一wifi網(wǎng)絡(luò)下

1.獲取代理服務(wù)器的IP和端口號

image-20210719154931920
image-20210719142808752

2.手機wifi配置代理服務(wù)

點擊你的wifi→配置代理→手動→填入上圖charles彈窗中的服務(wù)器IP和端口號

(android手機對應(yīng)操作應(yīng)該是:長按wifi → 修改網(wǎng)絡(luò) → 高級選項 →代理 → 手動 → 填入上圖charles彈窗中的服務(wù)器IP和端口號)

image-20210719141624129

3.移動端charles證書安裝

image

根據(jù)彈窗提示,手機瀏覽器輸入chls.pro/ssl這個鏈接進(jìn)行訪問下載移動端charles證書,點擊Allow進(jìn)行下載

image-20210719143630132

證書下載安裝好后,IOS10之后的版本還需要手動操作進(jìn)行證書信任:

設(shè)置→ 通用→ 描述文件與設(shè)備管理 →關(guān)于本機 →證書信息設(shè)置 → 選擇charles證書 → 開啟信任開關(guān)

image-20210719143833931

測試抓包

上述工作完成后,可以測試抓包了,手機訪問某個應(yīng)用,觀察charles是否抓到接口請求

下圖為連接代理后操作微信抓到的數(shù)據(jù)請求

image-20210719144931713

去掉對電腦端請求的抓包

proxy菜單中有一項目macOS Proxy是打鉤的,意思是charles默認(rèn)也會抓取電腦端所有的接口請求

逆向分析場景下我們一般是手機連接代理抓取手機端的請求,電腦端的請求其實是一種干擾。

可再次點擊macOS Proxy將前面的勾去掉,這樣charles就不會再抓取電腦端的請求了。

image-20210719145558384

撥云散霧

遇到的問題和解決策略

1.mac安裝charles后報下圖錯誤

image-20210719153125704

原因不詳

解決方式:終端執(zhí)行如下命令

sudo chown -R root "/Applications/Charles.app/Contents/Resources"
sudo chmod -R u+s "/Applications/Charles.app/Contents/Resources"

2.Android HTTPS抓包報錯:SSL Handshanke:Recevied fatal alert unknown_ca

原因:

Android 7.0版本以上 && targetSdkVersion >= 24,只信任系統(tǒng)證書(即用戶證書不被信任)

解決策略:

  • Root Android手機,將Charles證書放到系統(tǒng)證書內(nèi)

  • 將APP的公秘鑰導(dǎo)入Charles中(具備APP開發(fā)權(quán)限)

  • APP編譯為信任用戶證書的版本(具備APP開發(fā)權(quán)限)

  • 使用Xposed的JustTrustMe模塊信任所有證書

  • 使用沙箱應(yīng)用

3.windows下移動端無法連接到代理

現(xiàn)象:移動端訪問chls.pro/ssl,無提示證書下載/保存

排查思路:

  • 確認(rèn)防火墻是否攔截

  • 【控制面板】-【所有控制面板項】-【W(wǎng)indows Defender 防火墻】-【允許的應(yīng)用】

  • 確認(rèn)是否存在【Charles Web Debbuging Proxy】,且是否勾選,對應(yīng)(專用/共用)網(wǎng)絡(luò)是否符合環(huán)境

小具法力

本文簡單介紹了一下charles的基本的配置和用法。

其實charles功能很強大,后續(xù)專門出一篇介紹charles的便捷功能和騷操作,敬請期待~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容