越权的学习

越权的概述

定义
越权指开发人员在对数据的增删改查时对客户请求的数据过分信任,没有添加权限判定,导致单个用户可以操作其他人的信息。
理解
对房屋来说,使用房屋有哪些人呢?主人和访客还有不速之客。通过使用钥匙开了房屋门,我们在房屋里可以做什么呢?对于房屋的主人,我可以使用房屋内所有的东西,进出任何一个房间;对于一个访客来说,只能在房屋的公共场地使用,而房屋里某些的使用需要主人的授权才可以使用,比如进入主人的书房或者卧室。除此之外,也会有不速之客来这房屋翻箱倒柜。这说明房屋的安全做得不够,才会为不速之客提供了可能。在系统中,我们可以认为这不速之客访问为越权。
了解
越权漏洞是Web应用程序中一种常见的安全漏洞。由于其存在范围广、危害大,被OWASP列为Web应用十大安全隐患的第二名。它的威胁在于一个账户即可空指全站用户数据。当然这些数据仅限于存在漏洞功能对应的数据。
原因
越权漏洞的成因主要是因为开发人员在对数据进行增、删、改、查的时候对客户端请求的数据过分相信而遗漏了权限的判断。所以测试越权就是和开发人员拼细心的过程。

越权的分类

水平越权访问漏洞
水平越权访问是一种“基于数据的访问控制”设计缺陷引起的漏洞。由于服务器端在接收到请求数据进行操作时没有判断数据的所属人/所属部门而导致的越权数据访问漏洞。
在这里插入图片描述
假设用户A和用户B属于同一角色,拥有相同的权限等级,他们能获取自己的私有数据(数据A和数据B),但如果系统只验证了能访问数据的角色,而没有对数据做细分或者校验,导致用户A能访问到用户B的数据(数据B),那么用户A访问数据B的这种行为就叫做水平越权访问。

水平越权的产生条件:
1.直接对象引用
这种通过修改一下参数就可以产生水平越权,例如查看用户信息页面URL后加上自己的id便可查看,当修改位他人的ID号时,会返回他人的信息,便产生了水平越权

2.多阶段功能
多阶段功能是一个功能有多个阶段的实现。例如修改密码,可能第一步是验证用户身份信息,号码验证码类的。当验证成功后,跳到第二步,输入新密码,很多程序会在这一步不在验证用户身份,导入而已攻击者抓包直接修改参数值,导致可修改任意用户的密码

3.静态文件
很多网站的下载功能,一些被下载的静态文件,例如pdf、word、xls等,可能只有付费用户或者会员才可以下载,但当这些文件url地址泄露后,便会导致任何人可以下载,如果指导URL命名规则,则会便利服务器的收费文档进行批量下载。

垂直越权访问漏洞
垂直越权是一种“基于URL的访问控制”设计缺陷引起的漏洞,又叫做权限提升攻击。
在这里插入图片描述
由于后台应用没有做权限控制,或仅仅在菜单、按钮上做了权限控制,导致恶意用户只要猜测其他管理页面的URL或者敏感的参数信息,就可以访问或控制其他角色拥有的数据或页面,达到权限提升的目的。

垂直越权产生条件:
1.通过隐藏URL实现控制访问
有些程序的管理页面只有管理员才显示,普通用户看不到,利用URL实现访问控制,但URL泄露或被而已攻击者猜到后,会导致越权攻击。
2.多阶段功能
多阶段功能是一个功能有多个阶段的实现,例如修改密码,可能第一步是验证用户身份信息,号码验证码类的。当验证成功后,跳到第二步,输入新密码,很多程序会在这一步不在验证用户身份,导致恶意攻击者通过抓包直接修改参数值,导致可修改任意用户密码。
3.平台配置错误
一些程序会通过控件来限制用户的访问,例如后台地址,普通用户不属于管理员组,则不能访问。但当配置平台或者配置控件错误时,就会出现越权访问。

交叉越权
同时含有水平越权和垂直越权

如何寻找越权漏洞

1、首先,找出疑似存在越权漏洞的请求。存在越权漏洞的请求有一定的特点,可以从两个方面下手。
2、从HTTP请求上来说,就是通过BurpSuite抓取在目标站点正常操作所产生的请求数据包,然后找出可能产生越权的请求。一般情况下,类似上文所述URL的GET或者POST请求都要列为重点怀疑对象:https://www.onlinebank.com/viewInfo.php?accountId=12345678
3、从业务功能上来说,找到容易产生越权的功能点。常见的越权高发功能点有:根据订单号查订单、根据用户ID查看帐户信息、修改/找回密码等。
4、确定了怀疑对象之后,还需要进一步的分析,以确定是否真的存在越权。这时,需要两个不同的账号(下文分别称为账号A和账号B),以便测试登录账号A后进行操作能否影响到账号B。注意在浏览器中测试时,需要使用两个浏览器分别登录不同的账号,或者使用浏览器的隐私浏览功能登录其中一个账号。
5、以上文提到的URL为例进行说明。假设账号A的id为1234,账号B的id为5678,BurpSuite中抓取的数据包都是在账号A的。我的习惯做法是:在BurpSuite中将该请求发送到Repeater,然后将参数id的值修改为5678,最后提交修改后的请求包;服务器返回响应后,可以看一下BurpSuite中收到的响应报文。如果响应报文直接提示错误之类的,基本上可以确定此处不存在越权;如果响应报文提示操作成功,此时应该使用浏览器登录账号B进行二次确认,如果数据确实有相应的改动,那么则说明这里存在越权漏洞。这里需要注意:BurpSuite中报文提示操作成功有可能是误报,必须在浏览器中进行再次确认。而对于查询订单这类的请求来说,情况更简单了,修改参数id提交请求,如果返回了账号B的数据,那么就可以确定存在越权。
6、当然,越权漏洞的攻击点不仅仅存在于请求参数中,还有可能在Cookie中。因此,需要具体情况具体分析,复杂一点的可能还需要Cookie值配合请求参数值以实现越权攻击。

防范措施)

在这里插入图片描述
1.前后端同时对用户输入信息进行校验,双重验证机制,在每个页面加载前进行权限认证。
2.调用功能前验证用户是否有权限调用相关功能
3.执行关键操作前必须验证用户身份,验证用户是否具备操作数据的权限
4.直接对象引用的加密资源ID,防止攻击者枚举ID,敏感数据特殊化处理
5.永远不要相信来自用户的输入,对于可控参数进行严格的检查与过滤

猜你喜欢

转载自blog.csdn.net/qq_51558360/article/details/113320749