一、前言

日常做web或者工控相关的渗透测试,偶然的机会接了个微信小程序的项目,研究了一下

二、初探

我是将微信装在了模拟器上,不需要模拟器也可以,方法有很多

不需要模拟器可直接设代理 burpsuite 抓包

我使用的是夜神模拟器配合 burpsuite 进行抓包,我的夜神模拟器内设系统Android 5.0的版本,版本老的话易于兼容,新的版本都是7.0以上,抓取 HTTPS 包需要配置一些东西,很麻烦,大家可以按照我的版本搭建。

接下来开始配置抓包环境

ipconfig查看一下我们本机的ip

在burpsuite添加上代理,端口可随意设置,无要求

打开夜神模拟器,在 WLAN 选择手动代理,并设置代理地址和代理端口,与 burpsuite 的设置对应

保存后,打开浏览器访问ip:port,我这里是192.168.201.96:8888,点击CA Certificate下载证书

由于我这边之前安装好了,详细说一下操作步骤吧
下载好证书后,打开文件管理器,在sdcard->Download目录中可以看到下载下来的证书

将cacert.der更名为cacert.cer,也就是将后缀改成cer,然后到手机设置->安全中,选择从 SD 卡安装


安装好了后,打开浏览器访问百度看看,burpsutie能抓包就说明环境配置成功了

反编译微信小程序代码包

在模拟器登录上微信,访问一个小程序,等到小程序全部加载完了后,就可以在模拟器中找到一个文件夹,里面便存放着小程序的代码包

打开文件管理器,在data/data/com.tencent.mm/MicroMsg会生成一个md5加密命名的文件夹(如果同时有多个文件夹不容易识别的情况,可以选择把MicroMsg文件夹所有内容删除掉,再去重新打开微信小程序,就会得到唯一一个MD5加密命名的文件夹啦,其实看一下文件创建时间就能知道是哪个了)

在该文件夹下的appbrand/pkg目录下找到.wxapkg后缀结尾的文件,其中只有几MB大小的就是刚刚打开的小程序的代码包了

点击勾选之后,来到根目录下的mnt/shared/App目录,打开右上角三个.的功能菜单选择粘贴选择项,将文件复制到该文件夹


这个文件夹是与你电脑本机的共享文件夹,点开电脑文件夹,打开文件夹“AppShare”,就能查看到这个代码包了


接下来将这个文件进行反编译得到源码

