阅读文本大概需要3分钟。

小编最近在公司送审的后台接口发现了严重的越权漏洞,今天就和大家谈下为何越权漏洞。

0x01:越权漏洞的产生

越权漏洞是Web应用程序中一种常见的安全漏洞。它的威胁在于一个账户即可控制全站用户数据。当然这些数据仅限于存在漏洞功能对应的数据。越权漏洞的成因主要是因为开发人员在对数据进行增、删、改、查询时对客户端请求的数据过分相信而遗漏了权限的判定。所以测试越权就是和开发人员拼细心的过程

如何演示一个越权问题可以参考

0x02:越权漏洞的分类

横向越权(水平越权):横向越权指的是攻击者尝试访问与他拥有相同权限的用户的资源。例如,两个不同的公司A和B,通过修改请求,公司A可以任意修改B公司的员工、部门、考勤等信息。

纵向越权(垂直越权):纵向越权指的是一个低级别攻击者尝试访问高级别用户的资源。例如,同一个公司不同权限的管理员A和B,通过修改请求,管理员A可以修改不在他管辖范围内的员工的部门、考勤、工资等信息。

交叉越权:同时存在横向越权和纵向越权

何为越权、如何解决?_安全

0x03:如何查找是否存在越权漏洞

与服务器进行数据交互时客户端携带着标识用户的身份的cookie,当服务端的session与cookie中的身份匹配成功后,才能允许该用户进行相关操作。除了cookie之外,在请求中可能会携带一些参数,细览一下可能存在辨别信息的唯一值,来进行测试。这里要说一点,传输的参数并不一定在请求参数中,也有可能存在于链接等位置。当拦截一个请求后分析是否有参数。

  • 请求中不存在参数,只用cookie进行身份验证,不可越权;
  • 请求中存在参数,并且参数中的某些值可能是辨别信息的唯一值(如userId、departmentID、ID等),可能存在越权;越权的原因是参数中的employeeID没有判断是否是cookie中用户所管辖的员工ID

0x04:越权访问漏洞的防范

  • 基础安全架构,完善用户权限体系。要知道哪些数据对于哪些用户,哪些数据不应该由哪些用户操作;
  • 永远不要相信来自用户的输入,对于可控参数进行严格的检查与过滤;
  • 执行关键操作前必须验证用户身份;
  • 不要直接使用对象的实名或关键字;直接对象引用的加密资源id,防止攻击者枚举ID;
  • 鉴权,服务端对请求的数据和当前用户身份做校验,前后端同时校验;
  • 调用功能前验证用户是否有权限调用相关功能;

横向越权:可通过建立用户和可操作资源的绑定关系,用户对任何资源进行操作时,通过该绑定关系确保该资源是属于该用户所有的;对请求中的关键参数进行间接映射,避免使用原始关键参数名。

纵向越权:建议使用基于角色访问控制机制来防止纵向越权攻击,即预先定义不同的权限角色,为每个角色分配不同的权限,每个用户都属于特定的角色,即拥有固定的权限,当用户执行某个动作或产生某种行为时,通过用户所在的角色判定该动作或者行为是否允许。

一个不错解析越权的PPT

https://cloud.tencent.com/developer/news/153635



每天进步一点点

何为越权、如何解决?_安全_02