分享 | APP滲透測試抓不到包的解決思路
前言
本文主要介紹在對APP滲透測試的時候,對于APP “抓不到包” “點擊無反應” “網絡錯誤” 等解決思路。
正文
當我們在實戰中總會遇到一些APP抓不到包或網絡錯誤,有的甚至直接沒反應,
首先我們要理解代理抓包的關鍵就是需要HTTP客戶端按照要求去連接代理服務器,
一般情況下我們已經在系統層面上設置了代理,通常HTTP客戶端都是按要求去實現的,在進行HTTP請求前會先檢查系統代理,如果有設置代理,客戶端會直接使用完整url去連接代理服務器。
不同的平臺通常會實現自己的HTTP客戶端,雖然他們都按照協議要求實現了代理功能,但是并不一定在默認情況下會直接使用系統代理,在現實中碰到這種情況還不少。
- 對于防止APP抓包有以下幾種方式
- 1、在客戶端請求網絡之前先判斷是否使用了代理
- 2、在代碼中增加無代理模式,比如 “Proxy.NO_PROXY” 對于這種可以使用HOOK方法,具體操作大家可以百度一下相關的知識
- 3、 SSL Pinning機制,這種常見的報錯提示語為“網絡錯誤”
繞過方式
- 使用Android7.0以下的系統 (貌似不是很管用)
- 將Fiddler/Burp證書安裝到系統默認預置的CA證書區域中
- 反編譯APK,修改AndroidManifest.xml文件
- VitualXposed框架+JustTrustMe模塊 (我在測試過程中安裝JustTrustMe模塊的時候老是出錯,不能正常使用,大家可以自行去嘗試)
- 控制DNS解析,通過修改dns的方式讓客戶端以為我們的代理服務器就是目標服務器
- 下面我將用某APP做測試,順便介紹一款在安卓運行的抓包工具“HttpCanary”
- 此工具分高級版和免費版,主要區別于免費版不能進行改包重放等功能,不過問題不大,我們可以在瀏覽器中操作
下面進入實戰階段
首先已正常流程進行抓包,設置Burp代理,手機代理
當我們打開APP并進行點擊發送驗證碼,以及登入功能按鈕的時候,APP毫無反應,從打開到加載完這是Burp所抓到的數據包


-----可以看到只抓到一個數據包,而且還沒啥用看第一張圖所圈的位置相信大家都知道是出問題了,你說怎么肥事?我也不知道!
下面我們使用第二種方式,不設置模擬器中的系統代理
利用Proxifier和Fiddler工具監聽模擬器的請求,然后通過Fiddler把流量轉到Burp中.
當一切都設置好準備一展拳腳的時候, 咦~ 怎么肥事!

當點擊發送驗證碼和登入按鈕的時候,除了抓到一些url地址,數據包什么的啥也沒有,此刻 撓撓了頭,點上煙,深深抽上了一口,難道他不是通過檢測系統代理而判斷的?
此刻又進入了漫長的查資料過程........
----當我們在實戰中遇到這種情況,先判斷是為何抓不到包,他是在代碼中設置了無代理還是驗證系統的證書
因為在Android7.0以上的系統,不會信任用戶證書
所以就出現了我們使用Android7.0以下的系統進行測試,或者把Burp的證書安裝到系統層繞過檢測,最后根據目標對應的配置去繞過檢測----
當查了很久的資料,嘗試了網上所教的各種方法,HOOK因為太過復雜懶得配置,留到最后,可能對大佬來說很簡單...
然后嘗試使用VitualXposed框架+JustTrustMe模塊
模塊不能正常運行,失敗!
使用Android5系統,失敗!
證書安裝到系統層,失敗!
當我正不知所措的時候,決定嘗試反編譯apk
隨后用jadx打開了classes.dex文件全局搜索 “Proxy.NO_PROXY” 如下
發現了一段代碼,對于Java一竅不通的我
此刻很頭疼,當我看到這段代碼的時候雖然我不懂java但我知道這個函數肯定與代理有關。

---當我正考慮下一步怎么進行的時候,突然冒出來一個想法,不知道有沒有手
機版的抓包工具,利用手機版的抓包工具能不能繞過?
然后就找到"HttpCanary"這款工具
開始測試
工具安裝好以后,把需要抓的APP添加到工具中,然后點擊開始抓包

哦豁~ 可以正常抓包了!
----點擊數據包可以查看詳情信息,以及修改和重放----


當然在模擬器中測試還是有點不方便,隨后轉戰瀏覽器測試,當直接訪問目標url的時候會爆出以下錯誤

這里提示參數錯誤,那肯定是數據包中缺少某個參數,觀察在模擬器中抓到的包,經過測試發現缺少"X-UDID"這個頭,在數據包中添加X-UDID頭,返回正常

以上就是本次對APP抓包的所有流程以及思路,在實戰過程中信息收集與思路尤其重要,雖然本文并沒有很高超的技術含量,但也為我們的思路做了一個擴展,這也是我第一次接觸這款工具,這次測試也為我以后在抓包環節省下不少時間。