【业务安全-02】业务逻辑漏洞之越权操作
越权
越权即越权查看被人的信息,又分为水平越权和垂直越权,但是两者的本质都是一样的,只是越权的身份权限不一样而已
水平越权:相同级别的用户,如用户A访问用户B
垂直越权:普通用户到管理员,普通用户访问管理员
从上图可以看出权限问题,用户A和用户B都属于普通用户这一权限,权限最高的是管理员,所谓的越权关系是指同一权限的关系和高低权限的关系。
如果使用用户A的权限去操作用户A的数据,用户A的权限小于用户B的权限,如果能够成功操作,则称之为越权操作。 越权漏洞形成的原因是后台使用了 不合理的权限校验规则导致的。
一般越权漏洞容易出现在权限页面(需要登录的页面)增、删、改、查的的地方,当用户对权限页面内的信息进行这些操作时,后台需要对 对当前用户的权限进行校验,看其是否具备操作的权限,从而给出响应,而如果校验的规则过于简单则容易出现越权漏洞。
因此,在在权限管理中应该遵守:
1.使用最小权限原则对用户进行赋权;
2.使用合理(严格)的权限校验规则;
3.使用后台登录态作为条件进行权限判断,别动不动就瞎用前端传进来的条件;
越权的漏洞类型还是挺多的,比如越权查看别人信息,越权修改密码,通过id进行订单遍历等。但是本质都是一样的,都是因为数据包中存在某个参数值,而这个参数值又决定了某个用户的身份。当将其值进行修改,就可以查看到别的用户的信息。
靶场实战
靶场环境:pikachu-master/PHPStudy PHP-5.4.45
抓包工具:burp
水平越权
用户A和用户B属于同一级别的用户,但双方不能操作对方的个人信息,如果用户A越权操作用户B的个人信息,我们称之为水平越权操作。进入靶场我们发现有三个用户lucy、lili、kobe,密码都为123456
进入靶场登录用户,查看信息,进行抓包
这里我们发现username可以修改的,我们修改username观察是否可以进行数据读取(这里的username就相当于id,具有唯一性)
由此可见,我们修改username就能查看其他用户的信息(tips:我们可以通过在网页中浏览用户,相同账号名不能创建、在url中进行id遍历等方式获取其他用户的username)
查看源代码,我们发现后台只判断是否登录并没有用session来校验
因为在查看信息的界面 只判断了是否登录 并没有判断是哪个用户
垂直越权
用户A权限高于用户B,用户B越权操作用户A的权限称之为垂直越权,进入靶场我们发现有两个用户admin是超级boss,密码是123456,pikachu只有查看权限,密码为000000
方式一:
首先我们登录管理员账号,进入添加用户界面的url,而这个url默认只有管理员才能访问,那么如何让普通用户也能进行访问呢?我们先记下这个url地址
退出管理员登录普通用户,然后访问记下的url,发现可以成功访问,并添加用户wyy
退出普通用户登录admin,发现wyy被添加成功
方式二:
重新登录管理员账号添加用户,利用burp进行抓包,将抓到的包放到repeater模块中
退出管理员登录后,然后用普通用户进行登录,复制普通用户的cookie值到repeater模块中替换掉原来的cookie
修改用户信息让添加的用户更清楚,然后点击send进行发送
回到浏览器刷新页面发现成功添加新用户,xzz为admin创建数据包时添加的,而xzq为重放数据包添加的
总结:
水平越权与垂直越权的区别:水平越权访问是一种 “基于数据的访问控制” 设计缺陷引起的漏洞,垂直越权是一种 “基于 URL 的访问控制” 设计缺陷引起的漏洞,本质上是所利用的漏洞不同获得的权限不同。垂直越权是一种 “基于 URL 的访问控制” 设计缺陷引起的漏洞,又叫做权限提升攻击,而水平越权访问是一种 “基于数据的访问控制” 设计缺陷引起的漏洞,两者在本质上完全不同。