之前老王做过一个导航站,是基于 ThinkPHP 5.0.22 做的,运行了有大半年了,一直好好的。前几天有人给老王留言说网站上的验证码刷不出来,一开始我还以为是他自己网站的问题,今晚有时间去网站上看了下,发现原来是我的网站已经被黑了,并且注入了木马,正常访问可以打开,但是功能不可以用的,并且如果是搜索引擎的话还会跳到另一个网站。本文分享一下网站被黑被挂马的经历以及目前采取的措施。
一、网站被黑具体现象
一开始收到网友抱怨网站有问题的时候,老王第一时间就去看了那个网站,发现一切正常,并且能够登陆(我是记住 Cookies 的,所以其实没需要我登陆),于是回复他说网站正常,是不是他自己手机的问题?后来今晚又收到那位网友的留言,说手机 4g 和 Wi-Fi 都试了,无法刷出验证码。
于是老王就退出重登了一下,发现确实验证码刷新不出来,看了下网页源码,发现整个网站的关键字(keywords)和描述(description)都被改了,并且 head 标签了多了一个跳转脚本:
var s=document.referrer if(s.indexOf("baidu")>0 || s.indexOf("sogou")>0 || s.indexOf("soso")>0 ||s.indexOf("sm")>0 ||s.indexOf("uc")>0 ||s.indexOf("bing")>0 ||s.indexOf("yahoo")>0 ||s.indexOf("so")>0 ) location.href="https://***.com";
网页已经被挂马是肯定的了,并且这个木马只是对搜索引擎做了跳转,所以正常打开是完全没有问题的,这也导致我前几天没有发现这个问题。
立马远程到自己那台 VPS,发现只有 public 那个文件夹的修改日期是最近一段时间,并且里面多了一个 meijianxue.php 这个文件,这个文件里是一段 php 代码,好像加密了,我 php 也不是很了解,所以也不清楚这个文件的具体作用。
到现在,我可以确定,我的网站被黑了,但是只黑了基于 ThinkPHP 的网站,其他 CMS 架构的网站则是运行的好好的,说明我的服务器并没有被黑。
二、问题解决
网上搜了下,发现 ThinkPHP 5.0.22 之前的版本好像有个可能被 GetWebShell 的漏洞,所以初步决定解决方案:升级 ThinkPHP 版本 + 恢复网站。
1.升级 ThinkPHP 版本至 5.0.24
5.0.24 似乎是目前 TP 5.0 最新的版本,直接在网站根目录用命令就可以完成升级:
composer update topthink/framework
升级完后,到 thinkphp 下看 base.php 文件的第一行就可以看到当前 ThinkPHP 的版本:
define('THINK_VERSION', '5.0.24');
2.恢复网站
这个时候就会意识到备份数据的重要性,老王就有备份网站的习惯,具体的备份方法可以参考这篇文章:《借助rsync实现VPS之间数据的远程同步,备份VPS数据》。
此次我只是把备份数据中的 public 文件夹下的原始文件重新上传到服务器上,其他 php 文件以及被黑的 index.php 文件则全部删除,再观看几天看看还有没有问题。
以上就是老王这次遇到的网站被黑以及采取的解决措施,整个过程倒是没有超过 1 小时,所以做网站,数据真的是重中之重,大家一定要有备份的习惯,不管是手动备份还是买服务商的备份服务,不然网站被黑就哭去吧。