越权漏洞基础

越权漏洞

over permission

水平越权

用户1可以在自己的登录状态下访问用户2的隐私信息

在pikachu靶场中,我们使用lucy的账号首先登录

image-20220321101303083

发现url里面有一个"username=lucy",把值改为kobe然后执行

image-20220321101409350

发现kobe的隐私信息也可以被访问

前端逻辑:

                <form class="msg1" method="get">
                    <input type="hidden" name="username" value="lucy" />
                    <input type="submit" name="submit" value="点击查看个人信息" />
                </form>

后端逻辑:

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

可见后端是通过前端提交的get方法中的username来决定是否查询数据库还有查询谁的数据库,也就是说,只要前端username不为空就查,只要库里有username的值就返回查询结果

发生这种漏洞的原因是网站开发人员对于用户的过度信任,开发人员认为用户只会在自己登录后的页面上点击

image-20220321102025960

但是用户稍微了解一下url的知识就有可能在url行中把username改成其他用户名

此时就发生了水平越权漏洞

为啥叫"水平",个人理解是两个发生在两个平级用户账号(在本靶场中表现为两个普通用户)之间的漏洞,

相对于"垂直",垂直应该发生在管理员和普通用户之间,推测是普通用户可以利用漏洞访问管理员的隐私,或者做一些只有管理员才可以的操作

垂直越权

首先使用管理员admin账号登录

image-20220321102638605

然后用普通用户登录

image-20220321102800858

我猜此处"垂直越权"就是虽然普通用户虽然看起来"只有查看权限",但是可以通过提交管理员添加用户的表单也可以实现添加用户功能

以管理员登录时,我们发现删除操作实际是指定要删除记录的id然后以get方法发送给后端op2.admin.php文件

image-20220321104616350

我们以普通用户pikachu登录然后再url行最后也这样写却直接掉线了,查阅后端代码发现确实此处有权限检查

$link=connect();
// 判断是否登录,没有登录不能访问
//如果没登录,或者level不等于1,都就干掉
if(!check_op2_login($link) || $_SESSION['op2']['level']!=1){
    header("location:op2_login.php");
    exit();
}
//删除
if(isset($_GET['id'])){
    $id=escape($link, $_GET['id']);//转义
    $query="delete from member where id={$id}";
    execute($link, $query);
}

管理员还有一个注册新用户的功能,以管理员登录查看前端代码

<p class="edit_title">hi,admin,欢迎来到后台管理中心 | <a style="color:bule;" href="op2_admin_edit.php?logout=1">退出登录</a>|<a href="op2_admin.php">回到admin</a></p>				
			<form class="from_main" method="post">
                    <label>用户:<br /><input type="text" name="username" placeholder="必填"/></label><br />
                    <label>密码:<br /><input type="password" name="password" placeholder="必填"/></label><br />
                    <label>性别:<br /><input type="text" name="sex" /></label><br />
                    <label>电话:<br /><input type="text" name="phonenum" /></label><br />
                    <label>邮箱:<br /><input type="text" name="email" /></label><br />
                    <label>地址:<br /><input type="text" name="address" /></label><br />
                    <input class="sub" type="submit" name="submit" value="创建" />
                </form>

发现是一个post表单,猜测发送给后端的op2_admin_edit.php

现在用普通用户登录然后将

http://127.0.0.1/pikachu/vul/overpermission/op2/op2_user.php

改为

http://127.0.0.1/pikachu/vul/overpermission/op2/op2_admin_edit.php

image-20220321105400411

发现我们可以访问该页面进行新建用户

查看后端代码

$link=connect();
// 判断是否登录,没有登录不能访问
//这里只是验证了登录状态,并没有验证级别,所以存在越权问题。
if(!check_op2_login($link)){
    header("location:op2_login.php");
    exit();
}
if(isset($_POST['submit'])){
    if($_POST['username']!=null && $_POST['password']!=null){//用户名密码必填
        $getdata=escape($link, $_POST);//转义
        $query="insert into member(username,pw,sex,phonenum,email,address) values('{$getdata['username']}',md5('{$getdata['password']}'),'{$getdata['sex']}','{$getdata['phonenum']}','{$getdata['email']}','{$getdata['address']}')";
        $result=execute($link, $query);
        if(mysqli_affected_rows($link)==1){//判断是否插入
            header("location:op2_admin.php");
        }else {
            $html.="<p>修改失败,请检查下数据库是不是还是活着的</p>";

        }
    }
}

确实没有检查权限等级

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

灰球球

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值