越权
简介:
指应用在检查授权时存在纰漏,使得攻击者在获得低权限用户账户后,利用一些方式绕过权限检查,访问或者操作其他用户或者更高权限。越权漏洞的成因主要是因为开发人员在对数据进行增、删、改、查询时对客户端请求的数据过分相信而遗漏了权限的判定,一旦权限验证不充分,就易致越权漏洞。
主要分为水平越权与垂直越权
水平越权:假设用户A和用户B属于拥有相同的权限等级,他们能获取自己的个人数据,但如果系统只验证了能访问数据的角色,而没有对数据做细分或者校验,导致用户A能访问到用户B的数据,那么用户A访问用户B的这种行为就叫做水平越权访问。
垂直越权:A用户的权限高于B用户,B用户越权操作A用户的权限的情况称为垂直越权
产生原因:
通常情况下,一个 Web 程序功能流程是登录 - 提交请求 - 验证权限 - 数据库查询 - 返回结果。如果验证权限不足,便会导致越权。常见的程序都会认为通过登录后即可验证用户的身份,从而不会做下一步验证,最后导致越权。
1,通过隐藏 URL 实现控制访问
有些程序的管理员的管理页面只有管理员才显示,普通用户看不到,利用 URL 实现访问控制,但 URL 泄露或被恶意攻击者猜到后,这会导致越权攻击。
2,直接对象引用
这种通过修改一下参数就可以产生水平越权,例如查看用户信息页面 URL 后加上自己的 id 便可查看,当修改为他人的 ID 号时会返回他人的信息,便产生了水平越权。
3,多阶段功能
多阶段功能是一个功能有多个阶段的实现。例如修改密码,可能第一步是验证用户身份信息,号码验证码类的。当验证成功后,跳到第二步,输入新密码,很多程序会在这一步不再验证用户身份,导致恶意攻击者抓包直接修改参数值,导致可修改任意用户密码。
4, 静态文件
很多网站的下载功能,一些被下载的静态文件,例如 pdf、word、xls 等,可能只有付费用户或会员可下载,但当这些文件的 URL 地址泄露后,导致任何人可下载,如果知道 URL 命名规则,则会便利服务器的收费文档进行批量下载。
5,平台配置错误
一些程序会通过控件来限制用户的访问,例如后台地址,普通用户不属于管理员组,则不能访问。但当配置平台或配置控件错误时,就会出现越权访问。
漏洞防御:
1、前后端同时对用户输入信息进行校验,双重验证机制
2、 执行关键操作前必须验证用户身份,验证用户是否具备操作数据的权限
3、特别敏感操作可以让用户再次输入密码或其他的验证信息。
4、可以从用户的加密认证 cookie 中获取当前用户 id,防止攻击者对其修改。或在 session、cookie 中加入不可预测、不可猜解的 user 信息。
5、直接对象引用的加密资源ID,防止攻击者枚举ID,敏感数据特殊化处理
6、永远不要相信来自用户的输入,对于可控参数进行严格的检查与过滤
水平越权:
当我们登录用户之后,进行查看用户的信息
其URL是:
http://192.168.229.130/pika/vul/overpermission/op1/op1_mem.php?username=lucy&submit=%E7%82%B9%E5%87%BB%E6%9F%A5%E7%9C%8B%E4%B8%AA%E4%BA%BA%E4%BF%A1%E6%81%AF
当我们将URL中的用户名进行修改,即可查看其他用户的个人信息,达到水平越权
http://192.168.229.130/pika/vul/overpermission/op1/op1_mem.php?username=kobe&submit=%E7%82%B9%E5%87%BB%E6%9F%A5%E7%9C%8B%E4%B8%AA%E4%BA%BA%E4%BF%A1%E6%81%AF
垂直越权:
登录到超级管理员用户,执行添加用户的操作,并且对过程进行抓包
切换到普通的管理员用户,并没有添加用户的权限
对其进行抓包,并且将其cookie防止刚才抓取的超级管理员添加用户的cookie中,进行发包重放,发现又新建一个相同的用户,此为垂直越权