当前位置: 首页 > news >正文

手机HTTPS抓包全链路解析:从代理配置到SSL Pinning绕过

1. 为什么手机HTTPS抓包比电脑难十倍?——先破除三个致命误解

很多人第一次尝试用Burp Suite抓手机App的HTTPS流量时,会卡在“明明配置了代理,手机Wi-Fi也指向了电脑IP,但Burp里就是一片空白”。我带过十几期安全测试新人培训,90%的人栽在这一步。根本原因不是工具不会用,而是对移动设备HTTPS通信的底层信任链机制存在系统性误判。

核心关键词:Burp Suite、手机HTTPS抓包、CA证书安装、SSL Pinning、Android/iOS代理配置。这不是一个“点几下就能通”的功能,而是一场涉及操作系统网络栈、应用层证书验证、开发者安全加固策略的三方博弈。

先说清楚它能做什么:它让你像看明文一样查看手机App与服务器之间所有加密传输的数据结构(如登录凭证、支付参数、API请求体),是接口分析、业务逻辑逆向、漏洞验证(如越权、信息泄露)不可替代的基础能力。适合三类人:刚入行的渗透测试工程师、需要做App兼容性调试的开发、以及想深度理解自己常用App数据流向的资深用户。

但必须直说风险点:这不是“教你怎么黑别人手机”,而是帮你建立对自身设备通信安全的完整认知。你抓的是自己手机、自己安装的App、自己控制的测试环境——任何脱离这个前提的操作,都违背技术伦理与基本法律边界。

我见过太多人卡在第一步,不是因为Burp没装好,而是因为死磕“为什么手机连不上代理”,却从没想过:iOS 15之后默认禁用非系统根证书、Android 7+开始强制应用只信任系统证书存储、而绝大多数国产App早已启用SSL Pinning硬编码校验。这三个事实叠加,让“配好代理=看到流量”成了最危险的幻觉。

所以这篇指南不走“打开Burp→设置监听→手机连代理→大功告成”的快餐路线。我会带你从网络协议栈底层出发,一层层拆解每个环节的验证逻辑、绕过条件和失败信号。比如当你看到Burp里出现“Client Hello”但没有后续握手,那不是Burp挂了,而是手机系统在TLS握手初期就因证书链不被信任而主动断连;当你看到请求进来了但响应全是403或空内容,大概率是App在代码层做了证书公钥锁定(Certificate Pinning),直接拒绝了Burp的中间人证书。

真正的难点从来不在工具操作,而在理解“谁在什么时候、基于什么规则、决定是否放行这条加密通道”。接下来四章,我们就按真实排查顺序,把这堵墙一砖一瓦拆开。

2. Burp Suite基础配置与手机代理链路的物理验证——先让“连接”这件事成立

很多教程跳过这一步,直接教“怎么装证书”,结果学员配完发现Burp里还是空的,第一反应是“证书没装对”。其实80%的失败根源更底层:手机根本没把流量发到Burp监听的端口上。我们必须先确认这条“物理通道”是通的,再谈加密层的问题。

2.1 Burp监听器的精准配置:别用默认端口,也别信“自动配置”

Burp默认监听127.0.0.1:8080,这是本地回环地址,手机根本访问不到。必须改成监听本机局域网IP(如192.168.1.100),且绑定到所有接口(0.0.0.0)。操作路径:Proxy → Options → Proxy Listeners → Edit → Binding

关键细节:

  • Bind to port:建议改用8081或8000,避开Windows某些后台服务(如IIS)对8080的占用;
  • Bind to address:必须选"All interfaces",不能选"Specific address"并手动填IP——某些虚拟网卡驱动会导致填具体IP后实际监听失败;
  • Support invisible proxying (enable only if needed):勾选。这是让Burp能处理非标准HTTP Host头的关键,尤其对某些自定义协议封装的App(如部分IM应用)。

提示:配置完务必点击"Next"完成向导,而不是直接点"Close"。Burp的UI设计有个坑——"Close"按钮会丢弃未提交的变更,且无任何提示。

2.2 手机Wi-Fi代理设置的实操陷阱:iOS与Android的隐藏开关

手机端配置远不止填个IP和端口。两个平台都有极易忽略的“隐形闸门”:

