确认被黑的迹象
发现网站打开慢,首页突然跳转到赌博、色情页面,或者搜索引擎提示“此网站可能含恶意软件”,基本可以断定出事了。更隐蔽的情况是后台悄悄植入暗链,用户访问正常,但搜索引擎已经收录了一堆你不认识的关键词页面。这时候别慌,先别急着删文件,得把现场保护好,一步步排查。
隔离服务器,防止进一步扩散
第一时间把网站从公网暂时下线,或者通过防火墙规则限制访问。如果是虚拟主机,联系服务商暂停站点。这就像家里进了贼,先把门锁上,别让对方继续搬东西。同时,断开数据库对外连接,避免数据被批量拖走。
检查系统和日志文件
登录服务器,查看最近的访问日志。Apache 的日志通常在 /var/log/apache2/access.log,Nginx 在 /var/log/nginx/access.log。用 grep 筛选异常IP:
grep "POST" /var/log/nginx/access.log | grep -v "login" | head -20
重点看大量 POST 请求、非正常时间段的访问、来自非常见地区的IP。如果发现某个PHP文件被频繁调用,而你根本没这个功能,那大概率就是后门入口。
扫描可疑文件
黑客常把木马藏在上传目录或模板文件夹里。比如 WordPress 的 wp-content/uploads,或者织梦的 templets 文件夹。用 find 命令找最近修改的PHP、JS文件:
find /www/wwwroot/your-site -type f -name "*.php" -mtime -7
把结果逐个打开看,特别注意那些内容只有一行、包含 eval、base64_decode 的文件。这种基本跑不了,就是一句话木马。
比对原始文件快照
如果你之前备份过核心文件的MD5值,现在就能派上用场。没有备份也不用完全抓瞎,去官网下载同版本的程序包,用 diff 对比关键文件:
diff -r /www/wwwroot/your-site/wp-admin /tmp/wordpress/wp-admin
哪怕只是多了一行 js 引用,也可能是在偷偷收集管理员登录信息。
数据库也要查
别以为清掉文件就安全了。有些后门会写进数据库,比如 WordPress 的 wp_options 表里插入恶意脚本。登录 MySQL,查 option_value 字段有没有可疑内容:
SELECT * FROM wp_options WHERE option_value LIKE "%<script%";
还有文章内容表 wp_posts,黑客可能批量注入关键词链接。一条条翻不现实,可以用正则匹配快速筛查。
使用专业扫描工具辅助
手动查效率低,容易漏。配合开源工具提升效率。比如 maldet(Linux Malware Detect),安装后执行:
maldet -a /www/wwwroot/your-site/*
它内置病毒特征库,能识别常见Webshell。再用 rkhunter 检查系统是否被提权:
rkhunter --check
工具报的警不一定都准,但能帮你缩小排查范围。
修复后重新上线前的准备
删掉所有确认的后门文件,替换为干净版本。改密码,不光是FTP和数据库,连服务器SSH密码、后台管理员账号全得换,别图省事用同一个。开启文件监控,比如用 inotifywait 监视网站目录:
inotifywait -m -r -e create,modify /www/wwwroot/your-site
一旦有新文件生成马上告警。最后提交网站地图给百度、Google,申请重新收录,把之前被黑的内容踢出去。