zoukankan      html  css  js  c++  java
  • 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这是大佬写的盲注的方法)

  • 相关阅读:
    MySQL ------ MySQL常用语句的语法 (三十四)
    .NET ----- 多级联动
    .NET ------ 两种传参方式
    .NET----- 对下拉框的控制
    MySQL ------ 改善性能(三十三)
    html5:新特性(新增标签、新增标签属性)
    css:布局技巧(margin负值、鼠标经过显示边框、文字围绕图片显示、三角形使用技巧、css初始化)
    css:vertical-align&文字溢出(vertical-align属性、溢出的文字显示为省略号)
    css:三角&用户界面(三角形效果、鼠标样式、输入框与文本域的优化)
    shiro:入门(概念、RBAC模型、入门程序)
  • 原文地址:https://www.cnblogs.com/wangshuwin/p/6618094.html
Copyright © 2011-2022 走看看