MySQL数据库被攻击,被删库勒索,逼迫我使出洪荒之力进行恢复数据 - Java技术债务

昨天连夜赶了一篇文章,讲述了一个被黑客连续攻击服务器三次的普通“搬砖人”,一次比一次艰难,一次比一次狠。

我给大家看几张图,看看黑客的“佳作”

  1. 首先创建一个数据库:README_FHX MySQL数据库被攻击,被删库勒索,逼迫我使出洪荒之力进行恢复数据 - Java技术债务
  2. 然后创建表:README MySQL数据库被攻击,被删库勒索,逼迫我使出洪荒之力进行恢复数据 - Java技术债务
  3. 插入一条数据 MySQL数据库被攻击,被删库勒索,逼迫我使出洪荒之力进行恢复数据 - Java技术债务

内容如下:

  • 内容:以下数据库已被删除:*****。 我们有完整的备份。 要恢复它,您必须向我们的比特币地址bc1q6d96nllp6spyxruc0wmtkpk8e36949gny5qrcr支付0.0075比特币(BTC)。 如果您需要证明,请通过以下电子邮件与我们联系。 shao3@tutanota.com 。 任何与付款无关的邮件都将被忽略!
  • 比特币地址:bc1q6d96nllp6spyxruc0wmtkpk8e36949gny5qrcr
  • 邮箱地址:shao3@tutanota.com
  1. 删除我的数据库 MySQL数据库被攻击,被删库勒索,逼迫我使出洪荒之力进行恢复数据 - Java技术债务

以上操作建库,删库,库名是我们大家一般不会注意到的,可能就是因为怕受害者看不到,所以某些恶心人玩意儿,又建了一个和被删数据库同名的数据库名,创建表,插入刚才第三步的内容。

这样的话,大家再次登录数据库后会发现表不存在了,但是数据还存在,会不会觉得是否是自己误删了?或者服务器宕机导致表丢失?

但是稍微有点基础的人都知道,mysql肯定有日志,一般不会丢失。此刻去mysql服务器查看服务日志,发现是空的。因为恶心人的玩意儿把日志truncateMySQL数据库被攻击,被删库勒索,逼迫我使出洪荒之力进行恢复数据 - Java技术债务 上边是我自己觉得的一些操作,就到此为止了;其实黑客又干了一件事,为了让我们受害者一定会去服务查看日志或者数据,直接把我们连接数据库的用户给delete MySQL数据库被攻击,被删库勒索,逼迫我使出洪荒之力进行恢复数据 - Java技术债务

到此,才结束这一个受害者的破坏。继续下一个受害者。。。

我的猜测

我猜测黑客可能是破解了我的数据库用户root的密码,然后执行他们准备好的脚本,然后进行搞破坏。

总结破坏的流程:

  1. 攻击服务器暴露的端口,根据不同的端口执行不同的攻击策略
  2. 找到暴露的mysql数据库端口3306,开始进行攻击,比如常用的用户名root,然后进行破解密码,比如我之前的用户名和密码都是root(现在肯定不是了,并且所有端口我都没有暴露,你除非把腾讯云给破解了,然后删除我的云服务器。),极其好破解
  3. 通过账号密码连上服务器
  4. 创建数据库和表,插入以上内容
  5. 删除非mysql默认数据库
  6. 创建非mysql默认数据库
  7. 然后再非mysql默认数据库分别创建表和插入以上内容
  8. 防止mysql服务记录连接mysql的客户端ip等信息,删除mysql服务日志
  9. 删除破解的用户名
  10. 搞定收工。。。

以上流程只是根据自己的经历猜测出来的,并不一定真实。。。因为对黑客的植入,破解,攻击等操作我一概不清楚(虽然我也很想学习);但是我怕学会和他们(人渣)一样,通过不法途径,谋取来路不正的钱财,当上人上人,迎娶白富美,走上人生巅峰。。。咳咳,跑题了。。。

前天晚上得知我被攻击破解数据库的时候,我很生气,很难受,我辛辛苦苦两个月写的文章,全部没了,虽然我可以重新弄出来,但是我心不干,我想恢复。。。