1、需要配置Nodejs环境(下载地址:https://nodejs.org/zh-cn/download)
2、下载反编译工具(下载地址:https://wwi.lanzouq.com/i4CM8zr395e)
3、大多数的小程序代码包会有加密,附上一个解码工具(下载地址:https://wwi.lanzouq.com/iPqZbzr3a2h)

简单讲一下配置nodejs环境:
根据自己电脑系统及位数选择,我这里选择windows64位.msi格式安装包,因为不想再配环境变量了,安装的时候默认自己配了

.msi和.zip格式区别:

.msi是Windows installer开发出来的程序安装文件,它可以让你安装,修改,卸载你所安装的程序。说白了.msi就是Windows installer的数据包,把所有和安装文件相关的内容封装在一个包里。
.zip是一个压缩包,解压之后即可,不需要安装

安装完成后,.msi格式的安装包已经将node.exe添加到系统环境变量path中,如果你下载的是.zip格式,因为没有安装过程,所以需要手动将node.exe所在目录添加到环境变量path中,查看系统变量验证

安装好后验证一下,打开CMD窗口输入node -v查看版本

接下来安装脚本运行环境,依次输入下列命令

npm install esprima -g
npm install css-tree -g
npm install cssbeautify -g
npm install vm2 -g
npm install uglify-es -g
npm install js-beautify -g
npm install escodegen -g


全部安装好了后,下面开始正式反编译了!
1、首先将之前获取的代码包解密,利用解密工具,很幸运的是,我访问的这个小程序代码包未加密

2、将下载好的反编译工具wxappUnpacker解压,打开文件夹,在该文件夹打开cmd

3、输入命令node wuWxapkg.js 代码包所在位置,回车即可开始反编译


结束后就可在代码包的位置出现一个同名的文件夹,该文件夹就是反编译成功的源码包啦

源码包拿到后,就可以很舒服的看js代码了
首先挨个js文件点开看,js编程很灵活,招架不住文件太多了,直接上工具!
代码审计工具大家应该都用过,我这里推荐我用的审计工具Fortify SCA ,审计速度快但误报不少,还算好用,界面简单明了
这里发现有很多地方存在硬编码加密密钥漏洞,任何有权访问代码的人都可以访问加密密钥。应用程序发布后,除非对程序进行修补,否则无法更改加密密钥。有权访问此信息的员工可以使用此信息闯入系统。如果攻击者可以访问应用程序的可执行文件,他们可以提取加密密钥值。危害还是很大的。

收获不多,但初探过程很有意思,大家可以试一试

三、下面附上某社区的文章,同样是对微信小程序的,比较详细的审计及漏洞验证方法,供大家学习

其他类型漏洞案例
下面举例其他类型的漏洞审计案例,这里目的是为了说明小程序有哪些漏洞可以挖

信息泄露

反编译出来的源码泄露登录账号密码,这里是因为在 js 文件中写死了账号密码,只做了前端验证导致的漏洞,从下面贴的两个小程序源码中可以看到


在时间稍稍往前的小程序中,还经常会有泄露小程序secret的情况,简直就是把打开保险箱的密码放在你面前

未授权接口

仔细翻找 js 文件能找到不少未鉴权的 api 接口(可以着重注意配置文件,不少配置文件都会写上路由列表),例如该 api 返回大量用户敏感信息

测试未授权时,有一些小技巧:例如当在 GET 或者 POST 传参中有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中的值来遍历获取用户信息。此类漏洞的挖掘在鉴权处的源码,审计时可以着重审计其验证流程

当时也是依靠这个漏洞获取到 VPN 账号密码,得以进入内网渗透

逻辑漏洞

使用 burpsuite 抓取管理员登录数据包,获取返回包

该处在login.js文件登录判断条件中,源码判断返回为 0 时登录成功,所以我们将返回包从 1 改成 0 即可登录成功。

还有 任意密码重置 ,该处漏洞倒也是在黑盒中无意发现,在修改密码处需要验证对应账号接收到的短信验证码。但怀着尝试的心态通过 buspsuite 抓包绕过 js 限制,随意填写验证码便可以重置任意用户密码,不细心就会很容易忽视的点

appid和secret的利用

当时测试数据的时候,发现添加字符%%会导致其后端报错,返回appid和secret


获取到的appid和secret可以到微信的官方接口去自由生成微信小程序的命脉AccessToken

拿到 AccessToken,相当于可以控制整个小程序了,并且 AccessToken 微信每天只能生成20次,不断请求满20次的话可以使小程序崩溃无法使用。

写到最后

个人感觉,微信小程序的渗透我觉得最重要的还是仔细审计一下反编译得到的源码,源码里才都是宝贝

初探微信小程序渗透测试相关推荐

  1. 微信小程序渗透测试技巧-小程序解包-反编译

    微信小程序渗透测试技巧-小程序解包-反编译 简述 安装手机模拟器,比如说夜神.MuMu 下载和安装两个应用,微信和RE文件管理器 获取root权限 打开微信,搜索相对应的小程序,然后再打开RE文件管理 ...

  2. 微信小程序渗透测试技巧

    随着小程序数量的爆发式增长,其特有的安全风险也逐步凸显出来.本文基于微信小程序测试过程中的解包及抓包的技巧,总结下微信小程序安全测试的思路. 1.小程序解包(反编译) (1)安装手机模拟器,比如说夜神 ...

  3. 安卓APP和小程序渗透测试技巧总结

    安卓APP和小程序渗透测试技巧总结 免责声明: 安卓7以上抓取https流量包 证书信任 首先安装OpenSSL,此步骤不再赘述,可以参考百度. 然后安装模拟器(我使用的是夜神模拟器). 导出需要的证 ...

  4. 【狼人杀plus全记录】没有公网IP照样完美解决微信小程序本地测试问题,超简单方法!

    前文:在开发微信小程序后台的时候,我们需要使用域名进行跳转访问,按照传统的思路我们的域名只能填写一个公网IP,然而多数情况下我们并没有公网IP 方法非常简单,有两种思路: 第一种,将域名定向到局域网I ...

  5. uniapp如何真机测试、微信小程序端测试与模拟器测试

    1.uniapp如何在真机测试 首先,你的手机要打开开发者模式,下拉选择USB调试(各个手机开发开发者模式的方式不同,不懂如何打开USB调试的可以百度搜索). 接着连接数据线,选择文件传输. 最后在H ...

  6. 微信小程序提供测试账号微信小程序开发注意事项

    小程序消息推送至公众号(服务号) 可以通过小程序openid推送到公众号(服务号),要求如下 小程序和公众号的主体需要保持一致 在公众号中需要关联小程序: 消息模板 消息模板库中的模板在不同公众号引用 ...

  7. 微信小程序 需要测试帐号 审核不通过的解决办法

    问题: 1:小程序可用性和完整性不符合规则: (1):(1)需要测试帐号 请将测试帐号发送至邮箱 AppTestAcc@tencent.com.邮件请以[测试帐号]XXX小程序"为主题,并在 ...

  8. 小程序mysql+php测试,分享微信小程序的一些常见辅助测试功能:chance

    我们我们要介绍的是一款微信小程序辅助测试工具:Chance!Chance是一个 JavaScript 随机数生成工具,当我们再测试小程序的一些功能时可能会需要一些随机的电话号码,邮编啊,名字啊,cha ...

  9. 新版微信小程序即将上线 新增微信支付功能

    <经济参考报>消息,新版微信小程序正在测试中,有可能将在近期正式上线.新版小程序增加了"附近门店"功能的接口,微信用户可以通过定位功能,查看提供线下服务的各类门店,并直 ...

  10. 微信小程序联盟:官方文档+精品教程+demo集合(12月更新……)

    1:官方工具:https://mp.weixin.qq.com/debug/w ... tml?t=1476434678461 2:简易教程:https://mp.weixin.qq.com/debu ...

最新文章

  1. 操作系统学习笔记 第五章:文件管理(王道考研)
  2. 用python让excel飞起来 pdf_电脑卡?用u盘制作一个提速工具飞起来
  3. 用Python画一只蝙蝠
  4. python执行shell脚本、执行mongodb_Mongo shell 的基本操作和 Python shell 中使用 MongoDB...
  5. MySQL Cookbook学习笔记第四章
  6. 为什么当代人越来越不快乐?
  7. NY : 括号匹配问题
  8. Simulink之单管非隔离直流斩波器
  9. MVC简单实现插件Demo-从底层理解MVC路由匹配浏览器请求的URL
  10. Win1远程出现“这可能是由于credssp加密oracle修正”解决办法
  11. 路径标记语法 in Windows Presentation Foundation(WPF)
  12. 关于报表在移动端展现你需要知道哪些?
  13. Python实现微信自动抠图换底助手
  14. javasocket编程面试题,小白也能看明白
  15. 黑苹果10.13.6安装WebDriver驱动nvidia独立显卡,以及修改机型
  16. 使用者多注意! 多件恶意软件潜入Google Play商店
  17. facebook php-webdriver 安装与使用
  18. 【学习打卡 Free-Excel 】Task4 表合并
  19. 车辆前组合灯出口德国做的E-mark认证可以在其他国家使用吗?
  20. 微信小程序生成条形码

热门文章

  1. 让css的字体加粗后不影响宽度变化与content和attr()问题
  2. js继承的几种方式,圣杯模式
  3. Java判断文件编码
  4. ubuntu WeChat 网易云音乐 Mac OS主题 wps 截图链接版
  5. TI-TMS320F28335学习详解(2)::F28335片上资源详解
  6. iphone苹果手机如何连接电脑进行投屏?
  7. java解析json字符串详解
  8. 将高分三号中的SAR图可视化处理
  9. pr获取无字幕视频素材和常用素材的网站
  10. 高等数学——二重积分的计算方法