最近工作忙得飞起,挖洞的时间变少了,一般有什么活动之类的才会花个半天时间去尝试一下。今天这个漏洞有点意思,不到500块的高危,但是我个人认为是严重低估了的,但没办法,白帽子在审核面前没人权啊。
以下主要是过程与思路分析,没截图,因为几百块的高危不配有图。
0x00
入口
这次的入口是小程序,某厂商的一个考试类的小程序,先尝试了一下登录,发现它正常是不对外提供的,使用微信登录后会提示无权限,也没有注册入口。那咋办?直接下一个?我一般看心情,如果心情不好,就下一下,如果当时心情不错的话,我给给予它一点耐心,反编译之后,进行一波代码审计。
代码审计当然是从登录功能开始,这一看就发现了大雷,也不知道是哪个大聪明写的登录功能,正常来说,我们实现登录时,一般是使用账号密码登录,如果成功,则返回用户信息和token,如果错误,则失败。
但是这个小程序有意思了,它登录成功后,只返回用户信息,然后再使用用户信息,通过另外一个接口去获取token。黑人问号?这不白送吗?
敏感数据泄露
直接拿到获取token的接口,先试一下不传任何参数请求一下这个接口,发现它也可以返回一个token,通过这个token,我们进到小程序后,发现有一个获取自己的考试列表的功能,但是请求会报错,这是正常的,因为我们的这个token是没有用户信息的。
但是都有列表了,那获取指定数据的详情的接口应该也有吧,而且能写出这种登录功能的开发,我认为存在数据越权的概率大于90%。 (关于数据越权不清楚, 可以看一下这篇《挖逻辑漏洞不懂数据权限怎么赚大钱?》)
继续分析源码,找到获取考试详情的接口,发现只有一个id参数,随便传个数字试一下,这不巧了嘛,返回了别人的考试结果,其中包含了用户的真实姓名、手机号、得分等等。由于id是自增id,通过能够获取到数据的id的最大值来判断,泄露考试详情数据量近7位数,即使去除重复用户的考试记录,泄露的用户隐私数据最少也应该是6位数了。
管理员权限
到这其实就可以交了,但是我都能获取任意用户的token了,不得再深度利用一下?上面有说到, token是通过用户信息获取的,那如果我们知道管理的id,是不是就可以拿到管理员的token了?
那这个信息哪里拿?一般公告、题目之类的肯定是由有管理员权限的用户编辑的(不明白为什么可以看一下这篇,有简单提到过《SRC实战:改个返回包就严重了?》),那就看看会不会返回创建者ID之为类的咯。幸运的是,在获取题目信息的接口中,返回了create_id,甚至还返回了create_name(管理员),真的是贴心呢。
拿到管理员的id后,通过管理员的id创建了一个token登录,发现小程序内也没有多出什么功能?那看来这只是一个纯用户端,那后台在哪里?
一般情况下,我会先尝试将小程序的域名直接放到浏览器中访问一下,没想到,在浏览器中访问后直接就跳到管理后台页面了。这还有什么可说的,JS代码审计呗,先找到token的传输方式,再随便找一个接口,用之前小程序获取到的token试一下,直接返回数据,原地起飞,管理员权限拿下。
其实这一步后面也没这么简单,它的管理后台菜单项是后台返回的,还要去猜解参数、构造返回值等,搞了我挺久的。不过都有token了,这些都不是重点了。
0x01
虽然但是,看起来好像危害挺大的样子,最终厂商给的是高危,不过是一个不到500块的高危,理由是边缘产品(虽然它的公告也没有明确的对产品进行分类),我只能说,没见过哪个边缘产品有超过6位数用户的。就这样吧,毕竟话语权在人家那里。
欢迎关注我的公众号“混入安全圈的程序猿”,更多原创文章第一时间推送!
标签:SRC,登录,用户,id,获取,token,管理员,steam,500 From: https://blog.csdn.net/ooooooih/article/details/140434051