现在只对常读和星标的公众号才展示大图推送,建议大家把潇湘信安“设为星标”,否则可能看不到了!
这篇文章由群里某位师傅原创投稿,打码较为严重,主要分享的是一次垂直越权漏洞的挖掘思路,希望大家能够从中有所收获吧!
0x01 背景
某个阳光明媚的下午,技术组长安排了一个项目给我,本以为只是一个普普通通的渗透项目,没想到过程不普通,结果也不普通,算不上好,但是总归是收获了一个别致的越权漏洞。
0x02 过程
因为沟通不是很到位,开局直接被嘲讽、buff拉满(假装有图)。虽然很生气,但是作为安服仔的我只能吃包辣条消消火,手里不能放松,干他就完事儿了。
使用rad对网站JS简单爬取一下,爬到了许多js文件,其中一个名为common.js
尝试简单利用下,发现返回码大都是405或者302,405是使用的http方法不对,302是由于接口做了鉴权直接跳转至登录页面了。
客户提供了一个普通用户和管理员账户,先登录上管理员用户,然后调用接口:/user/getUserList?role=0
成功调用该接口使用get方法,并且无需添加其他参数即可成功。此时将接口路径复制到带有普通用户凭证的数据包中并且尝试请求,依然可以正常访问。
就挺开心的,发现了一个垂直越权漏洞,并且越权可以查看的内容包含700多个用户的信息。
分享给另一个测试的小伙伴:
但是意外总是来的猝不及防,过了一段时间后再次测试,发现无法垂直越权查看了,直接返回状态码302,我重新登录普通用户获取新的用户凭证继续访问发现:
淦,俺的垂直越权咋没了。重新登录了管理员用户,发现接口又可以正常使用。
此时突发奇想,比对了管理员用户的SESSION值,发现普通用户和管理员的SESSION值一致。
联想前面管理员用户不在线,普通用户无法进行垂直越权,瞬间明白了这个特殊的垂直越权利用的最终奥义。
原理:
短时间内普通用户和管理员的用户凭证一致,当管理员在线的时候,普通用户可以直接越权,管理员不在线,无法越权。
回归到越权访问到的数据本身,发现了用户未加密的密码,尝试登录其中一个用户。
整理出来770多条数据,也就是说拿到了770多个用户的账号和密码;得到的数据为json格式,这里我是用json5-to-table对数据进行处理。
json5-to-table是一个将json文件转化为html或者xlsx表格的工具,默认支持html表格,支持xlsx还需要额外安装扩展包。此次在kali 2021.2下测试安装:
安装要求:
npm版本为7
设置镜像仓库为淘宝的地址
安装命令:
npm config set registry https://registry.npm.taobao.org # 配置淘宝镜像仓库
npm config get registry # 有淘宝仓库地址即为配置成功
npm install --global json5-to-table # 安装json5-to-table
npm install --global xlsx # 安装支持json to xlsx的扩展包
使用效果:
整理过数据以后发现弱口令:123456的使用数量在722,占据所有用户比例的93%左右。
先将问题同步给甲方对应负责人(假装有图);当场能给我笑死,然后在文字描述不行的时候,在电话里给负责人讲的时候牵扯到了这个特殊的垂直越权,然后他说这个洞之前就有了,并且询问能否更改数据?
然后我就从common.js文件里面掏出一个用户删除接口,当场创建个测试用户,然后用越权漏洞删除了那个测试用户。
删除前:
删除后:
除了这个垂直的越权以外,删除用户的时候也会返回所有用户的信息,就蛮离谱的,给到负责人:(假装有图)
0x03 总结
给用户生成凭证的时候一定要生成不一样,有问题及时修,拖着系统容易出大问题。
多观察、多想、多实践,总会挖出奇奇怪怪的漏洞。
关 注 有 礼
推 荐 阅 读