如果使用A用户的权限去操作B用户的数据,A的权限小于B的权限,如果能够成功操作,则称之为越权操作。 越权漏洞形成的原因是后台使用了不合理的权限校验规则导致的。
一般越权漏洞容易出现在权限页面(需要登录的页面)增、删、改、查的的地方,当用户对权限页面内的信息进行这些操作时,后台需要对当前用户的权限进行校验,看其是否具备操作的权限,从而给出响应,而如果校验的规则过于简单则容易出现越权漏洞。
因此,在在权限管理中应该遵守:
1.使用最小权限原则对用户进行赋权;
2.使用合理(严格)的权限校验规则;
3.使用后台登录态作为条件进行权限判断,别动不动就瞎用前端传进来的条件;
水平越权,指相同权限下不同的用户可以互相访问,比如A和B是同权限的用户,如果A能看到理论上只有B能看到的信息,或者A能执行理论上只有B能执行的操作。
看题目,首先还是熟悉的登录界面,看提示,我们选择用lucy登录
再点击查看个人信息,我们注意到了上面url有显示,说明是get传参
那么会不会该参数值是哪个用户名就回显哪个用户的信息呢?
我们把lucy改为lili,发现我们没登录就显示出了lili的信息,换成kobe也是一样的
这个漏洞是怎么出现的呢?我们查看源码
和猜想的一样,是因为查找用户信息的时候传入的参数是直接从url中获取的,没有校验当前用户
垂直越权指使用权限低的用户可以访问到权限较高的用户。比如A用户权限比B低,如果A可以访问理论上只有B才能访问的资源,或者执行理论上B才能执行的操作。
还是看提示,我们选择用admin登录,查看有哪些权限
发现admin有查看,添加,删除的权限
再换pikachu登录
发现其只有查看权限
再换回admin,我们试着添加一个用户xunlei
url是 http://127.0.0.1/pk/vul/overpermission/op2/op2_admin_edit.php
再把这个xunlei删掉,注意到url这里突然多了个id=25
即 http://127.0.0.1/pk/vul/overpermission/op2/op2_admin.php?id=25
现在,我们退出admin,换为用pikachu登录
我们将地址栏的url改为:http://127.0.0.1/pk/vul/overpermission/op2/op2_admin_edit.php
就直接来到了添加用户的界面,但我们发现,pikachu也有了添加用户的权限
我们再随便创建一个用户Tom
创建完之后会跳到登录页面,不要担心,用pikachu登录之后,发现用户Tom已经创建成功!
查看源码:
22~25行,只验证了用户是否登录,如果没登录就跳转到登录页面,没有验证用户权限等级,但前端显示添加用户是权限等级为1的用户才能执行的操作,因此这里有垂直越权漏洞。