概述
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(); };
?>
![](https:
|
测试成功!
判断是否存在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注入的源码与分析,具体操作后续会继续更新!!