说明:涉及到的操作均在MySQL中实现
一、基础概念
1、数据抽象
物理层、逻辑层、视图层
2、实例和模式
特定时刻存储在数据库中的信息的集合称作数据可的一个实例。
模式:物理模式和逻辑模式。
3、数据模型
- 关系模型
- 实体-联系模型
- 基于对象的数据模型
- 半结构化数据模型
4、数据库语言
数据操纵语言(Data-Manipulation Language,DML):比如查询语言(Query Language)
数据定义语言(Data-Definition Language,DDL):
- 域约束
- 参照完整性约束
- 断言
- 授权
5、事务管理
- Atomicity,原子性
- Consistency,一致性
- Isolation:隔离性
- Durability,持久性
6、基本类型
- char(n):固定长度的字符串,指定长度n
- varchar(n):可变长度字符串,最大长度n
- int:整数类型
- smallint:小整数类型
- numeric(p,d):定点数,p位数字,d位小数
- real,double precision:浮点数与双精度浮点数
- float(n):精度至少为n位的浮点数。
基本操作
首先连接mysql数据库
~#: mysql -u root -p
然后输入密码
1、创建/删除数据库
命令:create/drop database DBName
mysql> create database Mytest;
mysql> drop database Mytest;
2、显示当前DBMS有多少个数据库
命令:show databases
mysql> show databases;
3、使用某个指定数据库
命令:use DBName
mysql> use Mytest;
4、查看数据库中的表【在执行3之后,即指定使用的数据库后】
命令:show tables;
mysql> show tables;
5、创建表
命令:create table TableName(
,<
>);
常见完整性约束:
- primary key( ):主键
- foreign key( ) reference:外键
- not null:非空
mysql> create table department
(dept_name varchar(20),
building varchar(15),
budget numeric(12,2),
primary key(dept_name);
mysql> create table course
(course_id varchar(7),
title varchar(50),
dept_name varchar(20),
credits numeric(2,0),
primary key(course_id),
foreign key(dept_name) references department);
mysql>
6、插入
命令:insert into TableName(
) values(
)
mysql> insert into instructor(ID,name,dept_name,salary) values(10211,'Smith','Biology',66000);
7、删除
主要涉及两种操作:删除一条数据或清空表,保留关系(delete),删除表(delete)。
命令:delete from TableName
delete from TableName where condition
drop table TableName
8、属性的增、删
命令:alter table TableName add
alter table TableName drop
9、数据的更新
命令:update TableName set
where condition
10、简单的查询
命令:select * from TableName where condition
说明:
- select子句用于列出查询结果中所需要的属性
- from子句是一个查询求值中需要访问的关系表
- where子句是一个作用在from子句中关系属性上的谓词
11、字符串运算
- 百分号(%):匹配任意字符串
- 下划线(_):匹配任意一个字符
SQL中用运算符like来表达模式
12、聚集函数
聚集函数是以值的一个集合(集或多重集)为输入,返回单个值的函数。SQL提供了五个固有的聚集函数:
- 平均值:avg。
- 最小值:min。
- 最大值:max。
- 总和:sum。
- 计数:count。
可以使用group by来进行分组聚集,在分组后还可以增加having子句进一步限定条件。
三、MySQL备忘单
1、枚举数据库配置和模式
数据 | 查询 |
---|---|
版本 | SELECT @@version; |
当前用户 | SELECT user(); SELECT system_user(); |
列出用户权限 | SELECT grantee,privilege_type,is_grantable FROM information_shcema.user_privilege; |
数据 | 查询 |
---|---|
当前数据库 | SELECT database(); |
列出数据库 | SELECT schema_name FROM information_schema.schemata; |
列出表 | 列出当前数据库中的表: SELECT table_name FROM information_schema.tables WHERE table_schema=database(); 列出所有用户自定义数据库中的所有表: SELECT table_schema, table_name FROM information_schema.tables WHERE table_schema !=‘information_schema’ AND table_name!=‘mysql’; |
列出列 | 列出当前数据库中department表的列名: SELECT column_name FROM information_schema.columns WHERE table_name=‘department’; 列出所有用户自定义数据库中的所有列: SELECT table_schema, table_name, column_name FROM information_schema.columns WHERE table_schema != ‘information_schema’ AND table_name!=‘mysql’; |
2、盲注函数
数据 | 查询 |
---|---|
字符串长度 | LENGTH() |
从给定字符串中提取字符串 | SELECT SUBSTR(string,offset,length); |
字符串(‘ABC’)不带单引号的表示方式 | SELECT char(65,66,67); |
触发时间延迟 | BENCHMARK(count,expr);# 执行表达式expr count次 SLEEP(n);#触发一个n秒的延迟 |
IF语句 | SELECT if(condition,expr1,expr2);# 条件为真返回expr1,否则返回expr2,常结合SLEEP函数 |
有SUBSTR实现的布尔盲注可参考实例
https://blog.csdn.net/Secur17y/article/details/102497529
3、攻击数据库服务器
1)执行系统命令
SELECT 'system_commands' INTO dumpfile trojanPath;
2)破解数据库口令
SELECT concat(user,":",password) FROM mysql.user;
3、读取文件
SELECT LOAD_DILE('etc/passwd');
4、写入文件
SELECT * FROM TableName INTO dumpfile '/tmp/hacker';
Reference
Mysql注入中的outfile、dumpfile、load_file函数详解
区别:DUMPFILE适用于二进制文件,它会将目标文件写入同一行;而OUTFILE则更适用于文本文件。