记录mysql数据库被攻击

事件

由于本人比较懒,几个月以前在云服务器上部署了mysql,建了一个demo就没管了。今天突然发现数据库连不上了…貌似我没改过密码… WTF…
跳过权限验证后发现,发现数据库表不见了,只有一个readme表,打开一看豁然开朗…原来被攻击了。表里描述如下:

以下数据库已被删除:demo。 我们有完整的备份。 要恢复它,您必须向我们的比特币地址bc1qqh56c8wayvmkrszgqduzx50dyq5ypqy8fguw38支付0.008比特币(BTC)。 如果您需要证明,请通过以下电子邮件与我们联系。 fang47@tutanota.com 。 任何与付款无关的邮件都将被忽略!

于是心里默念,辛亏只是个demo。顺便给大家提个醒,记得改密码!记得改密码!记得改密码!

处理过程

  1. 停止服务

sudo /etc/init.d/mysqld stop

service mysql stop

  1. 跳过权限验证

mysqld_safe --user=mysql --skip-grant-tables --skip-networking &

  1. 启动服务

sudo /etc/init.d/mysqld start

service mysql start

  1. 使用root用户登录 MySQL

mysql -u root mysql

  1. 更改密码(可能出现异常1-2):

5.7以下版本使用:.
mysql> UPDATE user SET Password=PASSWORD(‘你的新密码’) where USER=‘root’;
5.7及以上版本使用:
mysql>update user set authentication_string=PASSWORD(‘你的新密码’) where user=‘root’;

  1. 刷新权限

mysql> FLUSH PRIVILEGES;

  1. 退出mysql登陆:

mysql> quit

  1. 重启mysql服务:

sudo /etc/init.d/mysqld restart

service mysql restart

  1. 使用新密码登录

异常情况

异常1

更新密码时发现报错Unknown column ‘password’ ,这个是由于mysql5.7密码字段改为了authentication_string

mysql> update user set password=PASSWORD('你的新密码') where user='root';
ERROR 1054 (42S22): Unknown column 'password' in 'field list'

异常2

明明改了字段,表面上成功了,仔细一看Rows matched:0 Changed: 0

Query OK, 0 rows affected, 1 warning (0.00 sec)
Rows matched: 0  Changed: 0  Warnings: 1

于是发现数据库没有root用户,太狠了,连root都给我删了,解决方案是创建root用户,这里就不过多啰嗦。本人取巧直接用本地其他数据库root用户脚本。

INSERT INTO `mysql`.`user` (`Host`, `User`, `Select_priv`, `Insert_priv`, `Update_priv`, `Delete_priv`, `Create_priv`, `Drop_priv`, `Reload_priv`, `Shutdown_priv`, `Process_priv`, `File_priv`, `Grant_priv`, `References_priv`, `Index_priv`, `Alter_priv`, `Show_db_priv`, `Super_priv`, `Create_tmp_table_priv`, `Lock_tables_priv`, `Execute_priv`, `Repl_slave_priv`, `Repl_client_priv`, `Create_view_priv`, `Show_view_priv`, `Create_routine_priv`, `Alter_routine_priv`, `Create_user_priv`, `Event_priv`, `Trigger_priv`, `Create_tablespace_priv`, `ssl_type`, `ssl_cipher`, `x509_issuer`, `x509_subject`, `max_questions`, `max_updates`, `max_connections`, `max_user_connections`, `plugin`, `authentication_string`, `password_expired`, `password_last_changed`, `password_lifetime`, `account_locked`) VALUES ('localhost', 'root', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', '', '', '', '', 0, 0, 0, 0, 'mysql_native_password', PASSWORD('你的密码'), 'N', now(), NULL, 'N');
Query OK, 1 row affected (0.00 sec)

未防止大家也取巧用我上面的脚本导致密码非你自己的,下面再执行下修改密码,可以看到修改成功

mysql> update user set authentication_string=PASSWORD('你的新密码') where user='root';
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 1

如何避免

1 root 账号记得修改密码
2 增加远程访问控制(自行百度吧)

参考资料

mysql报错“#1045 – Access denied for user ‘root’@’localhost’ (using password: NO)”解决办法
mysql5.7 修改密码update password提示找不到password字段
Mysql误删了root用户怎么办

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值