概述

SQL注入攻击是目前web应用网络攻击中最常见的手段之一,曾被冠以 “漏洞之王” 的称号,其安全风险高于缓冲区溢出漏洞等所有其他漏洞,而市场上的防火墙又不能对SQL注入漏洞进行有效的检测和防范。

特点

  • SQL注入攻击普遍存在范围广实现容易破坏性大等特点。

具备知识点:

结构化查询语言(Structured Query Language)简称 SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾后,添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。

准备材料

Kali linux、php语言环境 、vscode

准备环境

一、简单的sql复现

测试PHP环境,是否可以使用,不会搭建PHP环境的网上自行搜索

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

二、数据库环境

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

例如我自己随便建立的表

测试一下数据库是否连接成功

1
2
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 {
// 创建PDO对象
$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注入
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
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();
};

?>



![](https://carrot-1315227806.cos.ap-guangzhou.myqcloud.com/sqlzhur%E6%96%87%E7%AB%A0/4.png?sign=q-sign-algorithm%3Dsha1%26q-ak%3DAKIDWkp168G3bfq2GFAr--Bwgdhh5HgmmwE0YeeKGY5CO_k62z0IbS_pfhet-X3TkSx2%26q-sign-time%3D1704278541%3B1704282201%26q-key-time%3D1704278541%3B1704282201%26q-header-list%3Dhost%26q-url-param-list%3D%26q-signature%3D9104101dba0ff822fa1aa9f97dc0bdb8e2de2868&x-cos-security-token=arLH4KEWp1Av5HfrzjvWfz0z6lofNcOae05fe3532eabd7deed28ab237b2b62b7da6wejIXpcx3eNQuFxFY1wwMfDb4hqh_VaQu7UNs0wnecEQMlYJ8X_YBo_n73lYM7zMgzr7vR8K8PRYkqVAeFARg94UqpCmVkdXCSK7IPPAsvLQt25AUCbAfISuE0lcmFyAB5myVM8dpwGwJ9IW0PXb20Yo0TyEb6OKyzbJMqt92ZQT-cXEwRm70qqe3g5R-LCFmTmrATIQCMSqcbyclKA)



测试成功!

判断是否存在SQL注入

1
2
3
4
http://test.com/index.php?id=2'

![](https://carrot-1315227806.cos.ap-guangzhou.myqcloud.com/sqlzhur%E6%96%87%E7%AB%A0/1694845936559.png?sign=q-sign-algorithm%3Dsha1%26q-ak%3DAKIDWkp168G3bfq2GFAr--Bwgdhh5HgmmwE0YeeKGY5CO_k62z0IbS_pfhet-X3TkSx2%26q-sign-time%3D1704278541%3B1704282201%26q-key-time%3D1704278541%3B1704282201%26q-header-list%3Dhost%26q-url-param-list%3D%26q-signature%3D328e44df409d3d873603668633c635a25e6c2704&x-cos-security-token=arLH4KEWp1Av5HfrzjvWfz0z6lofNcOae05fe3532eabd7deed28ab237b2b62b7da6wejIXpcx3eNQuFxFY1wwMfDb4hqh_VaQu7UNs0wnecEQMlYJ8X_YBo_n73lYM7zMgzr7vR8K8PRYkqVAeFARg94UqpCmVkdXCSK7IPPAsvLQt25AUCbAfISuE0lcmFyAB5myVM8dpwGwJ9IW0PXb20Yo0TyEb6OKyzbJMqt92ZQT-cXEwRm70qqe3g5R-LCFmTmrATIQCMSqcbyclKA)

发现该网站有报错

测试字符 变种 返回
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注入的源码与分析,具体操作后续会继续更新!!