遇到这种情况,先查看有没有备份,服务器有没有快照,数据库有没有主从,有没有开启binlog日志;只有一个条件达到就能及时停损
处理完病毒后,修改默认端口,如22登录端口,mysql3306端口和redis端口等。
以后我要听从党的指示,密码改成比身份证还长。现在的数据库密码我自己都不知道。而且我不搞远程连接。
关闭公网的端口就可以解决,使用我们的大局域网解决。
具体情况
我以前是一笑而过,而现在被入侵了——!!! 原本以为我腾讯的云服务器不太行,等了10几秒还没有刷出我的页面。没想到第二天访问我的网站后台;显示无法登陆???
情况一: mysql数据库被攻击删库_[已解决] 服务器被攻击,数据库被全部删除了
左边的数据库被攻击了 一些数据库全部没了。
留下一句话。。。。。。。。。我被黑了?!~我存备份了吗?没有。我当时裂开 - -!!!
All your data is a backed up. You must pay 0.1 BTC to 1PD1Wmx6sCvdsB2H4RkBhApNCq8pRPgWFT 48 hours for recover it. After 48 hours expiration we will leaked and exposed all your data. After 48 hours the database dump will be dropped from our server!
You can buy bitcoin here, does not take much time to buy https://localbitcoins.com After paying write to us in the mail with your DB IP: allmydataback@mailnesia.com and you will receive a link to download your database dump.
不但清空了我的数据,还在服务器后台是有一个木马文件 先把它隔离。就是定时使用curl或wget下载一段脚本并执行。细思极恐,如果这两条命令执行成功,我的主机就很可能被用作进行分布式拒绝服务(DDOS)的工具,甚至被用作挖矿,不,已经被用来挖矿了,这两个月总是CPU100%。
情况二 : 木马文件
我先隔离腾讯云发现的病毒文件
再通过 top命令找到进程名, 在tmp目录下发现并rm -rf删掉文件(原图未保存,这是我随便截取的关于top命令的截图,假设java是病毒文件的进程)
top
%CPU当时的cpu是99%,command就是进程名 假设java就是那个进程名
//找到进程名是java
//显示的字段有:USER , PID , %CPU , %MEM , VSZ , RSS , TTY , STAT , START , TIME , COMMAND
ps aux | grep java
tomcat7 39462 4.6 2.1 14237320 1435756 ? Sl 13:34 1:33 command。。。。
kill -9 39462 # 杀死进程 39462在第二列PID
查一下上面病毒文件位置,删掉它 (ps aux | grep java查找出来的最后一个字段command有文件路径)
find / -name 病毒名 在看看有没有发现
我当时可能没删干净,所以CPU占用率依旧是100%
情况三:
没有发现DOS的痕迹; DOS(deny offer service)就是通过不断访问服务器,使得服务器不堪重负,最终不能正常提供服务或者拒绝提供服务。
查看数据库日志发现证据,这是我数据库被入侵时的执行过程 然而日志不会留下入侵者的线索;如果是oracle数据库可以用logminer知道
一、然后我发工单给腾讯云
这是腾讯云工程师给我检查的结果,嗯,给了他用户与密码让他登录我的服务器; 他没有帮我把数据追回,只是提供解决方法
当前从勒索信息来看,您的数据库受到攻击者入侵后,进行了拖库,被拖库的数据已被入侵者删除并异地转移。基础库无法恢复
当前扫描检测您mysql数据库密码为弱密码同时您3306端口对公网开放,初步判断是弱密码被暴力入侵
建议的修补措施:
1.如您做了mysql数据库备份,您可以导入数据库备份
2.如您mysql开启了binlog日志,建议您通过binlog日志找到删库断点后,使用binlog日志进行恢复
当前查看您开启了binlog日志,建议您可以重新建立原有的空表和库后,利用biblog日志恢复部分数据,参考命令:
/www/server/mysql/bin/mysqlbinlog ./mysql-bin.000007 | mysql -uroot -proot
/www/server/mysql/bin/mysqlbinlog ./mysql-bin.000008 --stop-position 6487402| mysql -uroot -proot
后续建议:
1)定期 备份/快照
关键数据定期备份、快照,这是防范勒索类恶意软件的最佳方式。
2) 服务器设置大写、小写、特殊字符、数字组成的 12-16 位的复杂密码 ,推荐使用密码生成器,自动生成复杂密码,链接参考: https://suijimimashengcheng.51240.com/
3) 删除服务器上设置的不需要的用户
4) 对于不需要登录的用户,请将用户的权限设置为禁止登录
5) 修改远程登录服务的默认端口号以及禁止超级管理员用户登陆
Windows 远程端口修改参考文档: https://cloud.tencent.com/developer/article/1052163
Linux 远程端口修改参考文档: https://cloud.tencent.com/developer/article/1124500
6) 安全的方法:只使用密钥登录禁止密码登陆 (针对 Linux 系统)
7) 云主机有安全组功能,里面您只需要放行业务协议和端口,不建议放行所有协议所有端口,参考文档: https://cloud.tencent.com/document/product/215/20398
8) 不建议向公网开放核心应用服务端口访问,例如 mysql、 redis 等,您可修改为本地访问或禁止外网访问 。针对 redis 漏洞可以参考 https://www.freebuf.com/column/170710.html
9) 不建议向公网开放运维工具的访问,例如宝塔面板、 phpmyadmin 等。针对 phpmyadmin漏洞可以参考 https://www.cnblogs.com/M0rta1s/p/11517423.html
10) 如果您的本地外网 IP 固定,建议使用安全组或者系统防火墙禁止除了本地外网 IP 之外所有 IP 的登录请求
需注意:
A. 做好云服务器系统的安全防护可以有效加强云服务器系统安全, 但也无法保证绝对安全。
B. 建议定期做好云服务器系统的安全巡检及数据备份,以防突发情况导致数据丢失、或业务不可用。
C. 收到主机安全的告警通知,务必第一时间登录云平台进行处置
好了,需要找回数据 简单https://www.cnblogs.com/junyi-bk/p/12059750.html
二、只需把数据库日志转化成sql
因为系统可能潜在其它木马文件没找到,我决定重装系统
发现我重装系统后,发现原系统的一些文件没有完全拷贝到本地,于是我保留当前快照后,重装了之前的刚被入侵时的镜像;
但是系统无法登陆了。采用VPN登陆进去后,什么命令都提示common not find
干净了
没办法再次联系客服
挂载硬盘
从腾讯云买了一个按时交费的硬盘,一小时0.1元
拷贝被黑的系统的数据到新的硬盘;然后挂载硬盘 下载数据
fdisk -l 查看硬盘的详细信息 110G 的是我刚刚购买的
腾讯云工程师2021-05-21 17:44:21
尊敬的客户,您好:
如电话沟通,系统盘拷贝功能使用拷贝系统盘功能操作步骤:可参考文档:
https://cloud.tencent.com/developer/article/1387468 。
我们无法保证业务数据是否有问题,建议可以使用电脑管家等软件病毒查杀,webshell查杀推荐使用D盾:http://www.d99net.net/ 。
备份数据后可重装系统,在进行安全加固。
安全建议:
(1)做好rdp、ssh、MySQL、Redis、Jenkins等应用的密码管理,使用强密码、拒绝弱密码、默认密码;
(2)做好端口管理,只开放业务需要的端口,对rdp、ssh、MySQL、Redis、Jenkins等危险端口做好安全限制;
(3)建议使用主机安全专业版或其他工具定期检测漏洞,及时修复漏洞;
(4)定期快照,避免数据丢失。
详细的安全加固建议可参考:
这个我没开 ,后悔了(宝塔面板 文件--右上角回收站)
数据库恢复后备份一下 关闭数据库不要开启远程公网3306
update user set host = "localhost" where user = "root" and host = "%";
虽然我有镜像,但是这两个月的努力白费啊 这里点击创建实例即可
把私密的弄到印象笔记 原来服务器被劫持挖矿去了(挖矿木马) 里面内容就几行代码 wget 下载文件 然后授权755 ./执行
https://blog.csdn.net/zengxuewen2045/article/details/51454290
基于pos值 mysqlbinlog --start-position=180 --stop-position=496 mysql-bin.000027 | mysql -uroot -p
指定执行哪个范围内的操作 从180开始 到 496结束
没法将我打倒的,会让我更强大
/www/server/mysql/bin/mysqlbinlog --start-position=334 --stop-position 6487402 --database=halodb /AAAyingpan/www/server/data/mysql-bin.000008 | mysql -uroot -p88871328799bd7f3
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'mysqlbinlog --start-position=334 --stop-position 6487402 --database=halod' at line 1
原来数据库被删除了, 日志文件只记录insert 和 update的内容,执行时发现没有数据库; 我决定翻翻halo博客网站的官网。。。没有。。。好吧,我只能拿起两个月前的快照
但是用了快照后备份2个月前的数据库,装回原来的系统却发现我当前系统已经没办法登录了;我怀疑是腾讯云做了安全措施,客服说没有。
没办法 不能直接使用命令恢复
/www/server/mysql/bin/mysqlbinlog ./mysql-bin.000007 | mysql -uroot -proot
/www/server/mysql/bin/mysqlbinlog ./mysql-bin.000008 --stop-position 6487402| mysql -uroot -proot
用 mysqlbinlog 把sql文件转化出来后, 用python筛选拼接去除语法错误 然后再执行
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\C utf8mb4 */' at line 1
没办法,其实可以登录mysql直接运行binglog命令,但是数据库被删了,我又没有服务器和本地都没有备份
'''
数据库被误删后 恢复数据过程中, 通过binlog把二进制日志转化成sql后, 这里的sql不能直接运行(会报一连串语法错误)
做法: 1、 去除注释和莫名其妙的注释和语句 仅仅保留一些sql
2、 为每行添加分号结尾
我在运行的时候还是会遇到问题 比如你要更新一个内容,但是表中那条数据被我删了
解决: 正确更新方法 ,先提取所有insert 先运行 然后再执行update
W 只写模式 重新创建文件
会把文件的内容删掉
## 省略掉 f.close()方法 加一个with
'''
import shutil, sys, os
darray = [
"#",
"/*!",
"DELIMITER",
"ROLLBACK",
"BINLOG",
"SET",
"/* LOCK */"
]
keepContent = [
"insert",
"INSERT",
"update",
"UPDATE"
]
def isKeep(line):
for item in keepContent:
if item in line:
return True
return False
# 临时用于获取insert的语句 先执行insert
linshi = [
"insert into",
]
# "update posts set",
def isInArray(array, line):
for item in array:
if item in line:
return True
return False
# linshi
def isInArraylinshi(line):
for item in linshi:
if item in line:
return True
return False
if __name__ == '__main__':
with open("mysql009.sql",mode="r",encoding="utf-8") as f:
with open("fresult.txt", 'w',encoding="utf-8") as g:
for line in f.readlines():
if isKeep(line): #if not isInArray(darray,line):# linshi 待会可删
if not isInArray(darray,line):
g.write(line)
最后,我顺利解救这个简单的网站
如果服务器存在木马文件的话,尽量重装系统
最后的最后
我还是不甘心,,,,,,,, 找到这个陌生的IP IP address '34.77.163.42' has been resolved to the host
求助大神, 怎么追踪 ,它是否是网上采集免费的代理IP
教训
这是一个机会,但是我第一次遇到它,直接屈服——重装系统。
因为我删除了挖矿程序,也修改了登录密码,但是CPU还是100%。
希望在遇到这个挖矿病毒,我能直接定位到挖矿文件删除它,然后定时任务(一个文件 作用是直接下载挖矿程序,然后./运行它,我当时没注意)
cat /etc/crontab //查看定时任务
crontab –l
cat /etc/rc.loacl //查看开机任务
cat /root/.ssh/authorized_keys //查看免密登陆
下次再次发生,我也要想大佬那样心平气和记录
我相信这不是结束