前言
最近参加了一个内测项目,web应用完全找不到什么漏洞,刚好直接目标定位到了该厂商二开的公众号以及小程序小程序中获取到了突破点,顺便分享一下,小程序的解包以及漏洞挖掘。
工具
Nodejs
unpackMiniApp
unveilr
微信开发者工具
解包
找到微信文件存储位置Applet下,打开小程序时生成后缀为.wxapkg
的文件

工具unpackMiniApp
解包

工具unveilr
反编译

文件夹wxpack下成功反编译小程序后的文件


根据小程序的解包对文件进行分析,发现在某js文件中存在微信公众号的appid和secert

利用api调用工具进行利用,获取到了accesstoken
工具下载地址

但是对于公众号的Appid的Appsecert的利用需要注意的两点
- 获取 access_token 需要在微信公众平台上进行开发者认证,并且只有通过认证的公众号才能够正式使用相关接口和功能。
- 获取access_token需要出口IP在白名单中,否则即便获取到appid 和 secret也无法利用
下图为用户的接口权限,(该接口权限为我自己公众号说明使用)

但是在这个项目中,比较好奇的是,这个公众号的access_token可直接获取,并未报错ip不再白名单,如ip不在白名单,报错如下
接口请求说明
https请求方式: GET

获取到access_token,测试其它接口

获取到客服账户列表,修改客服账号

成功修改

查询接口分组

结束收工。
小结
小程序进行解包时尽可能所有的功能都访问一下,但是解包本身和小程序直接抓包存在区别
- 微信解包的代码是经过加密处理的:微信小程序的开发者工具会将小程序中的 js、wxml、wxss 等文件进行加密,并生成 .wcc、.wxmlc、.wxss 等格式的文件。因此,通过解包可以将其还原成原始的代码文件。
- 微信解包的代码包含了微信小程序的框架和 API:解包后的小程序代码包含了微信小程序独特的框架和 API,例如 app.js、page.js、组,由于微信小程序的框架和 API 都是基于微信的特定环境设计的,因此通过解包得到的代码可能存在与浏览器或其他环境不兼容的情况,需要进行适当的调整和优化才能在其他环境中正常运行。
- 前端抓到的 js 代码缺少小程序的特定环境和 API:前端抓到的 js 代码只是小程序前端展示部分的代码,不包含小程序的框架和 API 等内容。
关于小程序和微信公众号的AppID和Secert的利用需要注意几点
- 目前调用接口均需要出口地址在白名单
- 大部门接口调用权限被限制无法进行调用
类似的密钥泄露风险利用同样比较难利用的有几个
- 地图密钥----导致资源被浪费风险增加
- 钉钉密钥-----白名单地址限制
- 钉钉机器人密钥-----白名单地址限制
这些类型的泄露风险等级在利用上利用难度不大的情况下,最终研判审核的风险等级相对来说较低。