数据库系统表相关
知识需要温习并实践才能牢牢掌握在手中
一、初始数据库
可以看到初始的mysql有以下4个库(不同版本的mysql有所不同)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.00 sec)
数据库名 | 说明 |
information_schema | 具有61个表,保存着mysql维护的所有其他数据库的信息:如数据库名、数据库表、数据库字段、用户权限、表权限、列权限等信息。 |
mysql | 具有31个表,主要负责存储数据库的用户、权限设置、关键字等mysql自己需要使用的控制和管理信息,不可以删除。 |
performance_schema | 具有87个表,PERFORMANCE_SCHEMA这个功能默认是关闭的。需要设置参数: performance_schema 才可以启动该功能,这个参数是静态参数,只能写在my.cnf 中 不能动态修改。 |
二、各数据库中重要的表
1. information_schema
schemata 表
存储数据库的信息
SELECT * FROM SCHEMATA;
爆数据库语句:sql注入时查看有哪些数据库
select group_concat(schema_name) from information_schema.schemata;
tables 表
存储关于数据库中的表的信息
SELECT * FROM TABLES;
columns 表
存储列的信息
select * from columns where table_name='users';
这里因为只有dvwa库中存在users表,所以这里查询结果为users表的列信息
user_privileges 表
存储用户权限信息
select * from user_privileges;
2. mysql
user表
存储 用户列、权限列、安全列、资源控制列的信息
select * from mysql.user;
三、利用数据库读写文件
三种方法读写文件:
load_file
load data infile
select sql outfile
1. load_file 方法
有以下限制条件:
(1) 文件权限和大小:当前权限对该文件可读、文件大小小于max_allowed_packet。
(2) 用户权限:当前数据库用户有FILE权限
(3) 可操作路径: 查看secure_file_priv,如果值为某目录,那么就只能对该目录的文件进行操作
secure_file_priv 值 | 权限说明 |
null | 表示限制mysql不允许导入/导出 |
具体目录/路径 | 表示限制mysql的导入/导出只能发生该目录下 |
无具体值 | 表示不对mysql的导入/导出做限制 |
首先查看读写权限:
查看当前登录用户
select user();
select user, file_priv from mysql.user;
可见root用户具有文件读写权限
查看可操作路径:
show global variables like '%secure%';
secure_file_priv 值为null,表示mysql不允许导入导出。
此时我们修改配置文件
在[mysqld]修改 **secure_file_priv = \ ** 即可
create database test1;
use test1;
create table user(data text);
insert into user(data) values(load_file('C:\\Users\\user\\Desktop\\1.txt'));
select * from user;
读取成功
2. load data infile 方法
文件权限【读或写】
用户权限【file】
可操作路径【secure_file_priv】
load data infile 'C:\\Users\\user\\Desktop\\1.txt' into table user;
3. select sql outfile
select '<?php phpinfo();?>' into outfile "C:\\Users\\user\\Desktop\\2.txt";
在桌面发现2.txt 写入成功