12-越权漏洞—概念、漏洞原理及其防御

1. 概念

image
越权访问(Broken Access Control,简称BAC)是Web应用程序中一种常见的漏洞,由于其存在范围广、危害大,被OWASP列为Web应用十大安全隐患的第二名。该漏洞是指应用在检查授权时存在纰漏,使得攻击者在获得低权限用户账户后,利用一些方式绕过权限检查,访问或者操作其他用户或者更高权限。越权漏洞的成因主要是因为开发人员在对数据进行增、删、改、查询时对客户端请求的数据过分相信而遗漏了权限的判定,一旦权限验证不充分,就易致越权漏洞。此外越权属于逻辑漏洞。

1.1 逻辑漏洞

代码之后是人的逻辑,人更容易犯错,是编写完程序后随着人的思维逻辑产生的不足。sql注入、xss等漏洞可以通过安全框架等避免,这种攻击流量非法,对原始程序进行了破坏,防火墙可以检测,而逻辑漏洞是通过合法合理的方式达到破坏,比如密码找回由于程序设计不足,会产生很多问题,破坏方式并非向程预防思路。逻辑漏洞主要包括:越权,未授权,验证码绕过,支付,密码找回等等。

2. 越权的分类

越权访问漏洞主要分为水平越权、垂直越权。

2.1 水平越权

指攻击者尝试访问与他拥有相同权限的用户资源。例如,用户A和用户B属于同一角色,拥有相同的权限等级,他们能获取自己的私有数据(数据A和数据B),但如果系统只验证了能访问数据的角色,而没有对数据做细分或者校验,导致用户A能访问到用户B的数据(数据B),那么用户A访问数据B的这种行为就叫做水平越权访问。
image

2.2 垂直越权

由于后台应用没有做权限控制,或仅仅在菜单、按钮上做了权限控制,导致恶意用户只要猜测其他管理页面的URL或者敏感的参数信息,就可以访问或控制其他角色拥有的数据或页面,达到权限提升的目的。
image

3. 越权产生的原因

通常情况下,一个web程序功能流程是登录-提交请求-验证权限-数据库查询-返回结果。如果验证权限不足,便会导致越权。常见的程序都会认为通过登录后即可验证用户的身份,从而不会做下一步验证,最后导致越权。

  1. 通过隐藏 URL
    实现控制访问有些程序的管理员的管理页面只有管理员才显示,普通用户看不到,利用URL实现访问控制,但URL泄露或被恶意攻击者猜到后,这会导致越权攻击。
  2. 直接对象引用
    这种通过修改一下参数就可以产生水平越权,例如查看用户信息页面URL后加上自己的id便可查看,当修改为他人的 ID 号时会返回他人的信息,便产生了水平越权。
  3. 多阶段功能
    多阶段功能是一个功能有多个阶段的实现。例如修改密码,可能第一步是验证用户身份信息,号码验证码类的。当验证成功后跳到第二步,输入新密码,很多程序会在这一步不再验证用户身份,导致恶意攻击者抓包直接修改参数值,导致可修改任意用户密码。
  4. 静态文件
    很多网站的下载功能,一些被下载的静态文件,例如pdf、word、xls 等,可能只有付费用户或会员可下载,但当这些文件的 URL 地址泄露后,导致任何人可下载,如果知道URL命名规则,则会对服务器的收费文档进行批量下载。
  5. 平台配置错误
    一些程序会通过控件来限制用户的访问,例如后台地址,普通用户不属于管理员组,则不能访问。但当配置平台或配置控件错误时,就会出现越权访问。

4. 越权的防御

  1. 前后端同时对用户输入信息进行校验,双重验证机制
  2. 执行关键操作前必须验证用户身份,验证用户是否具备操作数据的权限
  3. 特别敏感操作可以让用户再次输入密码或其他的验证信息
  4. 可以从用户的加密认证cookie中获取当前用户id,防止攻击者对其修改。或在session、cookie中加入不可预测、不可猜解的user信息
  5. 直接对象引用的加密资源ID,防止攻击者枚举ID,敏感数据特殊化处理
  6. 永远不要相信来自用户的输入,对于可控参数进行严格的检查与过滤
posted @ 2025-12-08 19:47  77板烧鸡腿堡  阅读(81)  评论(0)    收藏  举报