抓包神器之--Charles配置和使用手冊
抓包神器之--Charles配置和使用手冊
天降大任
charles簡介
Charles 是常用的網路封包擷取工具, 通過將自己設定成系統的網路訪問代{過}{濾}理伺服器,使得所有的網路訪問請求都通過它來完成,從而實現了網路封包的擷取和分析。
Charles 主要功能包括:
-
擷取 Http 和 Https 網路封包
-
支援重發網路請求,方便後端除錯
-
支援修改網路請求引數
-
支援網路請求的截獲並動態修改
-
支援模擬慢速網路
主介面介紹
Charles 主要提供兩種檢視封包的檢視,分別名為 “Structure” 和 “Sequence”。
- Structure 檢視將網路請求按訪問的域名分類。
- Sequence 檢視將網路請求按訪問的時間排序。
大家可以根據具體的需要在這兩種檢視之前來回切換。請求多了有些時候會看不過來,Charles 提供了一個簡單的 Filter 功能,可以輸入關鍵字來快速篩選出 URL 中帶指定關鍵字的網路請求。
對於某一個具體的網路請求,你可以檢視其詳細的請求內容和響應內容。如果請求內容是 POST 的表單,Charles 會自動幫你將表單進行分項顯示。如果響應內容是 JSON 格式的,那麼 Charles 可以自動幫你將 JSON 內容格式化,方便你檢視。如果響應內容是圖片,那麼 Charles 可以顯示出圖片的預覽。
夜魅以求
下載
說明
charles是收費軟體,有條件者請選擇正規渠道下載並付費授權使用
下載地址:https://www.charlesproxy.com/
windows端
筆者開發電腦為mac,windows端沒有收藏連結,不過windows端的charles破解版應該很多~
mac端
mac端Charles這裡可以推薦個下載網站:未來mac下載
地址:https://mac.orsoon.com/ (非廣告植入)
需要付費會員才可以下載,但某寶上代{過}{濾}理會員下載的商家很多,一兩元可以搞定,費用感覺還行~
得心應手
charles基礎配置
以下內容筆者使用mac端charles4.2.8版本進行演示
CA證書安裝
安裝CA證書是為了抓包https請求,完成SSL的證書驗證環節
1.電腦下載Charles CA證書
2.安裝證書並設定為始終信任
訪問許可權列表-白名單設定
設定白名單,即設定允許哪些IP可以通過代{過}{濾}理進行請求抓包
-
進入Proxy → Access Control settings
-
點選add新增運許的IP地址,筆者這裡填入了0.0.0.0/0,即允許任意IP。筆者主要用測試手機連線charles代{過}{濾}理伺服器抓包進行逆向分析,沒有其他特殊用途,這裡就不限制IP了。手機連WIFI後IP是通過DHCP隨機分發的,設定某個IP作為白名單也不太方便。
charles代{過}{濾}理伺服器配置
-
進入Proxy → proxying settings
-
配置代{過}{濾}理伺服器埠
Port:8888 預設埠號為8888,若埠被佔用需手動更改;筆者8888埠已被其他應用佔用,這裡改為了8899
Enable transparent HTTP proxying(透明HTTP代{過}{濾}理):
透明代{過}{濾}理使Charles能夠去支援那些不支援HTTP代{過}{濾}理伺服器的客戶端,或者說不知道他們正在使用HTTP代{過}{濾}理伺服器,例如TCP / IP連線由路由器或防火牆重定向到Charles。
開啟https 443埠代{過}{濾}理
基於安全考慮現在的請求介面都是https,http很少見了。因此配置SSL代{過}{濾}理來抓包https必不可少。
-
進入Proxy → SSL Proxying settings
-
IP設定為萬用字元,代表任意伺服器IP,埠設為443,當然埠也可以設定為*;https的預設埠為443,一般來說企業不會去修改它。當然埠配置為\更嚴謹一些
略知一二
抓包
當我們分析一個應用,做的第一件事情往往是先抓個包看看,它傳送和接收了哪些資料。收包發包是應用的命門,企業為使用者服務過程中最為關鍵的步驟——註冊、瀏覽商品、下單購買、點贊評論、意見反饋等行為,均通過收包發包來完成。出於網路安全的考慮,企業會對資料的收發包採取安全策略來校驗。試想如果對收包發包的資料沒有校驗,黑灰產業可以直接製作相應的協議刷工具,脫離應用本身進行實質性業務操作,給企業和使用者帶來巨大的損失。
抓包原理
借用一張圖。原理一言以蔽之:構建中間人,發起中間人攻擊(MITM)。
配置Charles
代{過}{濾}理構成中間人後,本來C/S
架構的通訊過程會“分裂”為兩個獨立的通訊過程,app
本來驗證的是伺服器的證書,伺服器的證書手機的根證書是認可的,直接內建的;分裂成兩個獨立的通訊過程之後,app
驗證的證書就成了Charles
的證書,這就是為什麼我們抓包前需要安裝在手機端和電腦端均安裝charles證書。
其實這樣的抓包方式在某些情況下也許並不能成功。簡單提兩種情況:
1.安卓系統版本
如果你用的是android手機,會發現當android版本在7.0(包含)以上時,並不能抓到https的介面請求(charles中顯示為unknown)
這是因為谷歌基於資料安全考慮,android7.0之後版本不再信任使用者級別證書,只信任系統級別證書。而charles的證書預設是安裝在使用者目錄下的。它的證書手機根證書並不認可,並不是由手機內建的權威根證書籤發機構簽發的,所以手機不認,app
也不認。
當然有防必有攻,是有應對策略的:
- 將android版本降低到6.0以下
- 既然7.0之後版本只信任系統級別的CA證書,那我們把charles的證書想辦法移動到系統目錄下就好了。
具體操作可參考:https://www.pianshen.com/article/97291182754/
2.SSL planning證書繫結機制
現象為手機連線代{過}{濾}理後,操作app時出現網路異常。
一般大廠都很重視軟體安全,他們的應用幾乎都有安全策略,SSL planning就是常見的一種。可以簡單理解為在應用程式碼中還有一層對證書校驗的流程,如果不是自己簽發的證書直接拒絕服務。SSL planning機制可以利用Frida或Objection通過hook來應對,這裡不再展開。
牛刀小試
移動端通過charles代{過}{濾}理抓包介面
以蘋果手機 IOS系統為例演示
前置工作
連線charles代{過}{濾}理服務
【注】注意前提條件,電腦和手機必須在同一wifi網路下
1.獲取代{過}{濾}理伺服器的IP和埠號
2.手機wifi配置代{過}{濾}理服務
點選你的wifi→配置代{過}{濾}理→手動→填入上圖charles彈窗中的伺服器IP和埠號
(android手機對應操作應該是:長按wifi → 修改網路 → 高階選項 →代{過}{濾}理 → 手動 → 填入上圖charles彈窗中的伺服器IP和埠號)
3.移動端charles證書安裝
根據彈窗提示,手機瀏覽器輸入chls.pro/ssl這個連結進行訪問下載移動端charles證書,點選Allow進行下載
證書下載安裝好後,IOS10之後的版本還需要手動操作進行證書信任:
設定→ 通用→ 描述檔案與裝置管理 →關於本機 →證書資訊設定 → 選擇charles證書 → 開啟信任開關
測試抓包
上述工作完成後,可以測試抓包了,手機訪問某個應用,觀察charles是否抓到介面請求
下圖為連線代{過}{濾}理後操作微信抓到的資料請求
去掉對電腦端請求的抓包
proxy選單中有一專案macOS Proxy是打鉤的,意思是charles預設也會抓取電腦端所有的介面請求
逆向分析場景下我們一般是手機連線代{過}{濾}理抓取手機端的請求,電腦端的請求其實是一種干擾。
可再次點選macOS Proxy將前面的勾去掉,這樣charles就不會再抓取電腦端的請求了。
撥雲散霧
遇到的問題和解決策略
1.mac安裝charles後報下圖錯誤
原因不詳
解決方式:終端執行如下命令
複製程式碼 隱藏程式碼
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,只信任系統證書(即使用者證書不被信任)
解決策略:
-
Root Android手機,將Charles證書放到系統證書內
-
將APP的公祕鑰匯入Charles中(具備APP開發許可權)
-
APP編譯為信任使用者證書的版本(具備APP開發許可權)
-
使用Xposed的JustTrustMe模組信任所有證書
-
使用沙箱應用
3.windows下移動端無法連線到代{過}{濾}理
現象:移動端訪問chls.pro/ssl,無提示證書下載/儲存
排查思路:
-
確認防火牆是否攔截
-
【控制面板】-【所有控制面板項】-【Windows Defender 防火牆】-【允許的應用】
-
確認是否存在【Charles Web Debbuging Proxy】,且是否勾選,對應(專用/共用)網路是否符合環境
小具法力
本文簡單介紹了一下charles的基本的配置和用法。