早上七点,网站客户打来电话,被挂声音发颤:“我们官网被黑了,马何百度一搜全是清理博彩广告。”
我打开浏览器,网站输入他的被挂域名——好家伙,首页标题变成了“澳门线上娱乐城”,马何满屏的清理性感荷官图片。源代码里藏着一堆加密的网站JavaScript,每隔三十秒弹出一个新窗口,被挂根本关不掉。马何这已经是清理本月第三起同类案例了。网站被挂马不是网站什么高科技犯罪,多数时候就是被挂服务器密码太弱、CMS有漏洞没打补丁,马何或者某个插件留了后门。
第一步,先别慌着删文件。你得把现场保留下来。立刻登录服务器,用命令netstat -antlp看看有没有可疑的对外连接。挂马脚本通常会主动向黑客的服务器回传数据,这个连接会一直挂着。记下对方的IP和端口,然后果断用防火墙封掉。别急着拔网线,那样反而会让攻击者警觉,他可能已经在你服务器上放了多个后门,你一断网他立刻换通道。
第二步,定位恶意文件。别傻乎乎地全盘扫描,那要扫到猴年马月。先看网站的入口文件——index.php、wp-admin目录下的文件、.htaccess,这些是最常被动手脚的地方。用grep -r "eval\|base64_decode\|shell_exec" 在网站根目录搜一遍,能快速筛出可疑代码。我见过最狡猾的挂马,把恶意代码藏进图片文件的EXIF信息里,然后通过一个看起来人畜无害的图片加载脚本去执行。这种时候,你得对比文件修改时间——黑客植入的代码通常和正常更新时间错开,凌晨两三点改动的文件,嫌疑最大。
找到恶意文件后,别直接删。先下载到本地备份,然后分析它的行为。它可能是通过某个漏洞进来的,你得顺藤摸瓜找到漏洞点。举个例子,上次一个客户的网站用的是老旧的KindEditor编辑器,上传文件功能没做类型限制,黑客直接上传了一个PHP木马。这种情况你删了木马文件没用,得把上传接口给堵上——修改上传配置,只允许jpg、png、gif格式,并且重命名文件为随机字符串,彻底切断执行路径。
清理干净后,改密码是必须的。数据库密码、FTP密码、服务器管理后台密码,全部改成20位以上的随机字符串。别忘了检查服务器上的定时任务,crontab -l看看有没有异常任务——黑客经常设置一个每分钟执行一次的脚本,专门用来在你删掉木马后重新写入。我碰到过最狠的,直接把恶意代码注入到MySQL的触发器里,每次有人访问首页就自动生成一个带毒页面。这种得进数据库一条条排查,SHOW TRIGGERS命令能帮你找到它们。
最后,给你的网站装个Web应用防火墙,比如Cloudflare或者宝塔的WAF插件。这玩意儿能挡住90%的常见注入攻击。别心疼那点钱,一次被挂马带来的客户流失和信誉损失,够你买十年防火墙的。清理完别急着上线,先用安全工具扫一遍全盘,确认没有遗漏。再找个外部朋友帮你访问一下网站,看看会不会跳转到奇怪页面。
说句实在话,挂马这事儿防不胜防。你永远不知道哪个第三方插件会出纰漏,也不知道哪个员工会把密码写在便签纸上贴在显示器旁边。但只要你养成定期备份的习惯,把更新补丁当成日常任务,就算真被黑了,也能在半小时内恢复如初。那些被挂马后手足无措的站长,多半是之前太懒。