移动端渗透的第一个门槛不是找不到洞,而是根本抓不到包。本文从 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 签名密钥、数据库连接串、未鉴权内部管理接口;找到加密函数后配合抓包密文还原算法,即可篡改参数测越权。
典型链路:抓包 → 富文本编辑器接口 → 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 中转:根证书装到”受信任的根证书颁发机构”,再挂 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 三个实战突破口(脱敏整理)
① 敏感信息泄露:2022 年 6 月后小程序已能检测 AppSecret/云 key 泄露,纯靠它越来越难;但反编译里的正则匹配(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 |