pikachu-越权(水平越权+垂直越权)

越权漏洞介绍:

如果使用A用户的权限去操作B用户的数据,A的权限小于B的权限,如果能够成功操作,则称之为越权操作。 越权漏洞形成的原因是后台使用了 不合理的权限校验规则导致的。
一般越权漏洞容易出现在权限页面(需要登录的页面)增、删、改、查的的地方,当用户对权限页面内的信息进行这些操作时,后台需要对 对当前用户的权限进行校验,看其是否具备操作的权限,从而给出响应,而如果校验的规则过于简单则容易出现越权漏洞。
因此,在在权限管理中应该遵守:
1.使用最小权限原则对用户进行赋权;
2.使用合理(严格)的权限校验规则;
3.使用后台登录态作为条件进行权限判断,别动不动就瞎用前端传进来的条件;
你可以通过“Over permission”对应的测试栏目,来进一步的了解该漏洞。

首先给了我们三个普通用户:lucy/123456,lili/123456,kobe/123456

 

1、水平越权

查看代码:

if(isset($_GET['submit']) && $_GET['username']!=null){
    //没有使用session来校验,而是使用的传进来的值,权限校验出现问题,这里应该跟登录态关系进行绑定
    $username=escape($link, $_GET['username']);
    $query="select * from member where username='$username'";
    $result=execute($link, $query);
    if(mysqli_num_rows($result)==1){
        $data=mysqli_fetch_assoc($result);
        $uname=$data['username'];
        $sex=$data['sex'];
        $phonenum=$data['phonenum'];
        $add=$data['address'];
        $email=$data['email'];

        $html.=<<<A
<div id="per_info">
   <h1 class="per_title">hello,{$uname},你的具体信息如下:</h1>
   <p class="per_name">姓名:{$uname}</p>
   <p class="per_sex">性别:{$sex}</p>
   <p class="per_phone">手机:{$phonenum}</p>    
   <p class="per_add">住址:{$add}</p> 
   <p class="per_email">邮箱:{$email}</p> 
</div>
A;
    }
}

这里修改个人用户信息凭借的仅仅只是传入的username,如果输入了其他用户的username,那相当于就是查看其他用户的个人信息

我们登录lucy的账号,但是传入的username分别改为lucy、lili、kobe个人具体信息如下:

 

 

2、垂直越权

垂直越权提供了两个账号:admin/123456,pikachu/000000,admin是管理员,而pikachu是普通用户

查看代码:

// 判断是否登录,没有登录不能访问
//这里只是验证了登录状态,并没有验证级别,所以存在越权问题。
if(!check_op2_login($link)){
header("location:op2_login.php");
exit();
}

check_op2_login()函数跟进:

function check_op2_login($link){
    if(isset($_SESSION['op2']['username']) && isset($_SESSION['op2']['password'])){
        $query="select * from users where username='{$_SESSION['op2']['username']}' and sha1(password)='{$_SESSION['op2']['password']}'";
        $result=execute($link,$query);
        if(mysqli_num_rows($result)==1){
            return true;
        }else{
            return false;
        }
    }else{
        return false;
    }
}

op2_admin_edit.php中只对登录情况计行了判断,而没有对用户的权限进行判断,所以普通用户也可以进入该网站添加新用户实现垂直越权

而op2_admin.php对session中的level进行判断,代码:

//如果没登录,或者level不等于1,都就干掉
if(!check_op2_login($link) || $_SESSION['op2']['level']!=1){
    header("location:op2_login.php");
    exit();
}

所以只要登录的用户的level不为1就会自动退出登录,无法进行越权

 

我们使用普通用户pikachu可以访问到admin用户添加用户的url(未授权访问)

创建之后我们进入admin用户进行查看,发现这个用户添加成功了,pikachu使用了admin才有的权利

 

posted @ 2021-02-01 16:46  1jzz  阅读(692)  评论(0编辑  收藏  举报