第一步:断开连接,别动现场
凌晨三点,长垣一家起重机械厂的官网首页被篡改了,产品页全部跳转到赌博网站。老板接到客户电话才晓得出事了,第一反应是赶紧让技术把服务器关了。这做法没毛病,但要注意一点:断网可以,别格式化硬盘。
正确的操作是——立刻关闭网站对外访问(比如在Nginx里把server段注释掉,或者直接停掉Web服务),但服务器本身不要重启、不要重装。因为你需要保留入侵日志来分析黑客是怎么进来的。说白了,案发现场不能破坏。
具体步骤:登录服务器控制台,执行 systemctl stop nginx 停掉Web服务,然后 cp -r /var/log/nginx /tmp/nginx_logs_backup 把日志拷贝一份出来。整个过程不超过5分钟。
第二步:排查入侵路径
黑客进来的方式无非几种:弱口令爆破、SQL注入、文件上传漏洞、第三方组件漏洞。你需要查这几个地方:
第一看SSH登录记录, grep 'Failed password' /var/log/auth.log | wc -l ,如果某个IP尝试了几千次,那八成是暴力破解进来的。新乡高新区有家生物医药公司就吃过这个亏——root密码设的是admin123,被扫了两天就破了。
第二看Web访问日志里有没有异常的POST请求,特别是指向上传接口的。 grep 'POST' /var/log/nginx/access.log | grep 'upload' 这条命令能帮你快速定位可疑的上传行为。
第三查有没有被植入webshell。用 find /var/www -name '*.php' -newer /var/www/index.html -mtime -7 找最近一周内新建或修改过的PHP文件,基本一查一个准。
第三步:清马、修复、上线
找到恶意文件后,别急着删。先把它移到隔离目录:mkdir /tmp/quarantine && mv /var/www/uploads/shell.php /tmp/quarantine/ 。留着后面报警或溯源用。
接下来是修补漏洞。如果是SQL注入,检查代码里所有拼接SQL的地方,换成参数化查询。如果是文件上传漏洞,在服务端加白名单校验,只允许jpg/png/pdf等格式,重命名上传文件,禁止上传目录有执行权限。 chmod -R 755 /var/www/uploads && chown www-data:www-data /var/www/uploads 。
数据库如果被篡改了,从最近的备份恢复。没备份?那就只能手动比对了。这就是为什么我们反复跟新乡的企业老板说——备份这件事,出事之前你觉得没必要,出事之后你恨不得穿越回去扇自己。
全部处理完,改掉所有密码(服务器root、数据库root、CMS后台、FTP),然后重新上线。上线后持续观察48小时,确认没有异常。
预防比救火重要
处理一次网站被黑,少则半天,多则三五天。新乡经开区有家做汽车零部件的企业,官网被挂了暗链,Google收录了300多个垃圾页面,SEO排名直接掉没,花了两个月才恢复。损失远比你想象的大。
日常做好这几件事:定期更新CMS和插件版本、关闭不必要的服务端口、装WAF(Web应用防火墙)、设置强密码并定期更换、做自动化备份。别等出事才想起来,那时候代价翻十倍。