Over-authority learning

  1. 目录
  • 前言
  • 越权漏洞学习
  • 总结
  • 目录

    • 前言
    • 越权漏洞学习
    • 总结

    前言

    今天学习了越权漏洞,对此漏洞了解和总结了一些方法。感觉还行

    越权漏洞学习


    • 越权漏洞的形成
    • 越权分类
    • 其他越权
    • 实验

    越权漏洞的形成


    由于程序员在处理数据查询的时候,没有对查询参数进行越权判断。导致越权漏洞的发生,这个漏洞 可以说是极为威胁的。因为在漏洞处你可以获取整站的数据,甚至将自己提升为管理员权限
    越权分类


    越权限漏洞分为两类:

    • 平行越权
    • 垂直越权

    平行越权:

    修改存在越权漏洞的参数可以查询到别人的信息
    

    垂直越权

    比如在登录的时候有个参数用来判断是什么权限,1是管理员权限,0是普通用户权限。那么我修改
    这个id即可达到用普通用户登录但拥有管理员权限,这就是垂直越权。
    

    其他越权


    越权不是只有web才有,其他的也有。比如软件,插件,其他的一些东东
    文章:使用MailSniper越权访问Exchange邮箱

    实验


    我们来看个存在平行越权漏洞的代码

    <?php
    /**
     * Created by runner.han
     * There is nothing new under the sun
     */
    
    
    $SELF_PAGE = substr($_SERVER['PHP_SELF'],strrpos($_SERVER['PHP_SELF'],'/')+1);
    
    if ($SELF_PAGE = "op1_login.php"){
        $ACTIVE = array('','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','active open','','active','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','');
    }
    $PIKA_ROOT_DIR =  "../../../";
    include_once $PIKA_ROOT_DIR . 'header.php';
    include_once $PIKA_ROOT_DIR.'inc/mysql.inc.php';
    include_once $PIKA_ROOT_DIR.'inc/function.php';
    include_once $PIKA_ROOT_DIR.'inc/config.inc.php';
    
    $link=connect();
    // 判断是否登录,没有登录不能访问
    if(!check_op_login($link)){
        header("location:op1_login.php");
    }
    $html='';
    if(isset($_GET['submit']) && $_GET['username']!=null){
        //没有使用session来校验,而是使用的传进来的值,权限校验出现问题,这里应该跟登录态关系进行绑定
        $username=escape($link, $_GET['username']);
        $query="select * from member where username='$username'"; /*没有任何判断的$usernaem,而且变量可控,通过修改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;
        }
    }
    
    
    if(isset($_GET['logout']) && $_GET['logout'] == 1){
        session_unset();
        session_destroy();
        setcookie(session_name(),'',time()-3600,'/');
        header("location:op1_login.php");
    
    }
    
    
    
    ?>
    
    
    
    
    
    <div class="main-content">
        <div class="main-content-inner">
            <div class="breadcrumbs ace-save-state" id="breadcrumbs">
                <ul class="breadcrumb">
                    <li>
                        <i class="ace-icon fa fa-home home-icon"></i>
                        <a href="../op.php">Over Permission</a>
                    </li>
                    <li class="active">op1 member</li>
                </ul><!-- /.breadcrumb -->
                <a href="#" style="float:right" data-container="body" data-toggle="popover" data-placement="bottom" title="tips(再点一下关闭)"
                   data-content="这里可以查别人的信息吗?">
                    点一下提示~
                </a>
    
            </div>
            <div class="page-content">
                <div id="mem_main">
                    <p class="mem_title">欢迎来到个人信息中心  | <a style="color:bule;" href="op1_mem.php?logout=1">退出登录</a></p>
                    <form class="msg1" method="get">
                        <input type="hidden" name="username" value="<?php echo $_SESSION['op']['username']; ?>" />
                        <input type="submit" name="submit" value="点击查看个人信息" />
                    </form>
                    <?php echo $html;?>
    
                </div>
    
    
            </div><!-- /.page-content -->
        </div>
    </div><!-- /.main-content -->
    
    
    
    
    
    
    <?php
    include_once $PIKA_ROOT_DIR . 'footer.php';
    
    ?>
    

    从代码里可以看出,$username变量可控,而且没做任何过判断,存在水平越权
    这里有两个用户

    username:lili
    password:123456
    
    username:lucy
    password:12346
    

    用lili的登录查询个人信息
    kUqcTg.png

    尝试将lili修改为lucy
    kUqWfs.png

    成功查询到lucy的个人信息

    垂直越权:
    op2_admin_edit.php

    <?php
    /**
     * Created by runner.han
     * There is nothing new under the sun
     */
    
    
    $SELF_PAGE = substr($_SERVER['PHP_SELF'],strrpos($_SERVER['PHP_SELF'],'/')+1);
    
    if ($SELF_PAGE = "op2_admin_edit.php"){
        $ACTIVE = array('','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','active open','','','active','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','');
    }
    $PIKA_ROOT_DIR =  "../../../";
    include_once $PIKA_ROOT_DIR . 'header.php';
    include_once $PIKA_ROOT_DIR.'inc/mysql.inc.php';
    include_once $PIKA_ROOT_DIR.'inc/function.php';
    include_once $PIKA_ROOT_DIR.'inc/config.inc.php';
    
    $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>";
    
            }
        }
    }
    
    
    if(isset($_GET['logout']) && $_GET['logout'] == 1){
        session_unset();
        session_destroy();
        setcookie(session_name(),'',time()-3600,'/');
        header("location:op2_login.php");
    
    }
    
    
    
    ?>
    
    
    
    
    
    <div class="main-content">
        <div class="main-content-inner">
            <div class="breadcrumbs ace-save-state" id="breadcrumbs">
                <ul class="breadcrumb">
                    <li>
                        <i class="ace-icon fa fa-home home-icon"></i>
                        <a href="../op.php">Over Permission</a>
                    </li>
                    <li class="active">op2 admin edit</li>
                </ul><!-- /.breadcrumb -->
                <a href="#" style="float:right" data-container="body" data-toggle="popover" data-placement="bottom" title="tips(再点一下关闭)"
                   data-content="想知道当超级boss是什么滋味吗">
                    点一下提示~
                </a>
    
            </div>
            <div class="page-content">
                <div id="edit_main">
                    <p class="edit_title">hi,<?php if($_SESSION['op2']['username']){echo $_SESSION['op2']['username'];} ?>,欢迎来到后台管理中心 | <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>
    
    
                </div>
    
    
            </div><!-- /.page-content -->
        </div>
    </div><!-- /.main-content -->
    
    
    
    
    <?php
    include_once $PIKA_ROOT_DIR . 'footer.php';
    
    ?>
    

    有两个用户

    admin/123456,pikachu/000000,admin是超级boss
    

    用pikachu登录
    kUj45F.png

    直接访问admin_edit.php
    kUjXVK.png
    可以为所欲为了

    总结


    在学习此漏洞之前看了一些有关越权的文章
    Referer:
    逻辑让我崩溃之越权姿势分享
    逻辑让我崩溃之越权姿势分享(续集)
    黑盒测试 | 某招聘系统CSRF越权修改
    SRCMS 多处越权+权限提升管理员漏洞
    ebay旗下电商平台magento go越权管理任意店铺
    https://www.secquan.org/News/1068176

    挖越权时注意一下几点:

    • 抓包看请求头和参数,能改的都改一下看一下会不会返回不同的
    • 如果表单里面有个/添加个value是否会显示出来从而越权,
    <input type="text" name="username"/>
    
    • 通过收集请求变量名然后对应返回的结果,用Burp进行Fuzz测试有可能可以越权
    • 登录或者执行其他操作的时候数据包里是否有判断权限的参数如果有修改一下是否能达到垂直越权
    • 去掉一些参数进行请求能否获取一样的数据?或者说返回报错信息,如果是加密信息构造明文信息是否返回一样的结果?
    • 如果是白盒测试,注意是否有对进行查询的参数进行过滤?自行修改能否越权
    • 白盒测试时,如果审计代码时发现某个敏感目录没有做权限判断可以直接访问那么就找到一个越权了
    • 在请求的时候进行HTTP污染能否达到越来权?比如多增加一个一样的请求名

    挖越权之前可以看一下上面的文章找一下感觉

    转载请声明:转自422926799.github.io


    转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。

    文章标题:Over-authority learning

    本文作者:九世

    发布时间:2019-02-10, 23:14:43

    最后更新:2019-04-19, 20:36:16

    原始链接:http://422926799.github.io/posts/a51c9bbc.html

    版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

    目录