• with rollup


    实验吧的一道ctf题,这两天无聊,做做ctf题。在实验吧被一道也题卡了好久。

    页面很简单就是一个登陆页面,按照之前的经验觉得应该是注入吧。再看题猜测应该是绕waf之类的。

    查看页面源码找到了提供的源代码

    <?php
    error_reporting(0);

    if (!isset($_POST['uname']) || !isset($_POST['pwd'])) {
        echo '<form action="" method="post">'."<br/>";
        echo '<input name="uname" type="text"/>'."<br/>";
        echo '<input name="pwd" type="text"/>'."<br/>";
        echo '<input type="submit" />'."<br/>";
        echo '</form>'."<br/>";
        echo '<!--source: source.txt-->'."<br/>";
        die;
    }

    function AttackFilter($StrKey,$StrValue,$ArrReq){  
        if (is_array($StrValue)){
            $StrValue=implode($StrValue);
        }
        if (preg_match("/".$ArrReq."/is",$StrValue)==1){   
            print "姘村彲杞借垷锛屼害鍙禌鑹囷紒";
            exit();
        }
    }

    $filter = "and|select|from|where|union|join|sleep|benchmark|,|\(|\)";
    foreach($_POST as $key=>$value){
        AttackFilter($key,$value,$filter);
    }

    $con = mysql_connect("XXXXXX","XXXXXX","XXXXXX");
    if (!$con){
        die('Could not connect: ' . mysql_error());
    }
    $db="XXXXXX";
    mysql_select_db($db, $con);
    $sql="SELECT * FROM interest WHERE uname = '{$_POST['uname']}'";
    $query = mysql_query($sql);
    if (mysql_num_rows($query) == 1) {
        $key = mysql_fetch_array($query);
        if($key['pwd'] == $_POST['pwd']) {
            print "CTF{XXXXXX}";
        }else{
            print "浜﹀彲璧涜墖锛�";
        }
    }else{
        print "涓€棰楄禌鑹囷紒";
    }
    mysql_close($con);

    编码问题也懒得改。其实源码也蛮简单的,前面就是讲过滤了什么的,后面是sql语句。但是一看select  () sleep 这些全部没了,数组也给字符串化,基本上想要查数据就很难了。实在是头有点痛,去翻了好多大佬的博客,想看看有没有黑科技可以用的。没有找到。

    最后还是屈服去看wp了。结果这个语句完全没有想到:uname=admin'|| 1 limit 1%23&pwd= 过第一重防护,最终用到uname=admin' || 1 group by pwd with rollup limit 1 offset 2 %23&pwd=这里group by是把前面的查询的内容按照pwd来分组。with rollup是统计信息的这里就是重点了,因为代码中$key['pwd'] == $_POST['pwd']用的是双等号是弱比较。而with rollup会在查询的结果后面加上一个为空的列,本地测试下:

    所以password为空和NULL是相等的就绕过了pwd的比较。还有一点就是offset和limit的用法,有点多就不说了。

    (然后这篇文章发出去两天后,大佬告诉我,这里没有过滤like是可以直接盲注出结果的~~http://www.shiyanbar.com/ctf/writeup/1197这是大佬写的盲注的方法)

  • 相关阅读:
    启动 Eclipse 弹出“Failed to load the JNI shared library jvm.dll”错误的解决方法!
    Eclipse 出现Some sites could not be found. See the error log for more detail.错误 解决方法
    Android sdk manager不能更新下载缓慢的解决方法
    Android图像处理之Bitmap类
    FAQ_1_陌生的VERSION.SDK_INT
    Android5.0新特性——新增的Widget(Widget)
    Android5.0新特性——兼容性(support)
    springmvc通过ajax异步请求返回json格式数据
    redhat7学习笔记之从零到部署javaweb项目
    ssm框架实现图片上传显示并保存地址到数据库
  • 原文地址:https://www.cnblogs.com/wangshuwin/p/6618094.html
Copyright © 2020-2023  润新知