概述
SQL注入攻击是目前web应用网络攻击中最常见的手段之一,曾被冠以 “漏洞之王” 的称号,其安全风险高于缓冲区溢出漏洞等所有其他漏洞,而市场上的防火墙又不能对SQL注入漏洞进行有效的检测和防范。
特点
- SQL注入攻击普遍存在范围广、实现容易、破坏性大等特点。
具备知识点:
结构化查询语言(Structured Query Language)简称 SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾后,添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
准备材料
Kali linux、php语言环境 、vscode
准备环境

一、简单的sql复现
测试PHP环境,是否可以使用,不会搭建PHP环境的网上自行搜索

看到下面这个画面说明PHP环境没问题

二、数据库环境
随便建立一个表,还不会数据库的可以参考我以前的文章

例如我自己随便建立的表
测试一下数据库是否连接成功
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 
 | $host = 'localhost'; $username = 'root';
 $password = 'password';
 $database = 'mydb';
 
 try {
 
 $dsn = "mysql:host=$host;dbname=$database";
 $conn = new PDO($dsn, $username, $password);
 
 
 $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 
 
 
 
 $conn = null;
 
 } catch(PDOException $e) {
 
 echo "连接失败: " . $e->getMessage();
 }
 
 | 
简单的sql注入源代码分析
直接上代码:
    
    
    什么SQL注入
    
| 12
 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
 
 | if ($conn->connect_error) {die("连接失败: " . $conn->connect_error);
 }
 $id = $_GET['id'];
 if (isset($id)) {
 $sql = "SELECT id, name, address FROM username WHERE id = $id";
 $result = $conn->query($sql);
 if ($result->num_rows > 0) {
 
 while ($row = $result->fetch_assoc()) {
 echo "ID: " . $row["id"] . "<br>";
 echo "姓名: " . $row["name"] . "<br>";
 echo "地址: " . $row["address"] . "<br>";
 }
 } else {
 echo "not found";
 }
 $conn->close();
 };
 
 ?>
 
 
 
 
 
 
 | 
发现该网站有报错
| 测试字符 | 变种 | 返回 | 
| ‘ | N/ A | 触发数据库返回错误 | 
| ‘ OR ‘1’ = ‘1 | ‘) OR (‘1’ = ‘1 | 真,返回所有行 | 
| value’ OR ‘1’ = ‘2 | value’) OR (‘1’ = ‘2 | 空,不影响返回结果 | 
| value’ OR ‘1’ = ‘2 | ‘) AND (‘1’ = ‘2 | 假,返回空。 | 
| ‘ OR ‘ab’ = ‘a’’b | ‘) OR (‘ab’ = ‘a’’b | 字符串连接,结果同永真 | 
总结
简单阐述sql注入的源码与分析,具体操作后续会继续更新!!