腾讯客服让我通过快照,或者备份恢复,但是我没有用任何的腾讯云上的功能;当时我就想到我用mysql的日志恢复,但是我不是很会啊,只是知道mysql的binlog是记录每一条sql的日志;再说了,我也不清楚我有没有开启日志,当时心想,还是看看吧。。。

结果就是我看到了,看到了黎明,看到了曙光,,,我开始着手搞日志,查资料,看博客,想尽一切办法恢复数据。我现在就在想,我要不要说出来我怎么回复日志的,我怕我说出来,黑客他们知道了手段,下次再去搞破坏时,根据我说的恢复机制,补充他们的“漏洞”。

想了想,我还是说出来吧,防止有些人跟我一样,被搞破坏了,却不知道如何搞了。

恢复数据的过程虽然艰辛(对当时的我来说,真的很煎熬),但是解决还是很美好,当天晚上我就奖励了自己一个鸡腿,,,

其实不管数据库是不是被删除数据、被修改数据,或者手误操作,其实数据都可以找回来的(前提是:binlog日志要存在),只是看数据的重要性,比如企业的生产数据,一般情况是不会被攻击以及被删除的,因为企业对数据库的安全性看的很重,除了DBA一般人是没有权限修改的,只有查看的权限。

我先说我是怎么恢复数据的吧,首先先声明,我的数据库虽然被删除了,但是日志还在,没有被黑客删除;我以前也看到过新闻,一家公司数据库被攻击,删除并且备份了保密数据,要求公司按每条数据0.05美元(大概这个数吧),一共是几百万条数据,大概总价值600万美元吧,如果不汇款的话,他们还要去什么用户保密协会(我也不太清楚了),如果有兴趣的话,可以自行百度搜索相关新闻,我这里就不详细说了。

这么说的话,这个黑客是不是给我打折了,一共操0.0075个比特币,折合人民币的话,大概1700元左右(当前比特币价值:35500$),其实就算让我转0.0001个比特币(人民币:23元),我也不会去向你妥协,我会向你拖鞋,妈的fuck。关键是我不会啊,我不会往你比特币地址上转啊,我要是会的话,我就不用火币app平台充钱了,还要我手续费,还清退我,呜呜呜。。。

如果那个黑客有幸看到我这篇文章的话,你联系我,你把支付宝收款码或者微信收款码给我,我给你转。我实在不知道怎么给你转,所以我怎么赎回我的数据啊。。。。。。

恢复数据的过程

  1. 首先,我备份了一些重要的数据,比如mysql的data,redis的日志文件,文件(呜呜呜,我的文件还是没有来及备份,导致我的文章好多文件丢失。。。)

  2. 然后,我重置了我的服务器,防止黑客在攻击的过程中,植入一些见不得人的脚本,继续破坏我以及我的服务器。(极其建议服务器被攻击过的进行这一步操作)

  3. 针对恢复mysql数据库的一些操作: 一. 安装msyql 我使用yum进行安装的,配置和数据分别放置的

    #(a)数据库目录 /var/lib/mysql/ #(b)配置文件 /usr/share /mysql(mysql.server命令及配置文件) #( c )相关命令 /usr/bin(mysqladmin mysqldump等命令) #(d)启动脚本 /etc/rc.d/init.d/(启动脚本文件mysql的目录)

    二. 根据上边找到数据目录,mysql数据库的binlog会默认保存到/var/lib/mysql/这个目录,默认格式:binlog.000001

    /var/lib/mysql/

    建议做好这个文件的备份,防止数据丢失,可以根据这个文件进行找回,恢复。 注意: 重置数据库的话,当前目录是没有需要恢复的日志文件。 首先需要你从本地上传到这个目录中,比如 MySQL数据库被攻击,被删库勒索,逼迫我使出洪荒之力进行恢复数据 - Java技术债务 然后修改binlog.index,记录当前binlog的index,服务器会从这里读取对应路径下的文件 MySQL数据库被攻击,被删库勒索,逼迫我使出洪荒之力进行恢复数据 - Java技术债务 然后才能正常执行以下操作。

    三. 登录到mysql服务,然后执行命令show binlog events in 'binlog.000001'; 如果用户被删掉,不能正常登录的话,可以这样: 首先停掉mysql服务,然后执行/usr/bin/mysqld_safe --skip-grant-tables &跳过验证登录, 然后另开一个xshell窗口输入mysql,进入mysql服务,执行以上命令 这个命令是查看这个文件的执行情况MySQL数据库被攻击,被删库勒索,逼迫我使出洪荒之力进行恢复数据 - Java技术债务

    四. 执行命令,并把nov3.sql文件下载到本地查看

    /usr/bin/mysqlbinlog --no-defaults -v --base64-output=decode-rows binlog.000001 > nov3.sql

    因为binlog.000001是一个二进制文件,这个命令会把解码加密的语句,这样我们可以看到mysql执行的每一个sql,如果不加--base64-output=decode-rows这个参数,看到的结果时这样的: MySQL数据库被攻击,被删库勒索,逼迫我使出洪荒之力进行恢复数据 - Java技术债务 加上是这样的: MySQL数据库被攻击,被删库勒索,逼迫我使出洪荒之力进行恢复数据 - Java技术债务 所以才有了以上我给大家展示的内容,否则我也不知道。。。苦笑。。。 执行这条命令是为了防止文件中存在对数据有害的操作指令,比如我给大家展示黑客的操作。这样我才能避免一些不能执行的指令。

