境搭建到實戰(zhàn)技巧)
1. 項目概述為什么要在模擬器里抓包做APP或者小程序的安全測試尤其是滲透測試你遲早會遇到一個繞不開的坎抓包。直接在真機上抓證書問題、系統(tǒng)限制、網(wǎng)絡(luò)配置每一步都可能讓你卡上半天。這時候一個配置好的安卓模擬器就成了測試人員的“安全屋”。它提供了一個純凈、可控、可任意折騰的沙箱環(huán)境讓你能像在Web端測試一樣從容地攔截、分析、重放每一個網(wǎng)絡(luò)請求。這個項目的核心就是搭建一套基于模擬器的APP/小程序抓包滲透測試環(huán)境。聽起來簡單不就是裝個模擬器、配個代理嗎但實際操作中從模擬器選型、網(wǎng)絡(luò)橋接、證書安裝到繞過各種抓包檢測每一步都有講究。我見過太多新手卡在“為什么Burp就是看不到包”或者“為什么裝了證書還是提示不安全”這類問題上。今天我就把這幾年來在模擬器里抓包做滲透測試的完整流程、核心原理和踩過的坑系統(tǒng)地梳理一遍。無論你是剛?cè)胄械陌踩珳y試工程師還是想對自己產(chǎn)品進(jìn)行安全自查的開發(fā)人員這套方法都能讓你快速上手把精力集中在漏洞挖掘本身而不是和環(huán)境斗智斗勇。2. 環(huán)境搭建模擬器與抓包工具選型解析工欲善其事必先利其器。環(huán)境搭建是第一步也是決定后續(xù)測試是否順暢的基礎(chǔ)。這里的選型沒有絕對的最優(yōu)解只有最適合當(dāng)前測試場景的組合。2.1 安卓模擬器的選擇與考量市面上模擬器很多但并非所有都適合安全測試。我們需要關(guān)注幾個關(guān)鍵點系統(tǒng)純凈度、Root權(quán)限獲取難度、網(wǎng)絡(luò)配置靈活性、以及兼容性。MuMu模擬器近年來在安全圈很受歡迎。它的優(yōu)勢在于基于Android 9對較新的APP兼容性好并且提供了便捷的Root開關(guān)和共享文件夾功能。其網(wǎng)絡(luò)模式通常設(shè)置為“橋接模式”可以讓你宿主機和模擬器處于同一局域網(wǎng)方便代理設(shè)置。我個人在做常規(guī)測試時MuMu是我的首選。夜神模擬器老牌選手功能穩(wěn)定支持多開。它的Android 7版本非常經(jīng)典Root權(quán)限獲取簡單。但需要注意部分版本可能存在內(nèi)置廣告或后臺進(jìn)程可能干擾網(wǎng)絡(luò)流量。建議使用其提供的“純凈版”或國際版。雷電模擬器性能不錯同樣支持多開和Root。它的網(wǎng)絡(luò)設(shè)置選項也比較清晰。但有時在安裝用戶證書到系統(tǒng)目錄時可能需要額外的步驟。官方Android Studio AVD最“原生”的模擬器完全可控適合深度定制和研究。但缺點是啟動慢、資源占用高且默認(rèn)不開啟Root。對于追求效率和快速測試的場景它可能不是第一選擇。注意避免使用那些冷門或高度定制化的模擬器它們可能在網(wǎng)絡(luò)棧或證書處理上有非標(biāo)準(zhǔn)行為導(dǎo)致抓包失敗。對于小程序測試由于微信客戶端對運行環(huán)境有檢測建議優(yōu)先使用MuMu或夜神并關(guān)注其是否支持安裝微信官方版本。我的常規(guī)選擇是MuMu模擬器Android 9用于大多數(shù)APP測試如果需要測試對舊系統(tǒng)兼容性則輔以一個夜神模擬器Android 7。安裝后第一件事就是在設(shè)置中開啟“Root權(quán)限”不同模擬器該選項位置不同通常在“設(shè)置”-“關(guān)于手機”連續(xù)點擊版本號開啟開發(fā)者選項后在開發(fā)者選項或高級設(shè)置中找到。2.2 抓包代理工具的核心對比選好模擬器接下來是選擇“中間人”。Burp Suite、Fiddler、Charles是三巨頭但它們側(cè)重點不同。Burp Suite Professional滲透測試的“瑞士軍刀”。它不僅是抓包工具更是一個完整的測試平臺包含Proxy、Repeater、Intruder、Scanner等強大模塊。對于以漏洞挖掘為目的的滲透測試Burp是毋庸置疑的首選。它的代理功能強大攔截、修改、重放請求是核心工作流。社區(qū)版免費功能有限專業(yè)版是生產(chǎn)力工具。Fiddler Classic免費、強大特別是在Windows平臺下。它的優(yōu)勢在于HTTP/HTTPS流量監(jiān)控和調(diào)試非常直觀自動解碼JSON、圖片等。對于快速查看API請求響應(yīng)、進(jìn)行簡單的接口測試或調(diào)試非常方便。但在自動化攻擊、漏洞掃描方面不如Burp專業(yè)。CharlesmacOS平臺上的明星界面優(yōu)雅功能同樣強大。它對SSL證書處理、流量映射Map Local/Remote功能做得很好。適合前端開發(fā)或需要精細(xì)分析網(wǎng)絡(luò)請求的場景。對于APP滲透測試我的建議非常明確主用Burp Suite用Fiddler或Charles作為輔助驗證或特定場景下的補充。因為Burp的Repeater重放器和Intruder入侵者模塊在測試參數(shù)篡改、暴力破解、邏輯漏洞時無可替代。接下來我將以Burp Suite Professional作為核心工具進(jìn)行講解。環(huán)境準(zhǔn)備清單安裝并啟動MuMu模擬器確保網(wǎng)絡(luò)模式為“橋接模式”。在宿主機你的電腦上安裝Java環(huán)境Burp需要并下載安裝Burp Suite Professional。獲取你宿主機的局域網(wǎng)IP地址在Windows上ipconfig查看以太網(wǎng)或WLAN IPv4地址在macOS/Linux上ifconfig或ip addr查看。3. 核心配置讓流量流向你的Burp環(huán)境就緒后最關(guān)鍵的一步是建立“中間人”攻擊的通道即讓模擬器中的所有網(wǎng)絡(luò)流量都經(jīng)過你電腦上運行的Burp代理。3.1 模擬器網(wǎng)絡(luò)代理設(shè)置原理很簡單告訴模擬器“你上網(wǎng)不要直接走先把所有請求發(fā)到我電腦的某個端口Burp監(jiān)聽的端口”。在模擬器內(nèi)打開“設(shè)置” - “WLAN”或“網(wǎng)絡(luò)和互聯(lián)網(wǎng)”。長按當(dāng)前已連接的Wi-Fi網(wǎng)絡(luò)通常叫“WiredSSID”或類似名稱選擇“修改網(wǎng)絡(luò)”。在高級選項中將“代理”設(shè)置為手動。代理服務(wù)器主機名填寫你之前在宿主機上查到的局域網(wǎng)IP例如192.168.1.100。切記不要填127.0.0.1或localhost那是模擬器自己內(nèi)部的環(huán)回地址不是宿主機的地址。代理服務(wù)器端口填寫B(tài)urp默認(rèn)監(jiān)聽的端口8080你可以在Burp的Proxy-Options中查看和修改監(jiān)聽端口。保存設(shè)置。此時模擬器的所有HTTP流量理論上都會流向192.168.1.100:8080。但你會發(fā)現(xiàn)很多APP特別是HTTPS的依然無法訪問或Burp抓不到包。這是因為缺少了關(guān)鍵的一環(huán)——SSL/TLS證書。3.2 安裝Burp的CA證書到模擬器系統(tǒng)信任區(qū)HTTPS通信需要驗證證書。Burp作為中間人會對目標(biāo)服務(wù)器進(jìn)行HTTPS連接然后用自己的CA證書簽發(fā)一個“假”的站點證書給模擬器。如果模擬器不信任Burp的CA證書就會中斷連接提示“證書不被信任”或“網(wǎng)絡(luò)錯誤”。步驟一從Burp導(dǎo)出證書在宿主機瀏覽器配置為使用Burp代理中訪問http://burp或http://127.0.0.1:8080進(jìn)入Burp的CA證書下載頁面。下載cacert.der格式的證書。為什么是DER格式因為安卓系統(tǒng)通常直接識別DER或PEM格式而CER格式可能需要轉(zhuǎn)換。步驟二將證書文件放入模擬器方法A共享文件夾如果模擬器如MuMu支持共享文件夾直接將cacert.der放入共享目錄在模擬器的文件管理器中就能找到。方法BADB推送使用Android Debug Bridge (ADB)。首先在模擬器設(shè)置中開啟“USB調(diào)試”。然后在宿主機命令行執(zhí)行adb connect 127.0.0.1:7555 # MuMu默認(rèn)端口夜神可能是62001雷電可能是5555 adb push cacert.der /sdcard/Download/這會將證書推送到模擬器的下載目錄。步驟三在模擬器中安裝證書這是最容易出錯的一步。安卓高版本7.0對證書安裝有嚴(yán)格限制。在模擬器內(nèi)打開“設(shè)置” - “安全”或“加密與憑據(jù)”。找到“安裝證書”或“從存儲設(shè)備安裝”選項。選擇“CA證書”。從文件管理器如剛剛推送到的/sdcard/Download/中找到cacert.der文件并點擊安裝。系統(tǒng)會警告你確認(rèn)安裝。安裝成功后你可以在“信任的憑據(jù)” - “用戶”頁簽下看到名為“PortSwigger CA”或類似名稱的證書。核心難點與解決方案很多APP特別是金融、社交類APP采用了“證書鎖定”Certificate Pinning技術(shù)。它們會預(yù)先將合法的服務(wù)器證書公鑰或哈希值打包在APP內(nèi)。當(dāng)建立連接時會對比接收到的證書和內(nèi)置的證書如果不匹配即使你安裝了Burp的CA證書連接也會被拒絕。這不是你的配置錯誤而是APP的主動防御。對付證書鎖定通常需要在已Root的模擬器上使用Xposed框架配合JustTrustMe或SSLUnpinning模塊或者使用Frida等動態(tài)插樁工具來Hook掉證書驗證的邏輯。這屬于進(jìn)階內(nèi)容但你必須知道這個問題的存在。4. 實戰(zhàn)抓包與滲透測試工作流配置妥當(dāng)后我們進(jìn)入實戰(zhàn)環(huán)節(jié)。抓包不是目的通過抓包分析請求、尋找漏洞才是。4.1 啟動攔截與基礎(chǔ)流量分析在Burp中確保Proxy-Intercept是Intercept is on狀態(tài)。在模擬器中打開你要測試的APP進(jìn)行任意操作如登錄、瀏覽商品、刷新列表。此時Burp的Intercept標(biāo)簽頁會卡住顯示攔截到的第一個HTTP/HTTPS請求。你可以在這里查看和修改請求的所有內(nèi)容URL、方法、Headers、參數(shù)GET參數(shù)或POST Body。點擊Forward放行請求或者Drop丟棄它。如果你只是想觀察流量可以點擊Intercept is off關(guān)閉攔截然后在Proxy-HTTP history中查看所有流經(jīng)的歷史記錄。分析要點接口地址Endpoint識別APP的核心API接口。請求參數(shù)重點關(guān)注用戶可控的輸入點如username、password、id、mobile、orderNo等。注意參數(shù)是明文還是編碼/加密的。身份認(rèn)證憑證尋找Authorization頭、Cookie、Token等字段。這是你后續(xù)測試其他需要認(rèn)證接口的“鑰匙”。響應(yīng)內(nèi)容觀察服務(wù)器返回的數(shù)據(jù)結(jié)構(gòu)是否暴露了敏感信息如用戶ID、手機號、地址等是否存在錯誤信息泄露。4.2 使用Repeater進(jìn)行深度測試HTTP history中右鍵任意一條請求選擇Send to Repeater。Repeater模塊允許你對單個請求進(jìn)行手動、反復(fù)的修改和重放是測試邏輯漏洞的利器。測試場景舉例越權(quán)測試在查看“我的訂單”的請求中找到一個代表訂單ID的參數(shù)如order_id12345。將其修改為另一個數(shù)字如order_id12346重放請求。如果成功返回了他人的訂單信息則存在水平越權(quán)漏洞。參數(shù)篡改在支付請求中找到金額參數(shù)如amount100單位可能是分。嘗試修改為amount1或amount-100觀察后端是否校驗充分。輸入點模糊測試對每一個參數(shù)嘗試輸入SQL注入 payload如 OR 11、命令注入 payload如; ls、路徑遍歷 payload如../../../etc/passwd、XSS payload如scriptalert(1)/script觀察響應(yīng)是否有錯誤、延遲或執(zhí)行了腳本。4.3 使用Intruder進(jìn)行自動化爆破對于需要大量重復(fù)測試的場景如驗證碼爆破、密碼枚舉、ID遍歷Intruder模塊是自動化神器。以爆破4位數(shù)字驗證碼為例在Proxy history中找到發(fā)送驗證碼或驗證驗證碼的請求右鍵Send to Intruder。在Intruder-Positions標(biāo)簽Burp會自動標(biāo)記一些參數(shù)。清除所有標(biāo)記Clear §然后手動選中驗證碼參數(shù)如vcode1234的值部分點擊Add §將其標(biāo)記為攻擊點。切換到Payloads標(biāo)簽。因為驗證碼是4位數(shù)字我們選擇Payload type為Numbers。設(shè)置From為0To為9999Step為1。為了保持4位格式在Payload Options的Number format中將Min integer digits設(shè)置為4Max integer digits設(shè)置為4。在Options標(biāo)簽中可以設(shè)置線程數(shù)、請求間隔避免觸發(fā)風(fēng)控等。點擊右上角Start attack開始攻擊。攻擊窗口會顯示每個Payload0000到9999的請求狀態(tài)、響應(yīng)長度、響應(yīng)內(nèi)容。通過對比成功請求如狀態(tài)碼200且響應(yīng)內(nèi)容不同和失敗請求的差異找出正確的驗證碼。請注意此操作僅用于授權(quán)測試切勿用于非法攻擊。5. 小程序抓包的特殊性處理微信小程序的抓包原理與APP類似但有其特殊性。小程序運行在微信客戶端內(nèi)其網(wǎng)絡(luò)請求由微信統(tǒng)一管理。證書安裝你需要將Burp的CA證書不僅安裝到模擬器系統(tǒng)還必須安裝到微信的運行環(huán)境中。具體方法是在模擬器內(nèi)打開微信隨意訪問一個外部鏈接如http://www.baidu.com由于你設(shè)置了代理這個請求會被Burp攔截并返回一個證書錯誤頁面。你需要在這個頁面或通過http://burp下載證書并在微信內(nèi)部或系統(tǒng)提示時完成安裝。安卓高版本下微信可能使用自己的證書存儲這步至關(guān)重要。代理設(shè)置小程序的代理設(shè)置依賴于系統(tǒng)代理。因此前面在模擬器Wi-Fi設(shè)置中配置的全局代理通常對小程序也有效。抓包啟動時機有時需要先啟動Burp并開啟攔截再打開小程序才能抓到最初的幾個關(guān)鍵請求如小程序代碼包下載、初始化配置請求。接口識別小程序的請求域名通常需要在其后臺配置且必須是HTTPS。抓包時你會看到大量指向https://servicewechat.com或配置的合法域名的請求。重點分析這些請求中的業(yè)務(wù)API。6. 常見問題排查與進(jìn)階技巧即使按照步驟操作你也可能遇到問題。這里記錄一些典型的“坑”和解決方案。6.1 抓不到任何包Burp History為空檢查代理配置確認(rèn)模擬器Wi-Fi代理中填寫的IP和端口是否正確。IP必須是宿主機的局域網(wǎng)IP不是127.0.0.1??梢栽谀M器瀏覽器訪問http://宿主機IP:8080看是否能打開Burp的頁面。檢查Burp監(jiān)聽確認(rèn)Burp的Proxy-Options中Proxy Listeners有一個運行在8080端口或你設(shè)置的端口的監(jiān)聽器并且綁定在All interfaces或你的宿主機IP上。關(guān)閉防火墻宿主機防火墻可能阻止了模擬器的連接。臨時關(guān)閉防火墻或為Burpjava.exe添加入站規(guī)則。模擬器網(wǎng)絡(luò)模式確保模擬器網(wǎng)絡(luò)是“橋接模式”Bridged而不是NAT模式。NAT模式下模擬器可能無法直接訪問宿主機IP。6.2 HTTPS流量抓取失敗TLS握手錯誤證書未正確安裝確認(rèn)Burp的CA證書已成功安裝到模擬器的“用戶信任的憑據(jù)”中。可以訪問https://www.baidu.com測試如果能抓到包說明證書對普通網(wǎng)站有效。APP證書鎖定如前所述這是最可能的原因。表現(xiàn)是只有該APP無法訪問網(wǎng)絡(luò)或Burp抓到的是CONNECT請求而沒有后續(xù)的HTTP流量。解決方案是使用Frida等工具進(jìn)行動態(tài)脫殼和Hook。一個簡單的檢測方法是嘗試用系統(tǒng)瀏覽器訪問該APP使用的同一個域名如果瀏覽器能正常訪問通過Burp而APP不行基本就是證書鎖定。安卓系統(tǒng)限制Android 7從Android 7開始APP默認(rèn)不再信任用戶安裝的CA證書除非APP的網(wǎng)絡(luò)安全配置明確允許。這需要你修改APP的包或使用已Root的模擬器將Burp證書移動到系統(tǒng)證書目錄/system/etc/security/cacerts/并重命名為特定的哈希值。使用Magisk模塊如Move Certificates可以簡化這個過程。6.3 抓到的請求/響應(yīng)亂碼或加密壓縮編碼檢查Content-Encoding頭如gzip,deflate,br。Burp默認(rèn)會自動解碼這些壓縮格式。如果沒解碼可以在Proxy-Options-Response Modification中確保相關(guān)選項已勾選。自定義二進(jìn)制協(xié)議一些游戲或IM APP可能使用自定義的TCP或UDP協(xié)議如Protobuf。Burp無法直接解析其內(nèi)容顯示為亂碼。你需要找到其協(xié)議文檔或逆向分析其編解碼方式然后使用Burp的Decoder模塊或自定義插件進(jìn)行解碼。應(yīng)用層加密這是越來越普遍的情況。APP在發(fā)送前對請求體甚至部分Header進(jìn)行了對稱或非對稱加密。你看到的是密文。解決方法包括逆向APP找到加密密鑰和算法、嘗試Hook加密函數(shù)獲取明文、或者尋找其Web端或舊版本APP可能存在的未加密接口。6.4 進(jìn)階技巧使用Frida進(jìn)行動態(tài)分析當(dāng)靜態(tài)抓包遇到障礙時Frida這個動態(tài)插樁工具就派上用場了。它可以在APP運行時注入JavaScript代碼來Hook關(guān)鍵函數(shù)如證書驗證函數(shù)、加密函數(shù)、網(wǎng)絡(luò)請求發(fā)送函數(shù)。一個簡單示例Hook常見的證書驗證函數(shù)Java.perform(function() { var Certificate Java.use(java.security.cert.Certificate); var X509Certificate Java.use(java.security.cert.X509Certificate); // Hook checkClientTrusted 和 checkServerTrusted 讓它們什么都不做 var TrustManagerImpl Java.use(com.android.org.conscrypt.TrustManagerImpl); TrustManagerImpl.checkClientTrusted.implementation function(chain, authType) { console.log(Bypassing checkClientTrusted); }; TrustManagerImpl.checkServerTrusted.implementation function(chain, authType, host) { console.log(Bypassing checkServerTrusted for host: host); return chain; // 直接返回證書鏈表示信任 }; });將上述腳本保存為bypass_ssl.js在已Root的模擬器上運行Frida服務(wù)然后在宿主機執(zhí)行frida -U -f com.target.app -l bypass_ssl.js --no-pause即可嘗試?yán)@過該APP的SSL證書驗證。這需要你對目標(biāo)APP有一定逆向分析能力以找到正確的Hook點。整個流程從環(huán)境搭建到深入測試是一個從易到難、不斷解決問題的過程。最關(guān)鍵的還是對HTTP/HTTPS協(xié)議、移動端安全機制的理解以及耐心和細(xì)心。每一次抓包失敗都是一次學(xué)習(xí)其背后原理的機會。