概述:
平行越权:
垂直越权:
我们发现它是get型的数据,通过URL可以重新构造,比如我们把下面红色标明的用户名换成其他的用户名,我们看看能不能访问其他人的信息:
发现竟然访问到了kobe的信息,不用密码验证,这是存在水平越权的。我们来看看代码(路径如下图所示),里面标记的部分并未对前台的值进行校验,也没有与登录态的关系进行绑定,直接使用传入的值:
登录超级用户admin,我们发现在这里可以查看用户列表和添加用户,还可以删除用户:
我们添加用户,然后在点击创建之前做个代理,用Burp Suite抓包,发现有一个登录状态的cookie:
发送到Repeater,在抓包的页面我们点击Forward把包放出去,不然前端收不到数据肯定无法创建成功。然后我们在页面中退出登录,之后进入Repeater,我们点击重定向(Follow redirection),会重定向到登录的页面,因为在重定向之前,我们在火狐页面退出了admin,所以现在当然会要求重新登录:
我们再次登录admin,发现新用户的创建成功:
登录普通用户pikachu/000000,然后Burp Suite中抓到了包:
我们发现了普通用户登录状态的cookie,把它复制下来,进入Repeater,因为我们除了超级用户的数据包,没有发送过别的数据包给Repeater,我们需要找到刚刚那个最初超级用户创建新用户时的数据包,然后重新发送给Repeater,因为上一个已经被我们给重定向放出去了(如下图找post数据,看下面什么时候出现我们创建用户的信息,那就是这个包):
把新发给Repeater的包中的cookie改成下面的值:
现在处于登录状态的是普通用户,所以我们用超级用户的cookie是无法登录的,我们用原本的外壳,填入了普通用户的cookie,才能重定向后成功登录执行创建用户的这个包:
然后在火狐页面解除代理,刷新后就会发现又多了一个一模一样的新用户,这是普通用户创建的:
这样用普通管理员去做超级管理员的操作就是垂直越权,但是比较鸡肋 因为现实很难抓到超级管理员的包,但是为了防止这种越权漏洞的产生,在权限管理中应该遵守:
1.使用最小权限原则对用户进行赋权
2.使用合理(严格)的权限校验规则
3.使用后台登录态作为条件进行权限判断,别动不动就瞎用前端传进来的条件