概述
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 { $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(); };
?>

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