微信小程序测试思路 – 作者:戴维斯基洛杉矶

最近测试小程序比较多,这里总结一下测试方法,先从小程序本地文件包开始;

获取小程序文件包并进行提取

获取文件包

入手目标:手机端、PC端

现在PC也能运行小程序了,按理说也跟手机端类似会有在本地的运行包,但是测试下来MAC的最新版2.5.0(现在2.6.0,依然没找到),没有找到类似wxapkg的文件;

1609731174_5ff28c66350d9dd9ff696.png!small?1609731174504

1609731246_5ff28cae58324836f3dac.png!small?1609731246947

在Windows PC端上,微信小程序wxapkg目录在C:\Users\xxx\Documents\WeChat Files\Applet\wxbxxxxxxxxxxxxxxd0\xx

然后Windows和Android的加密也不一样,应该说Android没有加密,只是编译打包好了,通过特定字节序拆分即可还原;而Windows平台需要解密后才可以还原;

1609731259_5ff28cbb47e2dfd2dafa8.png!small?1609731260116

1609731272_5ff28cc8466108e1bb0b3.png!small?1609731274310

以Android手机微信APP为例;

小程序存在目录为:/data/data/com.tencent.mm/MicroMsg/{UserId}/appbrand/pkg/

顺带IOS的目录为:/var/mobile/Containers/Data/Application/{程序UUID}/Library/WechatPrivate/{用户ID}/WeApp/LocalCache/release/{小程序ID}/

1609731286_5ff28cd6035bbd07a7b5a.png!small?1609731286902

经测试发现,现在的小程序一般都比较大,通常不止一个wxapkg包,会出现分包的情况,一些老的小程序大部分就单个wxapkg包。

文件包格式解析

1609731298_5ff28ce23341b42914bd9.png!small?1609731301572

头部字节前后的块是固定的,可以此来还原;因为移动的还原工具有很多,大佬们的分析也很透彻,这里就不写了;

1609731309_5ff28ced6a8a3c9893712.png!small?1609731311886

文件包还原

1609731322_5ff28cfa8c7bee4d710ff.png!small?1609731323342

导入还原后的数据时会要求包含app.json/project.config.json的目录;测试发现单文件的小程序肯定是有的,但是多文件会在其中一个找到,然后多文件一般需要几个文件都导进去才可以跑起来,不然一片通红。

1609731337_5ff28d09a6873d331d154.png!small?1609731338050

1609731366_5ff28d26772cf63fb5086.png!small?1609731368306

至此,小程序本地文件的提取、还原已经完成,那么我们有哪些测试思路和方向呢?

常规的本地硬编码

如获取开发者的appid和secret等

微信接口测试:

微信公众平台接口调试工具:http://mp.weixin.qq.com/debug/cgi-bin/apiinfo?t=index

开发指南:https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html

获取appid和secret,便可以获取公众号管理权限;

获取access token:https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=SECRET

获取服务器地址:https://api.weixin.qq.com/cgi-bin/get_api_domain_ip?access_token=ACCESS_TOKEN

查询接口-不一定有开通,开通了的话可以查看所有已经开通的接口服务;https://api.weixin.qq.com/cgi-bin/get_current_selfmenu_info?access_token=ACCESS_TOKEN

其他接口要看开通情况来调用。

1609731428_5ff28d64a1a1351121b95.png!small?1609731429439

这里可以简单写个脚本,通过传入appid和secret参数来获取token,然后测试其他开通的接口。

加解密破解、证书验证绕过

现在很多小程序都存在数据加密或者验签操作(现在默认单向证书认证,也就是SSL pinning,可通过justTrustMe绕过,这里说的是双向认证),当需要绕过证书验证,或者解密数据内容时,本地还原的文件可以帮到我们;

接口未授权测试

获取更多的api进行测试,无需遍历各种api字典了;

特殊场景

内部服务未授权访问

测试接口

更多测试场景和思路等待挖掘

小程序相关信息收集

微服务信息收集小技巧:

很多子域名打开为空白页面,或者找不到访问路径的,特别是app.xxx.comwx.xxx.com一类,一般为微信公众号的服务,或者小程序的服务,可以到微信搜索一下关键字;

微信小程序还有一个特别的地方可以看到相关域名;

如图,打开对应小程序,按红圈标记的顺序点开,在更多资料处可以看到相关的域名,以及该微信小程序的appid;

1609731787_5ff28ecb72fa676078e29.png!small?1609731789689

1609731797_5ff28ed5920f778eb14f7.png!small?1609731798793

关于小程序抓包,目前微信小程序做了证书验证,常规APP抓包不可用,可以通过JustTrustMe+xposed的方式来抓;但是有时候觉得微信登来登去太麻烦,或者没有root环境,可以将测试的小程序转发到文件传输助手在PC端打开,然后开启全局代理抓包即可;

1609731825_5ff28ef150577a0039297.png!small?1609731826343
1609731844_5ff28f0489f3fb27bf98e.png!small?1609731845043
1609731856_5ff28f1055dcbfb57df6c.png!small?1609731857164

1609731870_5ff28f1e87ab1a95e7f18.png!small?1609731873210

1609731881_5ff28f2979e65e3f6ed7b.png!small?1609731882850

抓取了接口,获得所需参数,简单写个脚本,这样就可以加入信息收集的工具里面了。

本文作者:杉木@涂鸦智能安全实验室

漏洞悬赏计划:涂鸦智能安全响应中心(https://src.tuya.com)欢迎白帽子来探索。

招聘内推计划:涵盖安全开发、安全测试、代码审计、安全合规等所有方面的岗位,简历投递[email protected],请注明来源。

参考:https://www.hackinn.com/index.php/archives/672/

小程序文件结构:https://lrdcq.com/me/read.php/66.htm

解包工具:https://github.com/leo9960/wechat-app-unpack

Windows PC 微信小程序分析:https://blog.csdn.net/yeyiqun/article/details/109172556

PC解包:https://github.com/kksanyu/pc_wxapkg_decrypt_python

来源:freebuf.com 2021-01-04 11:51:58 by: 戴维斯基洛杉矶

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论