今天分享的这个漏洞怎么说呢,虽然也是个高危,但是其实挺简单的,一个很eazy的越权,但是我觉得多多少少还是有点意思吧。
0x00
这是一个移动端的应用程序,前面比较常规,模拟器 + BP,跑了一下所有的功能,先简单的分析了一下,没有发现什么问题(菜狗哭泣!)。
那公开的接口没有问题,有没有隐藏的接口呢?直接反编译Andoird应用,将所有的接口捞出来跑一遍。
我测试移动端应用的流程其实和Web端差不多,也喜欢捞出所有的请求地址跑一遍,看看有没有隐藏接口、未授权等。
但是移动端没有FindSomething,我一般是反编译应用后,分析一下接口的格式,然后使用Python脚本将它们全部匹配出来。
幸运的是,还真有,将接口匹配出来后,发现了10来个以/manager
开头的路径,这个我在应用上直接访问各种功能是没有看到过的。
这种接口很有可能是管理接口,有可能是历史接口没有删除,又或者是其它管理员才能访问到的。
0x01
但是不幸的是,所有接口几乎都无法访问,请求接口直接返回了401
,也就是无权限。但是有一个例外,接口长这样:/manager/user
。直接访问的话,会返回一个空数据,像这样:
{
"code": 200,
"data": {}
}
那是不是缺少参数呢?直接去反编译的代码里面找找看!一看代码,我悬着的心也死了,这个接口没有任何参数,它的功能返回当前管理员用户的信息,而我并不是管理员,没有信息返回也很合理。
本来到这就想放弃了,但又想了想,又觉得有点奇怪,如果是获取当前登录用户信息,并且不存在,那为什么还会正常返回呢? 不应该是直接401
,又或是直接报错吗?而这种表现形式,更像是那种普通的获取用户信息的接口。
有些开发在写接口的时候,可能会复用一些接口,但是又考虑的不完善。
比如我有一个接口,是查看每个用户的详情,那我在写获取当前登录用户信息的接口的时候,可能会复用之前的接口:如果没有传参数,就根据当前登录用户的ID来获取用户信息,如果有传参数,就根据传参来获取用户信息。(纯属猜测~)
于是我决定再试试,给它传几个参数fuzz一下看看,根据这个接口名称,我觉得这几个参数可以试试看:id
、userId
、user_id
、managerId
、manager_id
。
对于参数值,首先是自己当前的用户ID,但是管理员的ID可能规则不一样,因此再加上数字类型的fuzz。
fuzz方式确定好之后,就是Turbo Intruder一把梭了。结果很明显了,如果我没有成功,那就不会有这篇文章啦!最终使用manger_id参数 + 6位的数字ID,可以遍历所有的管理员用户信息,包括姓名、手机号、邮箱等大量的敏感信息。但是由于管理员数量不像C端用户这么多,因此只给了高危。
0x02
这个漏洞还是几个月之前的了,它其实本质上就是一个很普通的越权漏洞,但是找参数这部分我觉得还是有一些意思的,希望给大家带来一点新的思路吧~
欢迎关注我的公众号“混入安全圈的程序猿”,更多原创文章第一时间推送!