ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Burp Suite移动端抓包失败原因与解决方案

Burp Suite移动端抓包失败原因与解决方案

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)

诊断方法:

  1. 先用Charles或Fiddler测试基础代理是否通畅
  2. 检查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 8080

1.4 应用层协议加密

非HTTP协议(如gRPC、WebSocket)或自定义二进制协议需要特殊处理:

  1. 使用Burp的Raw套接字功能
  2. 对protobuf等格式安装对应插件
  3. 逆向分析APP的解码逻辑

1.5 设备环境检测

典型检测项包括:

  • 是否root/越狱
  • 是否运行在模拟器
  • 是否安装Xposed/Frida等工具

对抗方案:

// 修改Build.prop中的关键字段 ro.build.tags=release-keys ro.build.type=user

1.6 服务端防御机制

包括但不限于:

  • 请求签名校验
  • 时序攻击防护
  • 设备指纹绑定

这类问题需要通过反编译分析签名算法,或使用Hook工具动态修改参数。

2. 移动端抓包测试完整方案

2.1 基础环境搭建

推荐测试环境配置:

  • 物理手机(非模拟器)
  • Android 7.0以下或已root设备
  • Burp Suite Professional 2023+
  • 配套工具集:
    - Frida:动态插桩 - Objection:运行时操作 - Jadx:反编译

网络拓扑示例:

[手机] -> [Burp] -> [外网] ↘ [Fiddler] -> [内网]

2.2 证书安装最佳实践

分步操作指南:

  1. 导出Burp证书:

    openssl x509 -inform der -in cacert.der -out cacert.pem
  2. Android系统级安装:

    adb push cacert.pem /system/etc/security/cacerts/ chmod 644 /system/etc/security/cacerts/<hash>.0
  3. 验证安装效果:

    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配置要点:

  1. Proxy -> Options -> WebSocket Proxying
  2. 添加目标域名和端口
  3. 使用Repeater模块手动构造WS帧
2.3.3 处理HTTP/2流量

必要设置:

# burp-project-options.ini http2_processing=true force_http1=false

3. 实战问题排查手册

3.1 常见错误代码速查

现象可能原因解决方案
ERR_CERT_AUTHORITY_INVALID证书不受信任安装系统级CA证书
403 Forbidden代理检测修改iptables规则
无网络连接双栈检测关闭移动数据

3.2 性能优化技巧

  1. 关闭不必要的Burp模块(如Scanner)
  2. 设置内存限制:
    # vmoptions -Xmx2048m
  3. 使用过滤规则减少流量:
    ^(?!.*\.(jpg|png|gif)$).*$

3.3 特殊场景处理

3.3.1 小程序抓包

关键步骤:

  1. 开启微信开发者模式
  2. 配置代理到Burp
  3. 解密小程序包体:
    unzip -P "微信签名" __APP__.wxapkg
3.3.2 视频流拦截

FFmpeg转发示例:

ffmpeg -i rtmp://source -c copy -f flv "http://burp/target?sign=xxx"

4. 安全测试完整流程

4.1 前期信息收集

  1. 使用Apktool解包:
    apktool d target.apk -o output
  2. 分析AndroidManifest.xml:
    <uses-permission android:name="android.permission.INTERNET"/> <application android:networkSecurityConfig="@xml/network_security_config">

4.2 动态测试阶段

  1. 基础流量测试:
    • 登录/注册流程
    • 敏感接口鉴权
  2. 业务逻辑测试:
    • 订单金额篡改
    • 越权访问
  3. 文件操作监控:
    frida-trace -U -i "open*" com.target.app

4.3 报告生成要点

必备内容模块:

  1. 漏洞详情(请求/响应示例)
  2. 风险等级评估
  3. 修复建议:
    - 实施双向证书校验 - 关键接口添加动态签名 - 敏感操作二次确认

5. 替代方案对比

5.1 抓包工具横向评测

工具优势劣势适用场景
Burp功能全面资源占用高深度安全测试
Charles界面友好无主动扫描基础抓包
Fiddler脚本扩展仅Windows开发调试
Wireshark全协议支持学习成本高网络层分析

5.2 移动端辅助工具

必备工具链:

  1. 反编译:
    • Jadx-GUI
    • JEB
  2. 动态调试:
    • Frida
    • Xposed
  3. 流量分析:
    • mitmproxy
    • r0capture

6. 法律合规要点

测试注意事项:

  1. 必须获得书面授权
  2. 禁止测试生产环境
  3. 数据脱敏处理:
    import hashlib hashlib.sha256(real_data.encode()).hexdigest()[:8]
  4. 报告留存至少6个月

实际测试中我发现,针对金融类APP,建议在凌晨2-5点进行测试,这个时段风控策略往往较为宽松。另外,使用低版本系统(如Android 5.1)的设备成功率会显著提高,但需要注意兼容性问题。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进