漏洞挖掘 逻辑漏洞 记一次小程序渗透测试过程
漏洞挖掘 逻辑漏洞 记一次小程序渗透测试过程
前言
前几天参加省内教育hw,我作为红队参与到了其中,两周的攻击实践中让我学到了很多,最后总结复盘发现在前期的资产梳理时,忘了对目标的微信小程序资产进行测试,目前微信小程序的推广程度很大,基本每个差不多的服务类事业单位都有自己的小程序,小程序开发目前相对于Web,二进制程序开发还是比较粗糙,感觉小程序就是换了个样子的Web,甚至有些后端其实和Web开发是大同小异的,因此小程序也有很大的可能存在Web对应的一些漏洞,本次测试是在我参与hw结束之后,对自己学校的微信小程序进行的一次测试,最后发现存在逻辑漏洞,通过自己伪造Header添加一条数据,即可使得本该关闭的功能启用,最终造成了全校老师信息泄露,下面我将重新复盘这一过程:
测试过程
想要测试小程序的第一步,首先就是要能抓到小程序的包,这里我们直接使用Clash就能解决这个问题,因为Clash的全局代理功能异常强大,因此我们直接使用Clash开启全局代理,设置8080(Burp的本地代理端口),即可配合Burp抓到小程序的请求包,图解如下:
微信小程序抓包配置教程
首先启动Burp,然后打开Clash,左边的“主页”,设置端口为8080,注意其他配置都默认即可,例如“配置”项,只选择默认软件自带的”config.yaml”即可。
之后直接右键任务栏的图标,先点击选中“全局”,再点击选中“系统代理”即可,成功后任务栏的图标会变成图下那样:
之后再打开Burp,进入Proxy模块,开启拦截包,我们随意打开一个微信小程序,发现已经抓到了微信小程序有关的包,下图是刚开始进入微信小程序时一个云函数启用的包(weixinbridge.com)
利用这个方法,就可以实现Clash+Burp实现抓取微信小程序的请求包,但是有一点需要注意,有时候一些小程序是只有前端的静态页面,因此抓包只能抓到一堆如上图那样的目标为cube.weixinbridge.com的请求包。
测试开始
配置完小程序抓包环境后,我们再把目光转向这次的目标,是我自己学校的官方小程序,XXXX校园卡,打开后首页下方有一个“实习汇报”按钮,里面有一项是“汇报给”:
在这个页面发现上方出现了搜索框,在框中随意输入一个已知的教师名,然后抓包看看后面调用的是哪个接口。
前端测试后发现输入名称搜索没反应,直接通过接口发包也是没有响应包,这是怎么回事呢?功能失效了?
仔细再回头来观察请求头,经过比对发现,其中有个参数”Token”是空的,再次抓包小程序其他功能点,发现都存在这个”Token”值。因此推测:此功能还没完善好,开发人员故意设置了请求头Token值为空,从而响应就是空的。
通过其他功能页面抓包得到的Token,我们手动添加到这里,再次发包,发现成功回显了,通过仔细观察发现回显的数据为json格式,并且数据中出现了大量的敏感数据例如:证件照、身份证号、手机号、工号等。
推测此接口为查询接口,再加上请求包格式为json,所以推测可以直接通过其他的字段查询,如果有所有教师信息的共有字段,那么不就查询到了全校所有教师的信息了吗?OK,直接试试:添加字段:”creator”:null
通过返回包发现,已经返回了全校教师的信息,再将limit参数改为最大,通过更改page可以实现翻页。
总结复盘
由于开发疏忽,导致查询接口存在逻辑问题,把一些没有必要返回的敏感信息也返回了,从而导致了泄露敏感信息,同时接口的查询逻辑也有问题,导致了利用相同的键值对能查询到大量类似的信息。从攻击者的视角来看,我们在日常测试时,如果遇到一些前端无法触发的功能点,不如认真分析一下请求包与相应包,分析下header中是不是缺少什么东西,将其与其他可触发的功能点进行比较,也许会发现意外收获哦~