• 网络信息安全实训【SQL注入】


    前言

    🥇个人主页:@MIKE笔记
    🥈来自专栏:网络信息安全

    一、学习目标:

    🛢️SQL注入测试
    ⭕实例代码,仅供测试⭕


    二、环境准备

    【1】搭建数据库基本环境

    提示:这里可以添加要学的内容

    create database myDB;	//创建数据库
    use myDB;		//进入数据库
    CREATE TABLE sqljection (
          id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
          username VARCHAR(64) UNIQUE NOT NULL,
          password VARCHAR(64) NOT NULL,
          email VARCHAR(64) NOT NULL)
          ENGINE=MyISAM AUTO_INCREMENT=917432  DEFAULT CHARSET=latin1;		# 创建表
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    三、创建注册用户页面

    【1】先进入网页的根目录

    cd /var/www/html/
    
    • 1

    【2】创建网页文件

    vim zuche.php
    
    • 1
    <html>
    <title>This is a SQLjection!</title>
    <body>
    <form action="" method="post">
        Username:<input type="text" name="username"/>
        Password:<input type="text" name="pswd"/>
        Email:<input type="text" name="email"/>
        <input type="submit" value="插入数据"/>
    </form>
    <?php
      $hostname="localhost";
      $username="root";
      $password="123456";
      $database="myDB";
     $conn=new mysqli($hostname,$username,$password,$database);
     $str1=ltrim($_POST['username']);
     $str2=md5(ltrim($_POST['pswd']));
     $str3=ltrim($_POST['email']);
     $sql="INSERT INTO sqljection(username,password,email) VALUES('$str1','$str2','$str3')";
     if(($str1<>NULL)&&($str2<>NULL))
       {
        $conn->query($sql);
       }
    $conn->close();
    ?>
    </body>
    </html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    打开效果:
    在这里插入图片描述

    四、创建登录页面

    vim login.html
    
    • 1
    <html>
    <title>This is a login about sqljection</title>
    <body>
      <form action="checklogin.php" method="post">
      <fieldset >
        <legend>Sql注入演示</legend>
        <table>
          <tr>
            <td>用户名:</td>
            <td><input type="text" name="username"></td>
          </tr>
         <tr>
            <td>&nbsp;&nbsp;码:</td>
            <td><input type="text" name="password"></td>
          </tr>
          <tr>
            <td><input type="submit" value="提交"></td>
            <td><input type="reset" value="重置"></td>
          </tr>
        </table>
      </fieldset>
    </form>
    </body>
    </html>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    vim checklogin.php
    
    • 1
    <html>
    <head>
    <title>登录验证</title>
    <meta http-equiv="content-type"content="text/html;charset=utf-8">
    </head>
    <body>
    <?php
       $servername = "localhost";
       $username ="root";
       $password ="123456";
       $dbname = "myDB";
    // 创建连接
       $conn = new mysqli($servername, $username, $password, $dbname);
       $name=$_POST["username"];
       $pwd=md5($_POST["password"]);
       $sql="select * from sqljection where username='$name' and password='$pwd'";
       $result = $conn->query($sql);
       if ($result->num_rows > 0) {
        // 输出数据
        while($row = $result->fetch_assoc()) {
          echo "<h2>";
           echo "id: " . $row["id"]. ", <br> username is: " . $row["username"]. ",  <br> password is: " . $row["password"].",  <br> email is: " . $row["email"]. "<br>";
        }
    } else {
        echo "<h2>您的用户名或密码输入有误,<a href=\"login.html\">请重新登录!</a>";
    }
    $conn->close();
     ?>
    </body>
    </html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    打开效果:
    在这里插入图片描述

    五、手动插入实验数据

    【1】插入数据前数据库验证
    在这里插入图片描述

    【2】开始创建两个可用于实验的数据
    在这里插入图片描述
    【3】再次查看数据库

    在这里插入图片描述

    【4】尝试正常登录检查

    在这里插入图片描述
    【5】使用正常的账号密码进行登录测试

    在这里插入图片描述

    六、开始注入

    打开登录页面开始注入非法字符

    案例1

    实现原理:直接恶意注释原代码里面的数据库查询语句中的查询密码这一项,导致密码验证直接失效实现无密码登录

    [用户名]'#
    
    
    • 1
    • 2

    在这里插入图片描述

    在这里插入图片描述

    这样就直接不需要密码就可以直接能够成功登录了。

    案例2

    实现原理:直接恶意更改数据库验证策略,导致后面代码块验证直接失效实现无密码验证登录

    [用户名]'or1='1
    
    • 1

    在这里插入图片描述

    这样就直接不需要密码就可以直接能够成功登录了。

    案例3

    实现原理:直接恶意更改数据库查询策略,导致后面代码块验证直接失效实现无密码验证登录

    [用户名]'or'1
    
    • 1

    在这里插入图片描述

    在这里插入图片描述

    这样不但不需要密码就可以直接能够成功登录了而且还能查询到数据库中的所有数据。

    案例4

    实现原理:直接恶意更改数据库查询策略,以及注释查询代码,直接显示数据库

    'or 1=1#
    
    • 1

    在这里插入图片描述

    在这里插入图片描述

    这样不但不需要密码还可以不用正确的用户名就可以直接能够成功登录了而且还能查询到数据库中的所有数据。

    📣特别声明

    如果大家以后阅读的时候发现有问题,那就麻烦到下方评论区来进行错误指出,使错误尽快做出改正,

    在此,感谢大家的阅读与支持!🤝💦🎉

    🛢️SQL注入测试
    ⭕实例代码,仅供测试⭕


  • 相关阅读:
    飞书机器人相关文档
    git使用,一点点
    QML-编辑框的使用
    插入排序(超详细)
    【毕业设计源码】PHP高校兼职跑腿系统
    golang中移除切片索引位置的元素
    4、数据完整性
    DeepStream系列之最大化性能配置
    Windows上Qt源码调试(使用VS2017调试qt5.12.0)
    数字全息干涉偏振相移实验经验总结
  • 原文地址:https://blog.csdn.net/m0_51607907/article/details/125325455