thNick
- 关注
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
越权漏洞简介
越权,从字面意思理解,指的是超出了既定的权限或权力范围。在大多数的 WEB 应用程序中,都设置了权限划分与控制机制。然而,一旦权限控制功能在设计上存在缺陷,攻击者便有机可乘,他们能够利用这些漏洞,访问原本未经授权的功能或数据,这便是我们常说的越权漏洞。
当攻击者成功越权后,往往可以实施一系列操作,比如查看敏感信息,或者进行数据的增加、删除、修改和查询等操作。
越权漏洞属于一种较为常见的逻辑安全漏洞。其产生的根源在于,服务器端对客户端提交的数据操作请求过度信任,在处理请求时,忽视了对用户操作权限的严格判定。这就使得攻击者只需修改相关参数,便有可能获取其他账户的数据增、删、查、改等功能,进而引发越权漏洞。
水平越权与垂直越权
水平越权
水平越权,又称同级别越权,也被叫做访问控制攻击。当 Web 应用程序接收用户请求,对某条数据执行修改操作之际,存在两种可能引发漏洞的情况:其一,程序根本未对数据所属人加以判断;其二,虽有判断数据所属人的环节,但却是从用户提交的表单参数里获取 userid。这就使得攻击者有机可乘,他们能够自行修改 userid,进而篡改那些并不属于自己的数据。实际上,只要涉及更新语句的操作,都有出现这种漏洞的风险。简单来讲,就是攻击者通过更替诸如 ID 这样的身份标识,让 A 账号得以获取(包括修改等行为)原本属于 B 账号的数据。
常见场景
1、基于用户身份的ID
在使用某个功能时通过用户提交的身份ID (用户ID、账号、手机号、证件号等用户唯一标识)来访问或操作对应的数据。
2、基于对象ID
在使用某个功能时通过用户提交的对象ID (如订单号、记录号)来访问或操作对应的数据。
3、基于文件名
在使用某个功能时通过文件名直接访问文件,最常见于用户上传文件的场景。
垂直越权
垂直越权指的是不同级别或不同角色间的越权行为,它又可细分为向上越权与向下越权。向上越权,即低级别用户试图获取高级别用户的资源。例如在某个系统里,存在普通用户和管理员用户之分,管理员拥有系统管理功能,普通用户则没有,这意味着管理功能存在垂直权限的区分。倘若普通用户借助某些攻击手段,得以访问管理功能,这便属于向上越权,通俗来讲就是 “以下犯上”。而向下越权,是指高级别用户去访问低级别用户的信息,这显然也是不妥的,毕竟每个人都应有自己的隐私空间。
常见场景
1、未认证账户访问无需认证就能访问该功能
2、不具备某个功能权限的账户认证后成功访问该功能
成因
通常情况下,越权漏洞较常出现在那些需要用户登录的权限页面中的增、删、改、查功能区域。当使用者针对权限页面里的信息执行上述操作时,后台系统理应针对当前用户所拥有的权限展开校验工作,以此判定其是否具有执行对应操作的权限,进而做出相应反馈。不过,要是校验规则制定得太过简易,那就极有可能引发越权漏洞。
—前端安全造成:界面
判断用户等级后,代码界面部分进行可选显示
是普通用户只显示普通用户要的操作(查看、修改等)
是管理员只显示管理员要的操作(添加、删除等)
—后端安全造成:数据库
user 表(管理员和普通用户同表),如下表
id | usename | password | type |
1 | root | root123 | root |
2 | admin | admin123 | admin |
案例(pikachu)
水平越权案例
已知三个账号:
lucy/123456
lili/123456
kobe/123456
首先我们随便登录一个账号,比如 lucy,同时抓包,发现显示了& username & password
放包肯定是能登陆上去的。那我们把 username 改成 kobe 或者 lili 后放包呢?
放包,成功登录kobe
实现水平越权,拿到kobe的信息
垂直越权
这里有两个用户admin/123456,pikachu/000000,admin是超级boss
随便登录一个账号
这个,明显是管理员,我们登录pikachu普通用户
发现唯一的不同是管理员账户多了一个添加用户的功能。猜测此处是要不使用管理员账户来获取添加用户的功能。
bp抓包,我们尝试修改pikachu登陆包绕过
很明显失败了
管理员添加用户的数据包
那么我们可以伪造数据包,进行垂直注入(注意需要将cookie值更换为自己普通用户的cookie)
抓普通用户的包
将pikachu这个普通用户的Cookie信息复制。
PHPSESSID=cfgc60qfdbqlk0baso2opbrpk1
在重发器里面,将管理员的Cookie值换成普通用户的Cookie,放包即可。
成功越权,创建
修复防御方案
1.前后端同时对用户输入信息进行校验,双重验证机制
2.调用功能前验证用户是否有权限调用相关功能
3.执行关键操作前必须验证用户身份,验证用户是否具备操作数据的权限
4.直接对象引用的加密资源 ID,防止攻击者枚举 ID,敏感数据特殊化处理
5.永远不要相信来自用户的输入,对于可控参数进行严格的检查与过滤
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)