iOS(以iOS 16为例)

  • 进入设置 → Wi-Fi → 当前连接的网络右侧ⓘ图标 → 配置代理 → 手动
  • 填写电脑IP(如192.168.1.100)和端口(如8081);
  • 关键一步:返回Wi-Fi列表页,关闭再重新打开该Wi-Fi开关。iOS的代理配置不会实时生效,必须触发网络重连;
  • 验证方法:在Safari中打开任意HTTP网站(如http://httpbin.org/get),如果Burp里能看到GET请求,说明代理链路已通;若打不开,检查电脑防火墙是否放行了8081端口(Windows Defender默认拦截)。

Android(以Android 13为例)

  • 长按Wi-Fi名称 → 修改网络 → 高级选项 → 代理 → 手动;
  • 填写IP和端口;
  • 致命陷阱:某些定制ROM(如小米MIUI、华为EMUI)在“高级选项”里有**“私有DNS”开关**,默认开启(设为dns.google)。这个功能会强制所有DNS查询走加密DNS,导致代理配置失效。必须将其设为“关闭”或“提供域名”;
  • 验证方法:同iOS,在Chrome中访问http://httpbin.org/get,观察Burp是否捕获。

2.3 物理链路验证失败的四大根因与速查表

当HTTP网站都无法捕获时,按此顺序排查(这是我整理的现场排障清单,已验证上百次):

排查项检查方法典型现象解决方案
电脑防火墙拦截Windows:控制面板→Windows Defender防火墙→高级设置→入站规则,搜索"8081";Mac:系统设置→网络→防火墙→选项→允许传入连接Burp监听端口显示"Listening on 0.0.0.0:8081",但手机ping不通该IP在防火墙中新建入站规则,允许TCP端口8081
电脑多网卡冲突ipconfig(Win)或ifconfig(Mac)查看所有IP,确认Burp绑定的是手机同网段的IP(如手机是192.168.1.x,电脑必须有192.168.1.x的IPv4地址)手机能ping通电脑其他IP(如192.168.1.1路由器),但ping不通Burp绑定的IP在Burp监听器中明确指定该网段IP(如192.168.1.100),而非"all interfaces"
手机与电脑不在同一局域网手机和电脑都运行ipconfig/ifconfig,对比子网掩码和IP段(如都是255.255.255.0 + 192.168.1.x)手机显示"已连接,无互联网访问",或无法解析域名将手机和电脑连接到同一个路由器,禁用手机热点共享、USB网络共享等干扰模式
Burp监听器未启用Proxy → Options → Proxy Listeners,确认状态栏显示"Running"且端口旁有绿色圆点Burp界面无任何请求,状态栏显示"Stopped"点击"Start"按钮,或右键监听器选择"Start listener"

我曾遇到一个极端案例:某台MacBook Pro的Thunderbolt转以太网适配器驱动异常,导致ifconfig显示两个重复的192.168.1.100 IP,Burp随机绑定到其中一个无效IP。解决方案是卸载驱动后重启,或强制在Burp中指定主网卡IP。

这一步的核心目标只有一个:让Burp能稳定捕获HTTP明文流量。只有在此基础上,我们才能进入真正的HTTPS攻坚阶段。记住,SSL/TLS是构建在TCP之上的加密层,如果TCP连接本身都建立不了,谈证书就是空中楼阁。

3. HTTPS流量捕获的生死线:CA证书安装与系统级信任链打通

当HTTP流量能稳定捕获后,下一步必然遭遇“HTTPS流量全军覆没”——Burp里只有零星的CONNECT请求,看不到任何GET/POST内容。这是因为HTTPS在TCP连接之上加了一层TLS握手,而Burp作为中间人,必须让手机“相信”它签发的证书是合法的。这步失败,90%的教程都归咎于“证书没装”,但真相复杂得多。

3.1 Burp CA证书的本质:它不是“软件”,而是一份“数字身份授权书”

Burp生成的CA证书(cacert.der)本质是一个根证书颁发机构(Root CA)的公钥证书。当你把它安装到手机时,你不是在安装一个程序,而是在告诉操作系统:“从此以后,所有由这个CA签发的子证书,我都无条件信任”。

这个动作的权限极高:iOS要求用户手动进入“已下载描述文件”进行安装并在设置中手动开启完全信任;Android则需将证书存入“系统证书存储区”(System Store),而不仅是用户存储区(User Store)。后者正是绝大多数失败的根源——App默认只读取系统证书,忽略用户安装的证书。

3.2 iOS证书安装的完整闭环:从下载到100%信任

iOS的流程最繁琐,但也最规范。漏掉任一环节,HTTPS流量即告失败:

  1. 下载证书:在手机Safari中访问http://burp(Burp默认提供此快捷域名),或直接访问http://[电脑IP]:8080/cert(如http://192.168.1.100:8080/cert);
  2. 安装描述文件:点击下载后,系统弹出“已下载描述文件”,点击“安装”→输入锁屏密码→“安装”;
  3. 启用完全信任:这是最关键的一步!进入设置 → 已下载描述文件 → 点击“Burp Suite CA” → 安装 → 输入密码
  4. 终极授权:进入设置 → 通用 → 关于本机 → 证书信任设置→ 找到“PortSwigger CA” →开启“完全信任”开关

注意:iOS 15+将“证书信任设置”移至“关于本机”底部,且必须在安装后24小时内完成开启,否则证书自动失效。很多用户卡在这里,以为安装完成就万事大吉。

验证是否成功:在Safari中访问https://httpbin.org/get,如果Burp里能看到完整的HTTPS请求和响应(含Headers和Body),说明CA信任链已打通。如果仍为空,检查是否遗漏第4步。

3.3 Android证书安装的双存储困境:为什么“安装成功”≠“App能用”

Android的证书存储分为两层:

  • User Store(用户存储):普通用户可写,位置在/data/misc/user/0/cacerts-added/,但绝大多数App(尤其是Target SDK ≥ 24的应用)默认不读取此目录
  • System Store(系统存储):只读,位于/system/etc/security/cacerts/,App默认信任此处证书,但普通用户无法写入。

因此,常规的“通过设置→安全→加密与凭据→安装证书”操作,只会将证书放入User Store,对HTTPS抓包无效。

正确解法分三类(按可行性排序):

方案A:ADB命令注入系统证书(推荐,无需Root)
适用于Android 7.0+(Nougat)且开启了USB调试的设备:

# 1. 将Burp证书转换为PEM格式(在电脑上执行) openssl x509 -inform DER -in cacert.der -out cacert.pem # 2. 计算证书哈希(关键!Android用哈希名索引证书) openssl x509 -inform PEM -subject_hash_old -in cacert.pem | head -1 # 3. 重命名证书文件为哈希名(如:a1b2c3d4.0) mv cacert.pem a1b2c3d4.0 # 4. 通过ADB推送到系统证书目录(需adb root权限) adb root adb remount adb push a1b2c3d4.0 /system/etc/security/cacerts/ adb shell chmod 644 /system/etc/security/cacerts/a1b2c3d4.0

提示:adb root在部分厂商设备(如华为、小米)上被禁用。此时需用方案B。

方案B:Magisk模块(需Root)
安装Magisk Manager → 模块 → 浏览 → 搜索"Move Certificates" → 安装 → 重启。该模块自动将User Store证书迁移到System Store。

方案C:使用Shizuku+Universal Android Debloater(免Root,但需复杂配置)
通过Shizuku获取系统级权限,再用Debloater的证书管理功能注入。适合技术爱好者,但步骤繁多,此处不展开。

无论哪种方案,最终验证方式相同:在Chrome中访问https://httpbin.org/get,观察Burp是否捕获完整HTTPS流量。若成功,说明系统级信任链已打通。

4. SSL Pinning的终极破解:当App主动拒绝Burp证书时怎么办?

即使CA证书100%安装成功,你仍可能看到Burp里大量HTTPS请求的响应体为空,或返回403/502错误。此时,App极大概率启用了SSL Pinning(证书固定)——一种主动防御机制,App在代码中硬编码了服务器证书的公钥指纹(如SHA-256哈希),在TLS握手完成后,会校验收到的证书是否匹配该指纹。Burp的中间人证书必然不匹配,于是App主动断连或返回错误。

这不是Burp的缺陷,而是开发者刻意为之的安全加固。破解它,需要从App二进制层面入手。

4.1 快速识别SSL Pinning:三秒判断法

在Burp中观察以下特征:

  • 请求发出后,响应状态码为403、401、502,且响应体为空或为JSON错误(如{"error":"ssl_pinning_failed"})
  • 同一域名下,部分请求能正常返回(如图片资源),但关键API请求失败(说明静态资源未启用Pinning,动态接口启用了);
  • 使用curl -v https://target.com在电脑终端测试,返回正常;但手机App访问失败——证明问题在App端,而非服务端。

4.2 动态Hook方案:Frida脚本实现运行时绕过(实测成功率95%)

Frida是目前最主流的动态插桩工具,能在App运行时修改内存中的证书校验逻辑。无需反编译,无需修改APK,实时生效。

操作流程(以Android为例)

  1. 准备环境:电脑安装Python3、pip;手机安装Frida Server(对应CPU架构版本,如arm64)并赋予执行权限(chmod 755 frida-server);
  2. 启动Frida Serveradb shell ./frida-server &
  3. 编写绕过脚本bypass_pinning.js):
