漏洞描述
越权访问(Broken Access Control,BAC),指应用在检查授权时存在漏洞,使得攻击者在获得低权限用户账号后,利用一些方式绕过权限检查,访问或者操作其他用户或者更高权限的用户。
越权漏洞的成因是因为开发人员在对数据进行增删查改时,对客户端请求的数据过分相信而遗漏了权限的判定,权限验证不当而导致的越权行为。
漏洞原因
通常情况下,一个 Web 程序功能流程是登录 - 提交请求 - 验证权限 - 数据库查询 - 返回结果。如果验证权限不足,便会导致越权。常见的程序都会认为通过登录后即可验证用户的身份,从而不会做下一步验证,最后导致越权。
漏洞分类
水平越权
垂直越权
登录lucy用户
然后修改URL中的username的值为kobe。
越权成功。
当然也还可以使用bp抓包的方式修改数据包中URL的参数实现水平越权。
op1_mem.php
用户信息是直接从url中获取的,没有校验当前用户
function.php
查看check_op_login函数,函数只检查了isset($_SESSION[‘op’][‘username’]) && isset($_SESSION[‘op’][‘password’])
,也就是用于检查会话变量中是否存在 'op'
数组中的 'username'
和 'password'
键。
op1_mem.php
尝试进行防御,使用session来校验,增加一个if判断url传入的username和当前用户是否匹配,如果匹配则为$username赋值,若不匹配则不赋值。
if($_SESSION['op']['username'] == $_GET['username']){
$username=escape($link, $_GET['username']);
}
验证:在lucy登录的情况下,在URL路径中修改username的值为lili。
成功防御!
查看提示信息
提示信息表示admin用户是最高权限的。
先使用pikachu用户登录,显示我们只有查看的权限。
使用admin账户进行登录,显示我们有查看用户,添加用户以及和删除用户的权限。
使用admin用户添加一个用户,并使用bp抓取数据包。(同样删除用户也可以)
然后回到页面中退出管理员登录,再登录pikachu用户,并且使用bp抓取数据包
将pikachu这个普通用户的Cookie信息复制。
Cookie: BkGOp9578O_think_template=default; PHPSESSID=8g9mq8duq1kc55kbmp6t7espq1
在重发器里面,将管理员的Cookie值换成普通用户的Cookie,放包即可。
这里我点击了两次,然后回到页面查看,添加了两个xiaoxue用户。
越权成功。
op2_login.php
说明:如果级别是1,进入amdin.php。如果级别是2,进入user.php。
op2_admin.php
说明:这段代码判断了用户是否登录,是否权限级别为1(也就是admin用户),如果任意一条不满足,就跳转到登录页面。
op2_admin_edit.php
说明:op2_admin_edit.php中只是验证了用户是否登录,如果没登陆就跳转到登录页面,没有验证用户的权限级别等级,但是前端显示添加用户的权限级别为1的用户才能执行的操作。所以这里才会出现垂直越权漏洞。
function.php
修改op2_admin_edit.php文件,对用户权限等级进行判断,判断用户级别是否为1。现在代码的意思变成,如果用户没登录或者权限等级不为1,则跳转到登录页面。
if(!check_op2_login($link) || $_SESSION['op2']['level']!=1){
header("location:op2_login.php");
exit();
}
验证我们的防御措施是否生效,首先登录admin账户后添加一个xiaoha用户
然后使用bp抓取数据包
退出登录后再使用pikachu用户登录,抓包将pikachu用户的Cookie信息替换到指定位置,然后放包即可。
现在发现无论怎么放包都不会在添加用户了。
常见的防御措施: