最近好多小伙伴都在问怎么对微信小程序进行渗透,遂写篇文章抛砖引玉。
我使用的是夜神模拟器配合 burpsuite 进行抓包。夜神模拟器我使用的是6.6.1.1的版本,算是很老的版本了,内设系统为Android5.0。新的版本中安卓似乎都是7.0以上了,抓取 HTTPS 包会比较麻烦,所以我就一直没有换版本。如果有需要的朋友可以自取,后面会打包云盘在文章底部。
首先我们需要设置好抓包环境,先通过ipconfig查看我们当前 ip,这里我用的是以太网,也就是插着网线;如果是连着 WIFI,则找对应的即可

在 burpsuite 添加上,这里我设置端口为8888,可以按照自己需求更改

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

保存后,打开浏览器访问ip:port,这里的话为192.168.1.102:8888,点击CA Certificate下载证书

打开文件管理器,在sdcard->Download目录中可以看到下载下来的证书

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

安装证书

测试一下,浏览器访问百度,burpsuite 能正常抓包说明已经设置环境成功

我们在模拟器里登录微信,然后随便选择一个微信小程序打开

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

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

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

这里的文件夹就是电脑共享的文件夹,点击打开电脑文件夹

可以找到小程序的文件

这里推荐有 GUI 界面的反编译工具:Releases · ezshine/wxapkg-convertor · GitHub
直接将文件鼠标拖拽到 GUI 界面即可开始反编译,在拖入文件的当前目录得到反编译生成的文件夹

然后就可以开始舒服的看看 js 代码啦

举例某小程序审计,在登录界面爆破无关之后,直接反编译拖源码审计一下,反编译出来的源码,我们着重看 js 文件及其配置文件即可。第一想法就是先找一些接口,尝试是否有未授权之类的漏洞,下面就是找到的一处路由user/getUserInfoByUsername

可以看到发送数据类型为 json 格式,并且参数为username和school,于是尝试构造请求发送

成功获取系统管理员详细信息,其中包括关键的密码。获取到 md5 加密形式的密码密文后,本来还想去 cmd5 去解一下, 但是接下来注意到一个登录路由user/loginByUsernameAndPassword

从源码中都看得出来就是通过账号密码去登录,刚刚未授权得到的密码存储为 md5 加密形式,想来登录应该也是进行 md5 加密的形式,所以直接发送加密形式的密码即可,构造请求发送

验证登录成功。这类常常出现未授权漏洞的路由命名方式大抵都是
xxxByXXXId
xxxByUsername
xxxbyphone
......
审计的时候我们可以做一个规则去全局搜索源码匹配这类命名方式的路由
下面举例其他类型的漏洞审计案例,这里目的是为了说明小程序有哪些漏洞可以挖
反编译出来的源码泄露登录账号密码,这里是因为在 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可以到微信的官方接口去自由生成微信小程序的命脉AccessToken

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