五. 添加参数执行

/usr/bin/mysqlbinlog binlog.000007 | mysql -uroot -p -v -f > /opt/1.txt

然后输入密码开始恢复数据, -f是为了跳过执行错误, -v是展开执行的详细信息 如果文件中存在不能执行的指令,可以按照时间进行执行比如: 加上时间段参数 --start-datetime='2022-01-06 14:14:37' --stop-datetime='2022-01-24 13:04:44'

/usr/bin/mysqlbinlog --no-defaults -v --base64-output=decode-rows binlog.000011 --start-datetime='2022-01-06 14:14:37' --stop-datetime='2022-01-24 13:04:44' > nov3.sql

时间可以根据nov3.sql中的时间进行截段执行,比如 MySQL数据库被攻击,被删库勒索,逼迫我使出洪荒之力进行恢复数据 - Java技术债务

到此,我的数据就恢复全部了。。。

总结

为了防止再次被攻击,可以这么做:

  • 避免不必要的暴露端口,比如:3306、6379、8080等一些常用的端口
  • 修改常用的端口:比如3306修改为3307,6379修改6380等等
  • 提高密码复杂度
  • 不要透漏任何的地址信息,马赛克现在也不安全了,防止被有心人士破解
  • 密码不使用明文密码登录等等手段

天下没有不透风的墙,再强的防火墙,安全加密,也会有被破解的一天,我们只能尽量做到有效的防止,而不能百分百的禁止。。。希望能吃一堑长一智。

最后提一句,有事没事可以多备份一下自己的重要数据,不管是手机上的还是电脑上的,防止丢失找不到,可以及时的恢复,这一处我的博客停机了两天,也不知道有人知道么。。。(再次哭笑,毕竟我也不是什么大V什么的。。。哈哈)

码文章真难啊,这6000多字,我竟然写了二个多小时,我的天啊,真心不易啊。

最后再提一句,我之前看到一个CSDN博主也被攻击过,我看到的截图是这样的 图片来源:https://blog.csdn.net/qq_40731745/article/details/116015326 MySQL数据库被攻击,被删库勒索,逼迫我使出洪荒之力进行恢复数据 - Java技术债务 我发现是一个团伙作案:

  1. 首先内容几乎一样,除了比特币地址,和邮箱地址
  2. 邮箱地址竟然全是@tutanota.com

希望大家以此警钟自己吧。。。

码文章不易,希望大家点一下赞以及反手一个关注,如果有需要帮忙恢复数据的,大家可以一起探讨一下,促使自己获取更多知识,更多安全意识

   登录后才可以发表呦...

专注分享Java技术干货,包括
但不仅限于多线程、JVM、Spring Boot
Spring Cloud、 Redis、微服务、
消息队列、Git、面试题 最新动态等。

想交个朋友吗
那就快扫下面吧


微信

Java技术债务

你还可以关注我的公众号

会分享一些干货或者好文章

Java技术债务