前言

做安全测试的都会遇到测试某微信小程序,而微信小程序基本都是基于HTTPS的,所以抓取HTTPS数据包就是最关键的一步。最近几天折腾了一下,整理了比较简单、方便的三种方法。

条件

抓取微信小程序数据包的关键点,就是SSL证书绑定的问题。
在安卓系统7.0以下的版本,不管微信是什么版本,都会信任系统提供的证书,而现在微信版本已经到了7.0.15 且安装老版本也会强制用户升级,且微信只信任系统及自身内置的证书。
具体如下

安卓系统7.0以下:微信的任意版本,都会信任用户提供的证书
  安卓系统7.0以上:微信7.0以下版本,微信会信任用户提供的证书
  安卓系统7.0以上:微信7.0以上版本,微信只信任系统及自身内置的证书

IOS不做探讨。
实验环境
Redmi Note 4X 手机(未ROOT)

Android 手机:MIUI 11.0.2
  Android 内核版本:7.0
  微信:WeChat 7.0.15

MuMu 模拟器 版本:1.9.15

Android 内核版本:6.0.1
  微信:WeChat 7.0.10
  VirtualXposed :0.15.1

XPosed 和 JustTrustMe 抓包

简介:XPosed 是一个框架,用来改变系统的某些关键操作。JustTrustMe 用来禁用、绕过SSL 证书验证。

使用这种方法进行抓包的时候要求安卓手机必须需要ROOT。
所以我这里采用网易MuMu模拟器。
官网直接下载MAC版本,安装。Android 内核版本为6.0.1。

微信小程序抓包(抓取微信小程序数据包的三种方法)(1)

image.png

先安装XPosed,下载地址为:https://repo.xposed.info/module/de.robv.android.xposed.installer

微信小程序抓包(抓取微信小程序数据包的三种方法)(2)

image.png


Android 版本5.0 以上点击该链接。

image.png


来到该页面。点击apk下载并安装到网易MuMu模拟器。

image.png

安装Xposed框架。

image.png

注意这里设置MuMu开启ROOT权限。否则安装不成功。

image.png

勾选"开启ROOT权限"。解决"Failed to get root access"错误。

image.png

下载安装以后。

image.png

点击"允许",之后重启设备。

image.png

image.png

显示Xposed框架成功激活。

接下来下载安装JustTrustMe。github直接下载后拖进MuMu模拟器即可。
在Xposed install 中选择模块,勾选"JustTrustMe"

image.png

重启设备后即可抓取微信小程序数据包。
配置手动代理。

image.png

burpsuite添加Proxy。即可抓取数据包。

image.png

VirtualXposed 和 JustTrustMe 抓包

简介:和上一种方法原理一样。都是利用的Xposed框架和JustTrustMe模块。只不过可以在非ROOT环境下运行。这是因为VirtualXposed是基于VirtualApp和epic在非ROOT环境下运行Xposed框架的实现。

我这里选择安装在红米非ROOT的安卓手机上。

image.png

VirtualXposed 下载地址 https://github.com/android-hacker/VirtualXposed/releases
我这里下载的是0.15.1版本。

image.png

安装完成显示Xposed框架为激活状态。
接着下载JustTrustMe,从github下载后,再将JustTrustMe克隆安装在VirtualXposed中,并启用JustTrustMe模块。

image.png

image.png

重启设备。再将需要抓取数据包的app(微信)克隆到VirtualXposed中。

image.png

image.png

打开微信的小程序。
并在手机的网络上配置代理。burpsuite抓包即可。


image.png

image.png

坑点
在VirtualXposed打开微信时,有可能提示"打开应用 com.tencent.mm 失败"。尝试从老版本微信更新有可能解决该问题。

Burp CA抓包

简介:在一台已经ROOT环境的设备上,如模拟器,把burp CA证书安装在系统可信任证书中,来抓取微信小程序的数据包。条件是微信版本7.0以下

先导出burp CA证书,以DER格式导出CA证书,保存为cacert.der。

image.png

image.png

Android使用PEM格式的证书,并且文件名为subject_hash_old值并以.0结尾,存储在/system/etc/security/cacerts目录下。我们需要使用openssl工具将DER转换成PEM,然后输出subject_hash_old并重命名该文件。
命令为

openssl x509 -inform DER -in cacert.der -out cacert.pem  
  openssl x509 -inform PEM -subject_hash_old -in cacert.pem |head -1  
  mv cacert.pem <hash>.0

在MAC终端上依次运行以上命令。

image.png

本地就会输出9a5ba575.0文件。

image.png

然后将该证书文件拷贝到MuMu模拟器的/system/etc/security/cacerts 目录下。

image.png

配置网络代理,burp即可抓取微信小程序数据包。

image.png

注意:这里测试的是微信 6.6.0版本(从PP助手的历史版本下载来的)。测试微信7.0版本无法抓取HTTPS数据包。

总结

力所能及,没有太复杂的流程,但这三种方法也并非完全的一劳永逸。