越权漏洞学习-做你做不了的事情
原文链接:https://blog.csdn.net/weixin_49349476/article/details/131362007
(一)、什么是越权漏洞
1、了解越权漏洞:
越权漏洞是指一个用户或者一个攻击者通过利用系统中某一漏洞,可以获得超过其正常权限的权限。也就是说,越权漏洞会使攻击者能够执行未经授权的操作或访问受保护的资源
简单来说,你干了原本你不能干的事情,例如,原本是vip才能看的视频,你不充值,而是通过某一个方法也能看,这就是越权。通过实现越权的地方,这个地方就是存在越权漏洞
2、越权漏洞的分类:
水平越权:权限是同级别的,但是是给不同的对象使用。例如:一般不同的用户只有对自己信息修改的权限,如果出现用户A能对用户B的信息进行修改,这就是水平越权
垂直越权:从低权限到高权限的翻越。例如普通用户到了超级用户
交叉越权:水平越权与垂直越权的集合
3、越权漏洞产生的原因
越权漏洞产生关键点:
用户提交(主动或被动)的数据内容被带入到资源操作(增删改查)逻辑中
后端程序未对请求操作资源的用户身份进行合理判断
越权漏洞产生的主要原因是由于程序在设计或者代码实现上没有考虑权限控制的问题。攻击者可以使用这个漏洞,通过修改或者篡改程序中的参数或数据,使得程序在处理之前没有对数据进行合理的授权验证,让攻击者获得程序中本不应该拥有的权限,从而进行攻击
举个例子,如上图,用户A只能对自己的订单15167,进行编辑,用户B只能对自己的订单15166进行编辑。这是正常情况,如果用户A在提交自己订单时候,对利用抓包工具对其抓包,然后把自己的订单号15167改为了15166,即用户A提交的信息,不是自己的订单,而是用户B的订单,如果后台程序没有对身份验证,之后就处理了A的请求。越权漏洞就这样产生。
4、越权测试规范
在越权测试的时候,是有一些要求的,如下:
越权读取的时候,能读取到的真实数据不超过5组,严禁进行批量读取。
帐号可注册的情况下,只允许用自己的2个帐号验证漏洞效果,不要涉及线上正常 用户的帐号,越权增删改,请使用自己测试帐号进行。帐号不可注册的情况下,如 果获取到该系统的账密并验证成功,如需进一步安全测试,请咨询管理员得到同意 后进行测试
(二)越权测试案例
1、水平越权
场景1;在某些购火车票、机票等功能,需要提交用户的身份id(用户的手机号,身份证、证件号等唯一标识),
场景2:在某些查询快递信息等功能,需要提交对象id(例如订单号、记录号)
场景3、在下载某些文件时候,如果文件非常长的大,文件都会有文件id,文件下载也是通过文件id下载
漏洞测试:
这些场景使用到的身份id、对象id、文件id,都是数字组成,在利用bp进行抓包之后,对这些id遍历爆破,从某个id开始,不断的+1递增,不断尝试爆破。如果能对其中一个,提交成功,购买车票成功、查询订单号成功、下载文件成功。这些不是属于自己的权限返回,这就是水平越权。可能严重情况的后果就是泄露用户的敏感信息
如果不是id,而是用户名,也可以采用字典爆破,使用id一般比较方便。
(注:爆破是只是为了方便检测是否有这个漏洞,如果检测到一个,已经到达了目的,建议就立马停止)
在修改用户名,测试越权漏洞:
2、垂直越权漏洞:
在皮卡丘靶场有一个案例:
有两个账户,admin,和pikachu,其中,admin账户可以增加账户信息,pikachu没有这个增加账户这个权限。我们想做垂直越权,让pikachu也能够增加账户信息。
第二步:查看pikachu的cookie信息,复制到刚刚抓到数据包的cookie字段中(服务器识别用户身份,就是根据cookie,这一步就是把请求用户的身份换成pikachu)
在现实中的,权限和人数往往成反比的,越高的权限,拥有的人越少。总不可能各个都是管理员吧,高权限的人往往比较少,负责管理一个系统,责任极其重要,不能随便给一个人高权限。
在登录时候,要识别登陆是否是管理员权限,一般采用白名单的方法判断,白名单的意思是,对于登录的用户,判断是否存在于管理员表中,如果存在就是判断为管理员,反之则不是。根据这一点中,开发者一般采用几种方法
方法一:利用前端js实现(概率较小)
在登录时候,直接在前端,判断是否管理员,这一种可能是没有接触安全意识的开发者使用,这的确可能发生。因为一般高权限的用户非常少,只需要判断该用户是不是在高权限用户中,就可以。
针对这个方法,直接禁用js的触发方法,就可以直接绕过。(轻轻松松的,就进入了)
方法二:带入数据库中查询(概率交大)
在这一方法中,有两种情况:
a:有一些开发者,是直接把所有的管理员信息,存放到一个表中,在登录时候,会到这个表中查询,判断登录用户是不是管理员账户
b:会在用户表中添加一个角色字段,来判断是否是管理员,例如user_type、user_status、role_id、is_admin等
所以,在垂直越权漏洞测试中常见的测试点:
注册用户时,是否包含角色相关字段。例如,在注册的时候,对其抓包,发现一个字段role_id,这个可能是角色判断字段,而且值为1,就可以尝试测试,更改值为0,或者2,进行测试,然后登录查看,如果存在管理员权限,说明这里就存在垂直越权
cookies中是否包含角色相关字段,一些网站开发是把判断角色的信息是放在cookie中,对其抓包之后,查看cookie,是否存在该相关信息。
下面是一个根据cookies中,查看是否包含角色相关字段的案例
在注册用户时候,对其抓包,发现cookie中含有admin字段
然后修改admin的值为1,进行提交,发现登录用户变成了管理员权限
(三)总结
越权漏洞的主要产生原因是在程序开发过程中没有充分考虑权限控制的问题,攻击者可以通过篡改参数或者数据,获得不应该拥有的权限或者资源。
越权漏洞对于系统的安全性和稳定性产生极大的威胁,攻击者可以窃取敏感信息、篡改数据或者破坏系统的正常运行。
防范越权漏洞的措施包括严格的权限控制、数据合法性验证、代码审计、修复已知的漏洞以及安全编程实践等。
对于网站或者应用程序的管理员来说,定期进行安全审计和漏洞扫描是必要的,及时修复已知的漏洞可以在攻击发生前消除安全风险。
最后,对于用户来说,在使用各种在线服务时,应当遵守一些常规的安全措施,例如不轻信陌生人的信息或链接,不在公共场合或者不安全的网络环境下登陆敏感账户等。同时,不要轻易泄露自己的个人信息,保护好自己的账户密码等敏感信息。