目录
一、Over permission
1.简介
越权访问(Broken Access Control,简称BAC)是Web应用程序中一种常见的漏洞,由于其存在范围广、危害大,被OWASP列为Web应用十大安全隐患的第二名。
该漏洞是指应用在检查授权时存在纰漏,使得攻击者在获得低权限用户账户后,利用一些方式绕过权限检查,访问或者操作其他用户或者更高权限。越权漏洞的成因主要是因为开发人员在对数据进行增、删、改、查询时对客户端请求的数据过分相信而遗漏了权限的判定。在实际的代码审计中,这种漏洞往往很难通过工具进行自动化监测,因此在实际应用中危害很大。其与未授权访问有一定差别,目前存在着两种越权操作类型,横向越权操作(水平越权)和纵向越权操作(垂直越权)。
概念
水平越权:指相同权限下不同的用户可以互相访问
垂直越权:指使用权限低的用户可以访问到权限较高的用户
水平越权测试方法:主要通过看看能否通过A用户操作影响到B用户
垂直越权测试思路:看看低权限用户是否能越权使用高权限用户的功能,比如普通用户可以使用管理员的功能。
把握住传参就能把握住逻辑漏洞的命脉
越权测试:
登录用户A时,正常更改或者是查看A的用户信息,然后抓取数据包,将传参ID修改为其他用户,如果成功查看或者修改了同权限其他用户信息就属于水平越权测试(如果可以影响到高权限用户就是垂直越权)
传参ID需要自己检测(例如:uid= id= user=等)通常使用burp进行爆破传参(传参可能在get post cookie)
常见平行越权:
例如:
不需要输入原密码的修改密码
抓包改用户名或者用户id修改他人密码
修改资料的时候修改用户id
查看订单的时候,遍历订单id
防范措施
- 前后端同时对用户输入信息进行校验,双重验证机制
- 调用功能前验证用户是否有权限调用相关功能
- 执行关键操作前必须验证用户身份,验证用户是否具备操作数据的权限
- 直接对象引用的加密资源ID,防止攻击者枚举ID,敏感数据特殊化处理
- 永远不要相信来自用户的输入,对于可控参数进行严格的检查与过滤
二、闯关
1.水平越权
也称为横向越权,指相同权限下不同的用户可以互相访问。
用户名和密码:
登录lucy的,注意访问后回显的URL,username字段是lucy。
我们把username字段值lucy改为kobe,看看能否访问,是可以访问的。
和我们登录到kobe是一样的
用bp抓一下lili包,并没有发现什么,只是没有session值,估计是这个原因,看看源码吧。
1.1 源码
果然,因为查找用户信息的时候传入的参数是直接从url中获取的,没有校验当前用户。
1.2防御
既然没有检验,我们就给他添加一个简单的验证,在27行增加判断url传入的username和当前用户是否匹配,如果匹配则为$username赋值,若不匹配则不赋值。
if($_SESSION['op']['username']==$_GET['username']){
$username=escape($link,$_GET['username']);
}
登录lucy用户
username的值改为kobe,弹出来查看个人信息。
我们点击发现信息变成了lucy的信息,防御成功!!!
2.垂直越权
又称纵向越权,指使用权限低的用户可以访问到权限较高的用户。
两个用户,一个普通,一个超级。
登录pikachu用户,发现只有查看的权限。
admin可以查看,添加,删除。
查看的url
http://127.0.0.1/pikachu/vul/overpermission/op2/op2_admin.php
添加用户的url
http://127.0.0.1/pikachu/vul/overpermission/op2/op2_admin_edit.php
删除的url
http://127.0.0.1/pikachu/vul/overpermission/op2/op2_admin.php?id=35
我们在次登录普通用户pikachu
输入查看用户的url发现需要登录,说明不存在垂直越权。
输入添加用户的url,发现可以进入,
创建一个用户,成功!
登录管理员admin用户看一下是否成功,成功,说明添加用户url存在垂直越权。
删除页面是每删除一个,url的id值就加一。
http://127.0.0.1/pikachu/vul/overpermission/op2/op2_admin.php?id=38
删除aaa用户的id对应为38,并没有删除成功。
此方法说明只有添加用户页面存在垂直越权。
我们用bp抓包添加页面看看
记下来cookie值
PHPSESSID=20ns196el812ir60tilre59hfb
抓一下pikachu登录后的包,把它的cookie值替换admin添加页面的cookie
成功创建7
2.1 代码
先看没问题的删除操作op2_admin.php:
主要是23~26行,判断了用户是否登录,是否权限级别为1(超级boss),如果任意一条不满足,就跳转到登录页面。
再来看看有问题的op2_admin_edit.php:
22~25行,只验证了用户是否登录,如果没登录就跳转到登录页面,没有验证用户权限等级,但前端显示添加用户是权限等级为1的用户才能执行的操作,因此这里有垂直越权漏洞。
2.2防御
根据op2_admin.php修改一下op2_admin_edit.php:
22行增加对用户权限等级的判断$_SESSION['op2']['level']!=1
现在代码的意思变成,如果用户没登录或者权限等级不为1,则跳转到登录页面。
在次在pikachu页面输入添加用户的url
http://127.0.0.1/pikachu/vul/overpermission/op2/op2_admin_edit.php
直接跳转到登录页面,防御成功!!!