移动端渗透的第一个门槛不是找不到洞,而是根本抓不到包。这次课程从 TLS 握手原理讲起,把”为什么抓不到”和”怎么让它能抓”一次讲透,最后落到小程序的完整测试流程。配套的参考资料里有一篇很全的小程序渗透指北,本文按课程思路整理,工具清单在文末。
0x01 为什么抓不到包:从 TLS 握手说起
正常 HTTPS 握手:
① Client Hello → 客户端发支持的加密套件 + 随机数
② Server Hello → 服务端选套件 + 返回证书 + 随机数
③ 证书校验 → 客户端用内置 CA 根证书链验证服务端证书
④ 密钥协商 → 客户端用服务端公钥加密 pre-master 随机数(RSA 场景)
⑤ 对称加密通信 → 双方用协商出的会话密钥 AES 加密传输
抓包工具(Burp 等)的原理是 MITM:对客户端冒充服务端、对服务端冒充客户端。装了 Burp 证书后,步骤③能骗过普通应用——于是浏览器和大多数 App 都能抓。
但安全要求高的 App 会在代码里再加一层:SSL 证书绑定(SSL Pinning),把预期的服务端证书/公钥硬编码进客户端,握手时额外比对。这就是”装了证书还是抓不到”的原因。绑定分两档:
- 单向绑定:只客户端校验服务端证书(最常见);
- 双向绑定:服务端也校验客户端证书——光装 Burp 证书不够,还得有客户端私钥。
0x02 绕过证书绑定
单向绑定:Frida Hook 校验函数
思路是 Hook 应用里的证书校验逻辑,让它永远返回 true。现成方案按省事程度排序:
# 方案一:objection 一条命令
objection -g 包名 explore
android sslpinning disable
# 方案二:JustTrustMe / 自写 Frida 脚本(Xposed 亦可)
frida -U -f com.target.app -l ssl_pinning_bypass.js
自写脚本盯的目标通常是 X509TrustManager.checkServerTrusted、OkHttp CertificatePinner.check、SSLSocketFactory 这几个点。
双向绑定:两条路
- R0capture:直接在 Java 层(SSLSocket 之上)抓取加密前的明文数据,不跟 TLS 握手纠缠,对双向绑定场景特别省事;
- 提取客户端证书:从 APK 的资源/资产目录里找到带口令的 p12/pfx 客户端证书,提取后安装进 Burp(Options → TLS → Client TLS Certificates),让 Burp 能代表客户端通过服务端校验。
实操提醒(笔记原话的教训):抓包失败先排查环境。我按课上演示复现时代理报错,最后发现是浏览器代理插件在捣乱——先退代理、切无代理模式验证基线,再逐个排除干扰源。
0x03 反编译审计:比抓包看得更全
抓包只能看到”运行时走了哪些接口”,反编译能看到”全部接口 + 硬编码秘密”:
jadx-gui target.apk # 打开即看 Java 源码
# 全局搜索关键词(课堂推荐清单):
# token / key / secret / AK / SK / jdbc / api.
# http://(找内网接口和测试环境)
# encrypt / RSA / AES(加密逻辑定位)
高频产出:云厂商 AK/SK 泄露、第三方 API key、JWT 签名密钥、数据库连接串、未鉴权的内部管理接口。找到加密函数后,配合抓包里的密文对还原加密算法,就能篡改请求参数继续测越权。
课程案例的典型链路:小程序/ App 抓包 → 发现富文本编辑器接口 → Ueditor 未授权文件上传(controller.ashx?action=catchimage 一类)→ 配合文件包含 → RCE。
0x04 微信小程序测试全流程
小程序本质是”逻辑层 JS + 视图层 WXML/WXSS”,测试对象就是 app.js、app.json、各页面 js 和 json 配置。
抓包:Proxifier 转发 PC 微信
PC 版微信小程序的流量用 Proxifier 转 Burp 最省事:
- Proxifier 添加代理服务器指向 Burp 端口;
- 代理规则的目标进程填:
WeChat.exe;WeChatAppEx.exe;WeChatPlayer.exe;WechatBrowser.exe;WeChatAppEx*.exe - Burp 能抓普通网页流量即配置成功。同一套规则连微信内置浏览器也能抓。
Proxifier 不行就 fiddler 中转:fiddler 导出根证书装到”受信任的根证书颁发机构”,再在 fiddler 里挂 Burp 为二级代理。
解包与反编译
小程序包落盘在 微信文件目录/Applet/ 下以 wx 开头的文件夹里,__APP__.wxapkg 是加密包:
# 一键 scan + 解包(推荐):
wxapkg scan -r "D:\WeChat Files\Applet"
# 或传统两步:UnpackMiniApp 解密 → CrackMinApp 反编译
反编译后的源码用小程序开发工具或任意编辑器打开做全局搜索(关键词同 0x03)。注意反编译产物常有缺失,能全局搜索查看即可,不必强求跑起来。
调试模式:给小程序开 F12
WeChatOpenDevTools 通过 hook 偏移地址把小程序窗口当浏览器调出 DevTools(版本敏感,更新后偏移会变;有封号风险,用小号):
pip3 install -r requirements.txt
python main.py -x # 小程序 F12
python main.py -c # 微信内置浏览器 F12
0x05 三个实战突破口(脱敏整理)
① 敏感信息泄露:老文章常写 AppSecret/云 key 直接利用——2022 年 6 月后小程序已支持检测这类泄露,纯靠它越来越难。但反编译里的正则匹配信息收集(http://、phone、token、key)依然高产,接口+数据遍历常有意外收获。
② 弱口令横移:小程序抓到的 xxxxx.com 接口域名,很多浏览器直接就能打开。小程序端测不动时,把域名丢进浏览器看有没有 Web 端后台——案例:图形验证码复用 + 忘记密码处用户枚举 → 爆破进后台。
③ 未授权访问的迂回:接口全 403 时不急着放弃。逐层看:响应头 Access-Control-Allow-Origin 里可能藏着另一个可用域名;405 页面可能写着客服联系方式(案例里加 QQ 客服对方直接说明”仅限某省 IP 访问”——改省内 IP 后一发入魂)。发现一个可用的未授权接口后,任意文件下载这类功能可以按”下载行为”和”信息泄露”拆成两个漏洞提交。
0x06 课程展望:AI 时代的安全岗
课上最后给的趋势判断值得记下:AI 让自动化渗透(反编译、扫描、payload 构造)的效率大幅提升,攻击门槛下降 → 防守需要覆盖的面和难度远高于单点攻击 → 安全岗位会更多向防守倾斜(WAF/安全策略/AI 对抗)。这对求职方向的选择是个参考信号。
工具清单
| 用途 | 工具 |
|---|---|
| 流量转发 | Proxifier、fiddler |
| 证书绑定绕过 | Frida + JustTrustMe、objection、R0capture |
| 反编译 | jadx-gui |
| 小程序解包 | wxapkg(wux1an)、UnpackMiniApp、CrackMinApp |
| 小程序调试 | WeChatOpenDevTools-Python |