如何使用 Charles 抓包並分析 Http 報文
從Web安全的攻擊防禦方面來說,最多接觸的應該就是Http協議了,當我們作為中間人(man-in-the-middle)查看到所有瀏覽器到web伺服器的http報文的時候,一切就都有意思起來。
比如,分析某電商在交易支付的時候請求了哪些東西,分析某網站的登錄流程都請求了哪些數據,分析某社交軟體有沒有偷偷的上傳隱私數據等等,甚至可以拿到Https加密過的請求哦!
如果我是黑客,分析過後也許就會通過工具篡改偽造請求報文,欺騙伺服器,從而實現某些惡意行為,比如撞庫、刷單、擼羊毛、惡意爬蟲爬取數據等等。
那麼,如何快速有效的抓取http數據包並進行分析呢,這裡推薦一個跨平台抓包神器—Charles。
charles是一個圖形界面可視化的代理形式(HTTP,SOCKS,SSL/HTTPS)的抓包工具,它提供對HTTP,SSL/HTTPS協議下通過同一個路由器下的設備的數據交流分析,包括各種HTTP請求和響應信息,charles目前只支持抓到部分socket的數據。
安裝配置
● 下載安裝
http://www.charlesproxy.com/download/
charles需求java環境,並且為收費工具,試用版每30分鐘將會關閉。
● socks/http代理配置
charles提供透明代理功能,當安裝配置對象為網關伺服器時,菜單處proxy->proxy setting勾選HTTP代理,勾選enabletransparent HTTP proxying選項即可。
檢測為第一次安裝使用時charles會提供部分瀏覽器和應用的自動代理設置:
Windows / Internet Explorer proxy settings – used automatically by mostWindows applicationsn Mac OS X proxy settings – used automatically by most Mac OS Xapplicationsn Mozilla Firefox proxy settings (all platforms)nnMozilla Firefox可在設置ADD-ONs處添加自動配置插件:https://addons.mozilla.org/en-US/firefox/addon/charles-proxy/n
其他應用/瀏覽器:
當於charles菜單proxy處設置好了設置以後,可以查詢各個瀏覽器,應用的代理設置方式,在設備(包括手機)處於同一網路(同一路由)下時,填寫charles所處設備的ip地址和charles設置的代理埠(默認8888),即可通過charles代理。
● SSL https代理配置
非手機:
charles菜單help->SSL proxy->安裝certificates後
菜單proxy->SSLproxy setting->添加代理目標地址(可於另外兩個選項添加client和root的certificates)。
手機:
在手機端瀏覽器輸入「http://www.charlesproxy.com/getssl「 下載證書,並將格式轉換為crt安裝在手機上即可。
通過代理client ip段設置:
於菜單proxy->AccessControl處可設置通過代理的clientIP段
charles可再通過代理傳輸數據,可在proxy->external proxy處設置代理,使charles再通過其他代理。
使用
charles的圖形界面提供格式話的抓包數據的分析和各種處理方式。
當配置完畢以後數據會在當前session數據界面(Structure樹狀和Sequence隊列兩種方式)顯示抓到的各個請求和相應信息,樹狀抓到的數據會以相同地址聚合的方式堆列為樹狀,而隊列形式為以先後的順序顯示。對顯示的數據有相應的選項可操作數據,其中request和response可以以image,text,html,json,javascript……的形式顯示。
charles提供斷點形式(breakpoint)的代理,可對請求進行再編輯以後再將請求發送過去。同時提供repeat 的重複發送功能,並有相應的功能設置(advance repeat)對該重複發送功能進行設置(定時定量)。
● 模式
charles在啟用時提供的模式主要以record,throttle,斷點模式。
其中,記錄模式即使關閉charles一樣在進行抓取數據,只是不將其顯示出來。
throttle模式可將目前連接代理的所有client虛擬為所設置的網路質量。
其中,在附帶工具中有可選其他關聯選項附加模式。
菜單->tool下有:
● no caching
對caching設置的工具,設置以後,代理將拒絕代理的client使用cache緩存的形式顯示相應。
● map *
local:該功能可將代理本地的文件替換請求所響應的結果,目標請求的響應將替換為本地所選資源返回並顯示給client。
remote:同上功能,但所替換的資源為遠程他網路伺服器上的其他請求地址或數據介面。
● rewrite
該工具可再編輯client發送給目標伺服器的請求,並且提供批量改寫欄位的編輯。
● blocking cookies
該功能提供保存目標伺服器發送/接收的各個cookies,可用來測試該web伺服器是否對代理所持有的cookies有效(該功能提供導入和導出所保存的cookies)。
● Mirror
該工具提供對目前的session進行鏡像處理。
charles提供終端下的命令形式操作方式和瀏覽器介面形式的操作方式。
● 終端:
charles <path>
以一個session文件打開一個新的session
charles -config <path>
制定一個config文件的使用
charles -headless
無圖形界面的啟動charles
charles -throttling
開啟throttling模式
● 網頁介面:
包括增加刪除,保存session,開啟關閉各種模式。同終端模式,並不提供各種可視化的抓包數據分析。
示例
● 舉個栗子:百度搜索櫻桃小丸子圖片
1. 輸入「櫻桃小丸子」搜索,然後點擊其中某一張圖片,查看具體圖片樣式;
2. 百度搜索會通過url的形式向伺服器請求這張圖片的具體信息;
3. Charles根據請求,可以抓取到伺服器對這個請求做出的響應。比如這張圖片的具體信息是什麼;
4. 同時,charles還可以查看不同的響應格式,比如image、JavaScript、Jason等。
推薦閱讀:
※golang net/http的小問題?
※淺談HTTP緩存
※JMeter-HTTP請求sampler詳細說明
※Aspera技術如何實現原來需要傳26小時的24GB文檔做到只需30秒?
※大家在工作中那些地方用到了http協議的細節?