其次利用AccessToken可以执行相当多的其他操作,见微信官方文档,这里就不画蛇添足了。
工具自取链接:
链接:https://pan.baidu.com/s/1vMVvmm2n2wyr3vhzp91iqA
提取码:jpho
总的来说,微信小程序的渗透我觉得最重要的还是仔细审计一下反编译得到的源码,常常会有意想不到的惊喜噢~
前言一般来说,前端根据后台返回code码展示对应内容只需要在前台判断code值展示对应的内容即可,但要是匹配的code码比较多或者多个页面用到时,为了便于后期维护,后台就会使用字典表让前端匹配,下面我将在微信小程序中通过wxs的方法实现这个操作。为什么要使用wxs?{{method(a,b)}}可以看到,上述代码是一个调用方法传值的操作,在vue中很常见,多用于数据之间的转换,但由于微信小程序诸多限制的原因,你并不能优雅的这样操作,可能有人会说,为什么不用if判断实现呢?但是if判断的局限性在于如果存在数据量过大时,大量重复性操作和if判断会让你的代码显得异常冗余。wxswxs相当于是一个独立
项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU
@作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors 1、什么是behaviors 2、behaviors的工作方式 3、创建behavior 4、导入并使用behavior 5、behavior中所有可用的节点 6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors 1、什么是behaviorsbehaviors是小程序中,用于实现
提供3种Ubuntu系统安装微信的方法,在Ubuntu20.04上验证都ok。1.WineHQ7.0安装微信:ubuntu20.04安装最新版微信--可以支持微信最新版,但是适配的不是特别好;比如WeChartOCR.exe报错。2.原生微信安装:linux系统下的微信安装(ubuntu20.04)--微信适配的最好,反应最快,但是微信版本只到2.1.1,版本太老,很多功能都没有。3.深度deepin-wine6安装微信:ubuntu20.04+系统deepin-wine6安装新版微信--综合比较好,当前个人使用此种方法1个月,微信版本3.4;没什么大问题,尚可。一、WineHQ7.0安装微信
对传统的餐饮商家来说,小程序很好地解决了餐厅线下线上连接的问题,在引流获客、节约人力、营销宣传、塑造会员体系、改善消费体验等方面都有很大帮助。小程序点餐可以帮助餐饮企业节省一大把人力开支。一个包含扫码点单、菜品管理、优惠券推送、外卖配送的小程序,商家花几万元就能完成开发测试并投入。商家为什么要开通“扫码点餐”1.解决服务员不够用的问题。2.不怕顾客跑单漏单。3.在微信就能管理菜品、查看营业额。4.订单小票显示顾客桌号和已点菜品。5.可在“附近的小程序”找到您的门店。如今餐饮业常用的三种经营模式:1堂食点单模式客人通过小程序堂食点单。商家可以在微信扫码点餐小程序管理后台根据自己店内情况来设置不同
技术选型1,前端小程序原生MINA框架cssJavaScriptWxml2,管理后台云开发Cms内容管理系统web网页3,数据后台小程序云开发云函数云开发数据库(基于MongoDB)云存储4,人脸识别算法基于百度智能云实现人脸识别一,用户端效果图预览老规矩我们先来看效果图,如果效果图符合你的需求,就继续往下看,如果不符合你的需求,可以跳过。1-1,登录注册页可以看到登录页有注册入口,注册页如下我们的注册,需要管理员审核,审核通过后才可以正常登录使用小程序1-2,个人中心页登录成功以后,我们会进入个人中心页我们在个人中心页可以注册人脸,因为我们做人脸识别签到,需要先注册人脸才可以进行人脸比对,进
2022年底,OpenAI的预训练模型ChatGPT给人工智能领域的爱好者和研究人员留下了深刻的印象和启发,他展现的惊人能力将人工智能的研究和应用热度推向高潮,网上也充斥着和ChatGPT的各种聊天,他可以作诗、写小说、写代码、讨论疫情问题等。下面就是一些他的神回复:人命关天的坑: 写歌,留给词作者的机会不多了。。。 回答人类怎么样面对人工智能: 什么是ChatGPT?借用网上的一段介绍,ChatGPT是由人工智能研究实验室OpenAI在2022年11月30日发布的全新聊天机器人模型,一款人工智能技术驱动的自然语言处理工具。它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭9年前。Improvethisquestion首先,我想避免一场关于语言的口水战。可供选择的语言有Perl、Python和Ruby。我想提一下,我对所有这些都很满意,但问题是我不能只专注于一个。例如,如果我看到一个很棒的Perl模块,我必须尝试一下。如果我看到一个不错的Python应用程序,我必须知道它是如何制作的。如果我看到RubyDSL或一些Ruby巫术,我就会迷上Ruby一段时间。目前我是一名Java开发人员,但计划在不久的将来
在开发微信小程序的时候,我们可能需要开发环境和测试环境,或者其他环境,下面是切换环境的方法。首先需要明确的是:前端的页面代码是不区分环境的,环境的区分指的是云函数、云数据库、云存储这些。1、更改云函数的使用云环境这里我们从cloud1更改为test-cloud,这个改完是没有用的,因为在前端代码指定了使用的云环境。cloudfunctions文件和miniprogram文件虽然都在一个目录下,但是这两个没有直接联系。2、在evList.js中添加自己云环境evList.js存储了云环境列表,这里把test-cloud加到这个列表里,需要填写envId和alias,参照cloud1写就行。3、更
前言微信支付是企业级项目中经常使用到的功能,作为后端开发人员,完整地掌握该技术是十分有必要的。一、申请流程和步骤图1-1注册微信支付账号获取微信小程序APPID获取微信商家的商户ID获取微信商家的API私钥配置微信支付回调地址绑定微信小程序和微信支付的关系搭建SpringBoot工程编写后台支付接口发布部署接口服务项目使用微信小程序或者UniAPP调用微信支付功能支付接口的封装配置jwt或者openid的token派发原生微信小程序完成支付对接二、注册商家2.1商户平台商家或者企业想要通过微信支付来进行商品的销售,必须先通过微信平台(pay.weixin.qq.com)去将商家进行注册。注册成