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

本文详细介绍了SQL注入攻击的学习目标、环境准备、用户注册和登录页面的创建,以及如何手动插入实验数据。通过四个具体的注入案例,展示了如何利用非法字符绕过密码验证,实现无密码登录,揭示了SQL注入的安全风险。
摘要由CSDN通过智能技术生成

前言

🥇个人主页:@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】先进入网页的根目录

cd /var/www/html/

【2】创建网页文件

vim zuche.php
<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>

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

四、创建登录页面

vim login.html
<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>

vim checklogin.php
<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】使用正常的账号密码进行登录测试

在这里插入图片描述

六、开始注入

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

案例1

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

[用户名]'#

在这里插入图片描述

在这里插入图片描述

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

案例2

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

[用户名]'or1='1

在这里插入图片描述

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

案例3

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

[用户名]'or'1

在这里插入图片描述

在这里插入图片描述

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

案例4

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

'or 1=1#

在这里插入图片描述

在这里插入图片描述

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

📣特别声明

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

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

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


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MIKE笔记(同名B站)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值