1. Burp Suite抓取APP数据包失败的核心原因解析
作为渗透测试工程师最常用的抓包工具,Burp Suite在移动端测试时经常遇到抓包失败的情况。经过上百次实战测试,我总结出以下六大典型原因及对应的解决方案:
1.1 证书信任链未正确配置
Android 7.0及以上版本的系统默认不再信任用户安装的CA证书,这是导致Burp无法解密HTTPS流量的首要原因。具体表现为能抓到包但内容全是乱码。
解决方案分两种情况:
- 测试自有APP:将Burp的CA证书打包进APP的网络安全配置中
- 测试第三方APP:需要将证书安装到系统级信任区(需root权限)
证书安装后务必验证是否生效:
openssl s_client -connect target.com:443 -showcerts查看输出中是否包含Burp的CA证书链。
1.2 代理设置未生效
常见于以下场景:
- 手机WiFi设置中未正确配置Burp代理(IP和端口错误)
- APP使用了自定义网络库(如OkHttp)且硬编码了代理设置
- 企业级APP启用了证书固定(Certificate Pinning)
诊断方法:
- 先用Charles或Fiddler测试基础代理是否通畅
- 检查APP是否使用了代理检测代码:
if(System.getProperty("http.proxyHost") != null) { // 有代理时触发异常行为 }1.3 网络层防护机制
现代APP常用的防护手段包括:
- VPN检测(检测是否开启虚拟专用网络)
- 双栈网络(同时使用WiFi和移动数据)
- 本地代理检测(检查127.0.0.1:8080等常见代理端口)
绕过方案示例:
adb shell settings put global http_proxy :0 # 清除系统代理 iptables -t nat -A OUTPUT -p tcp --dport 443 -j REDIRECT --to-port 80801.4 应用层协议加密
非HTTP协议(如gRPC、WebSocket)或自定义二进制协议需要特殊处理:
- 使用Burp的Raw套接字功能
- 对protobuf等格式安装对应插件
- 逆向分析APP的解码逻辑
1.5 设备环境检测
典型检测项包括:
- 是否root/越狱
- 是否运行在模拟器
- 是否安装Xposed/Frida等工具
对抗方案:
// 修改Build.prop中的关键字段 ro.build.tags=release-keys ro.build.type=user1.6 服务端防御机制
包括但不限于:
- 请求签名校验
- 时序攻击防护
- 设备指纹绑定
这类问题需要通过反编译分析签名算法,或使用Hook工具动态修改参数。
2. 移动端抓包测试完整方案
2.1 基础环境搭建
推荐测试环境配置:
- 物理手机(非模拟器)
- Android 7.0以下或已root设备
- Burp Suite Professional 2023+
- 配套工具集:
- Frida:动态插桩 - Objection:运行时操作 - Jadx:反编译
网络拓扑示例:
[手机] -> [Burp] -> [外网] ↘ [Fiddler] -> [内网]2.2 证书安装最佳实践
分步操作指南:
导出Burp证书:
openssl x509 -inform der -in cacert.der -out cacert.pemAndroid系统级安装:
adb push cacert.pem /system/etc/security/cacerts/ chmod 644 /system/etc/security/cacerts/<hash>.0验证安装效果:
adb shell settings get global captive_portal_https_url
2.3 高级抓包技巧
2.3.1 突破证书固定
使用Frida脚本示例:
Java.perform(function() { var Certificate = Java.use("java.security.cert.Certificate"); Certificate.verify.implementation = function() { console.log("Bypassing certificate verification"); }; });2.3.2 拦截WebSocket流量
Burp配置要点:
- Proxy -> Options -> WebSocket Proxying
- 添加目标域名和端口
- 使用Repeater模块手动构造WS帧
2.3.3 处理HTTP/2流量
必要设置:
# burp-project-options.ini http2_processing=true force_http1=false3. 实战问题排查手册
3.1 常见错误代码速查
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| ERR_CERT_AUTHORITY_INVALID | 证书不受信任 | 安装系统级CA证书 |
| 403 Forbidden | 代理检测 | 修改iptables规则 |
| 无网络连接 | 双栈检测 | 关闭移动数据 |
3.2 性能优化技巧
- 关闭不必要的Burp模块(如Scanner)
- 设置内存限制:
# vmoptions -Xmx2048m - 使用过滤规则减少流量:
^(?!.*\.(jpg|png|gif)$).*$
3.3 特殊场景处理
3.3.1 小程序抓包
关键步骤:
- 开启微信开发者模式
- 配置代理到Burp
- 解密小程序包体:
unzip -P "微信签名" __APP__.wxapkg
3.3.2 视频流拦截
FFmpeg转发示例:
ffmpeg -i rtmp://source -c copy -f flv "http://burp/target?sign=xxx"4. 安全测试完整流程
4.1 前期信息收集
- 使用Apktool解包:
apktool d target.apk -o output - 分析AndroidManifest.xml:
<uses-permission android:name="android.permission.INTERNET"/> <application android:networkSecurityConfig="@xml/network_security_config">
4.2 动态测试阶段
- 基础流量测试:
- 登录/注册流程
- 敏感接口鉴权
- 业务逻辑测试:
- 订单金额篡改
- 越权访问
- 文件操作监控:
frida-trace -U -i "open*" com.target.app
4.3 报告生成要点
必备内容模块:
- 漏洞详情(请求/响应示例)
- 风险等级评估
- 修复建议:
- 实施双向证书校验 - 关键接口添加动态签名 - 敏感操作二次确认
5. 替代方案对比
5.1 抓包工具横向评测
| 工具 | 优势 | 劣势 | 适用场景 |
|---|---|---|---|
| Burp | 功能全面 | 资源占用高 | 深度安全测试 |
| Charles | 界面友好 | 无主动扫描 | 基础抓包 |
| Fiddler | 脚本扩展 | 仅Windows | 开发调试 |
| Wireshark | 全协议支持 | 学习成本高 | 网络层分析 |
5.2 移动端辅助工具
必备工具链:
- 反编译:
- Jadx-GUI
- JEB
- 动态调试:
- Frida
- Xposed
- 流量分析:
- mitmproxy
- r0capture
6. 法律合规要点
测试注意事项:
- 必须获得书面授权
- 禁止测试生产环境
- 数据脱敏处理:
import hashlib hashlib.sha256(real_data.encode()).hexdigest()[:8] - 报告留存至少6个月
实际测试中我发现,针对金融类APP,建议在凌晨2-5点进行测试,这个时段风控策略往往较为宽松。另外,使用低版本系统(如Android 5.1)的设备成功率会显著提高,但需要注意兼容性问题。