1 越权漏洞描述
越权访问(Broken Access Control,简称 BAC)是 Web 应用程序中一种常见的漏洞,由于其存在范围广、危害大,被 OWASP 列为 Web 应用十大安全隐患的第二名。
该漏洞是指应用在检查授权时存在纰漏,使得攻击者在获得低权限用户账户后,利用一些方式绕过权限检查,访问或者操作其他用户或者更高权限。越权漏洞的成因主要是因为开发人员在对数据进行增、删、改、查询时对客户端请求的数据过分相信而遗漏了权限的判定,一旦权限验证不充分,就易致越权漏洞。
2. 越权漏洞的分类
2.1. 平行越权(水平越权)
水平越权:指相同权限下不同的用户可以互相访问
登录普通账号,修改查询的 id 或者用户。
2.2 水平越权代码分析
username 传入在此之前没有任何验证,传入参数拼接到数据库查询了。没有进行验证权限验证。
3. 垂直越权漏洞
垂直越权是不同级别之间或不同角色之间的越权,一般是低权限用户往高权限越权
3.1. 垂直越权漏洞利用
准备两个不同权限的账号 分别登录同一个网站,查看低权限的缺少高权限那些模块,抓取高权限的的模块
请求参数,再切换低权限用户再进行提交。
管理员 admin 123456 普通用户 pikachu 000000
管理员权限
普通权限
把 admin cookie 替换成 pikachu 的 cookie
把原来 admin 的 cookie 替换成 pikachu 用户的 cookie
越权成功,将会添加一个 moonsec 用户
3.2 垂直越权代码分析
登录账号和密码,在数据库中,返回 level 如果等于 1 跳转管理员页面
在op2_login.php源码
如果等于 2 就进行用户页面。
在 op2_admin_edit.php 源码中,只是判断是否登录,并没有对用户权限进行验证,只要是登录就能往下操作,这个页面的添加账号信息。所以登录的任何用户只要提交参数即可创建用户。
4 越权漏洞修复方案
1、基础安全架构,完善用户权限体系。要知道哪些数据对于哪些用户,哪些数据不应该由哪些用户操作;
2、鉴权,服务端对请求的数据和当前用户身份做校验;
3、不要直接使用对象的实名或关键字。
4、对于可控参数进行严格的检查与过滤!