
概述
今天讲讲微信小程序渗透,无论是护网、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
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)