Java.perform(function () { var array_list = Java.use("java.util.ArrayList"); var SSLContext = Java.use("javax.net.ssl.SSLContext"); // 绕过OkHttp的CertificatePinner var CertificatePinner = Java.use("okhttp3.CertificatePinner"); CertificatePinner.check.overload('java.lang.String', 'java.util.List').implementation = function (hostname, peerCertificates) { console.log("[+] Bypass CertificatePinner: " + hostname); return; }; // 绕过TrustManager(通用方案) var TrustManagerImpl = Java.use("com.android.org.conscrypt.TrustManagerImpl"); TrustManagerImpl.checkServerTrusted.implementation = function (chain, authType, host) { console.log("[+] Bypass TrustManager for: " + host); return; }; });
  1. 注入执行frida -U -f com.target.app -l bypass_pinning.js --no-pause

实测心得:该脚本覆盖OkHttp 3.x/4.x及Android原生TrustManager。若App使用自定义SSLContext,需在脚本中补充对应类名。Frida的Java.enumerateLoadedClasses()可快速枚举当前加载的所有类。

4.3 静态分析辅助:定位Pinning代码位置(当Frida失效时)

当Frida因加固(如腾讯Legu、360加固)失效时,需回归静态分析:

  • 使用JADX-GUI反编译APK;
  • 搜索关键词:CertificatePinnersetCertificatePinnertrustManagercheckServerTrusted
  • 定位到初始化Pinning的代码(通常在Application或NetworkManager类的onCreate中);
  • 手动修改smali代码,将checkServerTrusted调用替换为return;,再回编译签名。

此法耗时较长,但100%有效。我处理过某银行App,其Pinning逻辑嵌套在三层混淆方法中,通过JADX的“Find Usage”功能逐层回溯,最终定位到a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.check(),修改后完美绕过。

4.4 iOS SSL Pinning绕过:Objection工具链实战

iOS生态中,Objection是Frida的增强版,专为移动安全设计:

# 1. 安装Objection pip3 install objection # 2. 启动Objection(需手机已越狱或使用Frida Gadget) objection -g com.target.app explore # 3. 执行一键绕过 ios sslpinning disable

Objection内置了针对AFNetworking、URLSession、Alamofire等主流框架的Pinning检测与绕过逻辑,比纯Frida脚本更鲁棒。

重要提醒:SSL Pinning绕过仅限授权测试场景。未经许可对他人App实施此类操作,违反《网络安全法》及《刑法》第285条。本文所有技术均假设你在测试自己开发或已获书面授权的应用。

5. 实战收尾:从抓包到价值输出——如何把原始数据变成可落地的成果

抓到HTTPS数据包只是起点,真正的价值在于如何从中提炼信息、验证假设、支撑决策。我总结了一套从“看到数据”到“产出报告”的标准化工作流,已在多个甲方项目中验证有效。

5.1 数据筛选:用Burp的Filter功能聚焦关键战场

面对海量请求,必须快速过滤。我的常用Filter组合:

  • Method = POST:聚焦数据提交行为(登录、支付、表单);
  • Content-Type contains "json" or "form":排除图片、JS、CSS等静态资源;
  • URL contains "/api/" or "/v1/":锁定RESTful接口主战场;
  • Response Code = 200:确保是成功响应,避免分析错误路径。

在Burp的Proxy → HTTP History中,右键选择“Filter by selected filters”,可保存为预设(如“My API Filter”),下次一键加载。

5.2 参数分析:识别敏感字段与业务逻辑入口

以一个典型登录请求为例:

POST /api/v1/login HTTP/1.1 Host: api.example.com Content-Type: application/json {"username":"test","password":"123456","device_id":"abc123","timestamp":1712345678}
  • 敏感字段password(明文传输?应为hash)、device_id(是否用于风控?)、timestamp(是否校验防重放?);
  • 业务线索/api/v1/login路径暗示版本控制,可尝试/api/v2/login探测新接口;Content-Type: json表明后端为Node.js/Java Spring Boot,非PHP传统架构。

我习惯用Burp的Comparer工具,对两个相似请求(如不同账号登录)做差异对比,快速定位动态参数(如token、sign)的生成规律。

5.3 自动化验证:用Burp Intruder爆破弱口令与越权漏洞

抓到登录接口后,立即用Intruder验证安全性:

  • Payloads → Simple list:导入常见弱口令字典(如admin:123456,test:test);
  • Positions:标记usernamepassword为§占位符;
  • Attack type:选择Cluster bomb,实现用户名与密码的笛卡尔积组合;
  • Grep-Match:添加"success":true"token"作为成功标志;
  • Resource pooling:限制并发数为5,避免触发服务端风控。

一次实测中,某政务App的后台登录接口因未做IP限频,10分钟内被爆破出3个测试账号,直接推动甲方修复。

5.4 报告输出:用Burp的Logger++生成可审计的证据链

原始HTTP History导出为XML,难以阅读。我必装插件Logger++

  • 右键请求 → “Send to Logger++”;
  • 在Logger++界面,可按时间、状态码、URL分组;
  • 点击单条请求 → “View in new tab” → 自动生成带语法高亮的Request/Response视图;
  • 导出为HTML报告,包含完整时间戳、请求头、响应体、截图(如需),满足等保2.0三级系统渗透测试报告要求。

最后分享一个血泪教训:某次测试中,我抓到了App上传身份证照片的接口,POST /api/v1/upload?id=123,但未注意id参数是用户ID。后来发现,将id改为其他用户ID,竟能成功上传并覆盖对方照片——典型的水平越权。这个漏洞的价值,远超一百个抓包操作。所以永远记住:抓包不是目的,读懂数据背后的业务规则,才是安全测试的灵魂。

http://www.zskr.cn/news/1373115.html

相关文章:

  • Mininet安装后必做的3件事:从验证到排错,让你的Ubuntu模拟网络即刻可用
  • 你的算法真的强吗?用CEC2017的F21-F30组合函数来场硬核挑战(附Matlab对比测试模板)
  • Keil单用户许可证(LIC)更新与多设备管理指南
  • 2026年当下常德卫生间防水公司实力盘点:优家房屋修缮中心为何备受青睐? - 2026年企业推荐榜
  • 解决Linux内核调试中JTAG连接丢失问题
  • 单向晶闸管调压电路基础知识及Multisim电路仿真
  • 当Harness 热潮褪去:腾讯 AI 团队揭示 AI 工程的真正护城河是知识沉淀
  • Java异常处理机制详解 | 类层次、捕获处理、自定义异常与实战案例
  • 从零开始单细胞分析:手把手教你用Scanpy复现PBMC3K教程(附避坑指南)
  • 从集合运算到代码:一文搞懂Jaccard系数,附Python/NumPy/Pandas三种实现方法对比
  • MNIST识别项目复盘:除了准确率97%,我们更应该关注数据预处理与损失函数的选择
  • 【数据分析】具有随机效应的分数扩散的非参数估计附matlab代码
  • 无设备穿戴式无感定位 优化煤化工厂区人员动线管理
  • 别再死记硬背K-Means代码了!用Educoder实战,5分钟搞懂聚类中心怎么‘动’起来的
  • 【无人船】基于A星算法融合DWA限制内陆水域无人水型导航路径规划附Matlab代码
  • 2026年免费图片去水印保姆级教程:不用下载软件,微信小程序一步搞定
  • 零基础实战逻辑漏洞挖掘:从注册到注销的6大高频场景
  • Keil工具链LPT端口冲突解决方案与配置优化
  • ICLR 2026小米AI 技术深度解读
  • 【DeepSeek版本决策脑图】:基于17类真实场景(金融/教育/客服/代码生成)的精准匹配表
  • Django 从 0 到 1 打造完整电商平台:购物车实现方式分析与模型设计
  • ChatGPT生成图表总“丑”?3步精准调优Prompt+4类D3.js/Plotly适配模板,即刻提升专业度
  • Gemini KYC合规提效实战(2024最新FATF第24号指引适配版):3类高危漏审场景+4套动态阈值配置模板
  • 借助大模型实现多格式文档解析查看
  • 人工智能通识课:深度学习框架 PyTorch
  • LLM:大语言模型的主要任务
  • 卷积神经网络基础与深度学习
  • 钢铁雄心4/Hearts of Iron IV2026官方正版最新版pc免费下载(看到请立即转存 资源随时失效)手机版通用
  • GPT-5.5 智能化全面普及,@ACP# IX、GSV 系列芯片构筑全层级硬件底座
  • 2025-2026年丰宁坝上草原住宿推荐:十大口碑产品评测骑马穿越防迷路市场份额价格 - 品牌推荐