游客发表
上周三下午,网站一个做外贸的被劫朋友突然打电话过来,声音都变了。网站他说Google搜自己公司名,被劫出来的网站第一条结果点进去,跳转到了一个博彩网站。被劫他以为是网站浏览器缓存问题,换了手机、被劫换了网络,网站结果一样。被劫网站被劫持了。网站
这种事比服务器宕机还让人头疼。被劫宕机至少你知道它死了,网站劫持是被劫你以为它还活着,实际上它已经变成了别人的网站傀儡。用户搜到你,点进来,看到的却是赌场广告。客户不会给你第二次机会。
我帮他查了一圈,问题出在DNS解析上。他的域名DNS管理后台密码太简单,被人撞库进去了,攻击者把A记录指向了一个境外IP。整个过程没有任何技术漏洞利用,纯粹是密码太弱。你说气不气人。
但DNS劫持只是其中一种。更常见的是网站源码被植入恶意跳转代码。通常发生在WordPress站点上,插件没更新,留了后门。攻击者上传一个一句话木马,然后在header.php或者index.php里塞几行JavaScript。用户访问时,JS判断来源——如果是从搜索引擎来的,就跳转;直接输入网址的,正常显示。这种精准投放特别恶心,站长自己访问一切正常,根本发现不了。
还有一种更隐蔽的:服务器层面被劫持。攻击者拿到SSH权限后,修改Nginx配置,对特定User-Agent返回302跳转。你用电脑看没问题,用手机看就跳走了。排查的时候得逐行对比配置文件,眼神不好都找不出来。
我那个朋友后来查日志,发现攻击者其实三天前就进来了。先是在/tmp目录下留了个脚本,每隔几分钟检测一次是否被清理,被清理就重新植入。跟蟑螂一样,踩死一只还有一窝。最后是直接重装了系统,所有密码换了一遍,才彻底干净。
说几个实用的排查方向。先看DNS记录,用dig或者在线工具查一下A记录和NS记录有没有被改。然后看网站根目录下最近修改的文件,按时间排序,find . -mtime -7 -type f,一周内动过的文件都值得怀疑。再检查.htaccess和Nginx的rewrite规则,很多跳转就藏在那里。数据库也别放过,wp_options表里的siteurl和home字段经常被改。
预防比补救重要得多。DNS后台开两步验证,别嫌麻烦。WordPress自动更新打开,插件不用了的就删掉,别留着占位。服务器SSH禁止密码登录,只用密钥。定期备份,但备份文件别放在同一台服务器上——见过太多人备份和网站一起被删的。
还有个细节:很多站长发现被劫持后,第一反应是改密码。改密码有用,但如果后门没清掉,改一百遍也没用。攻击者留的Webshell可能藏在wp-content/uploads目录下,伪装成图片文件,实际上是个PHP脚本。得用专业的查杀工具扫一遍,或者干脆手动比对核心文件的哈希值。
我朋友那次折腾了整整两天。他说最崩溃的不是技术问题,是那种被入侵的感觉——自己的东西被别人翻了个底朝天,你还不知道对方到底拿了多少东西。网站这东西,平时觉得就是个展示窗口,出了事才发现它连着客户信任、连着订单、连着你半夜能不能睡着觉。
现在他每天睡前用手机看一眼网站源码里有没有多出奇怪的script标签。有点神经质,但他说总比再来一次强。
友情链接