文章来源:奇安信攻防社区(dota_st)
原文地址:https://forum.butian.net/share/1227
0x00 前言
最近好多小伙伴都在问怎么对微信小程序进行渗透,遂写篇文章抛砖引玉。
0x01 环境准备
我使用的是夜神模拟器配合 burpsuite 进行抓包。夜神模拟器我使用的是6.6.1.1
的版本,算是很老的版本了,内设系统为Android5.0
。新的版本中安卓似乎都是7.0以上了,抓取 HTTPS 包会比较麻烦,所以我就一直没有换版本。如果有需要的朋友可以自取,后面会打包云盘在文章底部。
ipconfig
查看我们当前 ip,这里我用的是以太网,也就是插着网线;如果是连着 WIFI,则找对应的即可8888
,可以按照自己需求更改ip:port
,这里的话为192.168.1.102:8888
,点击CA Certificate
下载证书sdcard->Download
目录中可以看到下载下来的证书cacert.der
更名为cacert.cer
,也就是将后缀改成cer
,然后到手机设置->安全中,选择从 SD 卡安装0x02 反编译微信小程序代码
我们在模拟器里登录微信,然后随便选择一个微信小程序打开
data/data/com.tencent.mm/MicroMsg
会生成一个md5加密命名的文件夹(如果打开微信小程序过多,同时有多个文件夹不容易识别的情况,可以选择把MicroMsg
文件夹所有内容删除掉,再去重新打开微信小程序,就会得到唯一一个MD5加密命名的文件夹啦)appbrand/pkg
目录下找到.wxapkg
后缀结尾的文件,其中只有几MB大小的为刚刚打开的小程序的文件mnt/shared/App
目录,打开右上角三个.
的功能菜单选择粘贴选择项,将文件复制到该文件夹https://github.com/ezshine/wxapkg-convertor/releases
0x03 反编译源码代码审计
举例某小程序审计,在登录界面爆破无关之后,直接反编译拖源码审计一下,反编译出来的源码,我们着重看 js 文件及其配置文件即可。第一想法就是先找一些接口,尝试是否有未授权之类的漏洞,下面就是找到的一处路由user/getUserInfoByUsername
username
和school
,于是尝试构造请求发送user/loginByUsernameAndPassword
xxxByXXXId xxxByUsername xxxbyphone ......
0x04 其他类型漏洞案例
下面举例其他类型的漏洞审计案例,这里目的是为了说明小程序有哪些漏洞可以挖
反编译出来的源码泄露登录账号密码,这里是因为在 js 文件中写死了账号密码,只做了前端验证导致的漏洞,从下面贴的两个小程序源码中可以看到
secret
的情况,简直就是把打开保险箱的密码放在你面前token
等鉴权参数,例如GET /api/GetUserInfo?id=xxx&token=xxxx HTTP/1.1
token
参数的值置空或者删除token
参数,往往能 bypass 鉴权,我已经遇见好多次这种情况了。举例一个案例:GET /wx/queryOrders?orderState=&serviceUid=&repairUid=6864&pageNum=1&pageSize=20&uid=6864&token=9938C366-XXXX-XXXX-XXXX-9C7709D8C9E8
uid
参数改成其他用户时,返回权限不足,尝试将token
删除GET /wx/queryOrders?orderState=&serviceUid=&pageNum=1&pageSize=200&uid=2000
下面案例举例一个通过 Cookie 中的参数进行鉴权的漏洞,可以通过修改NetId
中的值来遍历获取用户信息。
使用 burpsuite 抓取管理员登录数据包,获取返回包
login.js
文件登录判断条件中,源码判断返回为 0 时登录成功,所以我们将返回包从 1 改成 0 即可登录成功。当时测试数据的时候,发现添加字符%%
会导致其后端报错,返回appid
和secret
AccessToken
链接:https://pan.baidu.com/s/14_CWuE1GFe3_E1KLcKAt0Q 提取码:nlld
0x05 总结
总的来说,微信小程序的渗透我觉得最重要的还是仔细审计一下反编译得到的源码,常常会有意想不到的惊喜噢~
本文作者:潇湘信安
本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/193629.html