概述

今天讲讲微信小程序渗透,无论是护网、src挖掘、攻防演练,微信小程序都可以成为突破口

​

微信小程序和普通网页渗透相比有以下不同点:

1、抓包方式不同,不能直接进行抓包

2、不能直接进行调试,如果遇到小程序进行了加密传输,这种情况就比较棘手

3、微信小程序有自己特有的漏洞

4、某些微信小程序会进行一些限制,增加了测试难度

​

针对以上情况,我会分为四个章节逐一进行解答:抓包篇、逆向篇、漏洞篇、技巧篇

微信小程序渗透本质和浏览器网页渗透没啥区别,解决了这些不同点就可以像正常网页一样测试了

抓包篇

方法一:ProxyPin+Burpsuite对小程序进行抓包

proxypin是一个开源免费抓包工具,支持Windows、Mac、Android、IOS、Linux 全平台抓包。

​

优势:

脚本: 支持编写JavaScript脚本来处理请求或响应。

请求重写: 支持重定向,支持替换请求或响应报文,也可以根据增则修改请求或或响应。

请求屏蔽: 支持根据URL屏蔽请求,不让请求发送到服务器。

​

①安装证书

安装证书到本系统,选择“受信任的根证书颁发机构”

②成功抓包

③将流量转发到burpsuite

④不想被抓包的域名添加到代理域名黑名单后,将不会抓相关域名的数据包,可以减少发送到burpsuite的数据包,减少burpsuite处理的数据,提升速度,尤其是开了被动扫描插件的情况下。

方法二:Proxifier+Burpsuite对小程序进行抓包

Proxifier是一个功能强大的网络代理工具,可以进行流量转发,可自定义灵活度很高。

​

①添加代理服务器

代理端口需要与burpsuite端口保持一致

②创建规则

WeChatApp.exe;WechatBrowser.exe;WeChatAppEx.exe

③成功抓包

如果配置完成后,无法抓包,将微信退出重新登陆后再进行尝试

逆向篇

一、微信小程序开启devtools

使用大佬写的WeChatOpenDevTools工具,即可一键开启devtools。建议使用小号,避免微信被封。不是每个微信版本都可以开启devtools,很多会开启失败,我这里为大家准备了一个可以使用的微信版本

​

①安装依赖库

pip3  install -r requirements.txt

​

②开启微信小程序中的F12(devtools)

直接运行以下命令

python main.py -x

③打开要开启DevTools的小程序,即可自动hook开启DevTools(如果已经打开小程序,点击重新进入小程序也行)

python main.py -c

④开启微信自带浏览器中的F12(devtools)

开启3分钟,踩坑3小时,本身开启这个操作非常简单,但是有很多坑,下面讲讲遇到的坑:

1.我这里使用的python3.10,某些低版本的python,可能没有requirements文件中16.1.11版本frida的依赖库,安装时会报错,如果自己指定安装一个低版本的frida,可能会出现其他问题,如果不嫌麻烦可以逐个版本调试

​

2.新版本的微信直接安装老版本微信无法开启devtools,我这里采用的Uninstall Tool将新版的微信直接卸载了(删除了注册表),然后安装老版本的微信就可以了,应该是之前覆盖安装或者卸载有残留

​

3.开启开启微信自带浏览器中的F12时,如果提示"请退出所有微信实例后再执行该命令",需要先退出微信

​

二、微信小程序反编译

①使用 wxapkg.exe scan 命令来扫描所有小程序。需要联网
获取小程序的名称、路径、wxid(用于后续解密)等信息

②使用键盘上下键选中想要处理的小程序,选中以后,点击enter键即可执行解密+解包

③如果这里没有看到你要反编译的小程序,可以将要测试的程序添加到自己的小程序,然后再重新进入查看。添加以后,进入小程序查看,如果还没有发现要测试的小程序,点击重新进入小程序然后再查看

​

④反编译成功

⑤反编译成功后的文件

漏洞篇

一、敏感信息泄露

上面已经对小程序进行了反编译,可以查看源码中是否有acesskey、身份证、手机号、密码等敏感信息泄露,但是手工逐个查找的话会比较麻烦,这里准备了一个脚本(脚本只能说能用,谈不上规范),这个脚本可以从js文件中获取这些敏感信息。

​

①首先筛选出反编译后的js文件

我这里使用的everything进行快速筛选,首先打开全字匹配

然后使用查询语句筛选出js文件

path:反编译后的目录 .js

②将筛选出的js文件复制出来放到一个目录中,使用脚本进行敏感信息查询

python secertinfo.py js文件所在目录

③获取到的手机号、密码、ip等可用于后续渗透测试。

​

二、任意用户登录

微信小程序如果采用了开发者后台校验与解密开放数据,可能存在任意用户登录漏洞。如果数据包中泄露了sessionkey和iv,那我们可以通过AppletPentester插件对数据包进行加解密,可以将用户手机号修改为任意手机号,也可以修改其他信息,从而造成任意用户登录。

​

①如何快速发现数据包中的sessionKey,从而进行后续的判断

这里使用burpsuite的hae插件规则进行匹配

(sessionKey)

②获取到sessionKey和iv以后如何对数据包进行加解密

这里使用burpsuite的AppletPentester插件进行加解密

技巧篇

测试微信小程序可能会遇到很多奇奇怪怪的问题,这里做一下记录,希望对师傅们有所帮助,当然你们遇不到更好。

​

一、解决功能点无法加载的问题

有些小程序在手机端打开正常,但是电脑端打开一直显示在加载,或者某些功能点点击没反应

​

我们可以在手机上点击要测试的功能点,然后复制链接,再从电脑端进去,就可以解决这个问题(注意是复制链接,分享小程序不可以)


链接是这种形式的

#小程序://中国电信App/8zsyCcxJscGz0QA

​

二、微信小程序只能手机打开

直接使用电脑打开微信小程序时提醒只能使用手机打开,我们可以先在手机端打开该小程序,然后这时电脑端就会显示手机刚才打开过的小程序,从这里打开即可绕过。


三、如何更便捷的进行真机测试

有时候测试越权漏洞可能需要两个微信进行测试,你可以选择电脑和模拟器,但是我习惯性电脑和真机进行测试,真机测试存在一个问题就是一边操作真机,一边看电脑,两个屏幕来回看不是很方便,我一般是用手机投屏到电脑,这样更方便测试。

​

我使用的投屏工具是QtScrcpy手机投屏,先将手机用usb连接电脑,读取到手机后,选择一键wifi连接(我一般喜欢用这个连接模式),连接上以后,拔掉usb将手机放一边,就可以只在电脑上进行真机测试了。这个软件对于很多做了真机检测的app来说,挺好用的。

相关工具

所有工具打包:

https://pan.quark.cn/s/d4d10bb0d3ee

​

ProxyPin:

https://github.com/wanghongenpin/network_proxy_flutter

​

微信:

https://github.com/tom-snow/wechat-windows-versions/releases/download/v3.9.10.27/WeChatSetup-3.9.10.27.exe

​

WeChatOpenDevTools:

https://github.com/JaveleyQAQ/WeChatOpenDevTools-Python