哎呀,网站又被黑了

早上莫名收到运营的一封邮件,反映网站又被黑了。

唉,只好乖乖按照邮件里附的百度快照链接开始排查这次遇到的是什么玩意儿。

从百度快照的原链接点过来,发现的确有大量违禁信息。但是换一台电脑从百度快照访问原链接,竟然只有一个404。再用原先的电脑不经过百度快照直接访问原链接,也是404的页面。这会儿我大写加粗的懵逼了3秒钟。压压惊对比看了一下原先电脑上,从百度快照访问原链接,和直接访问源链接时的http头信息。发觉当http头信息里包含百度cache的Referer信息时,就可以看到违禁信息。于是定位可能跟百度有关,且只有网站的某些服务器中招。

整理一下目前已知的现象,祭出百度好好搜了一番,发现还真有这样的攻击姿势:搜索引擎劫持

劫持的原理是通过代码,去执行判断,当一个网站被加入了快照劫持代码,如果是用户正常访问,不会做出任何改变。此时,如果是搜索引擎的制作来访问后(代码判断是蜘蛛来访后),就会执行判断,是蜘蛛来访,则给出你设置的网址让蜘蛛抓取,此时蜘蛛抓取的快照是你设置的,快照显示也会显示出你设置的快照,达到了快照的劫持。

既然知道了原理,那么就好排查问题了。

首先对比了一下线上被感染的程序,发现index.php里有一行诡异的代码

1
@INCLUDE_ONCE(PACK('H*','2f746d702f7365737212'));

百度了解到这个写法是16进制字符串,翻译成人类语言之后,确定了引用文件的路径。将被include的文件下载到本地之后删除之,并阅读源码,对照上面的定义确定就是这个被包含的文件以及那串代码导致的。删除代码之后,再次从百度快照跳转到原链接,发现已经看不到违禁信息了。可以说劫持问题顺利解决。

接下来就得排查index.php被修改,以及突然多出那么一个文件的原因了。

stat查看多出来文件的时间,按照这个时间检查了这个站点的访问日志,但是并没有看到异常的POST请求。正当一筹莫展的时候,想起来仔细检查这台服务器每天发送的文件变更通知邮件,发现案发日这台服务器上另外一个站点程序目录下新生成了两个文件。于是检查了另一个站点的访问日志,果然发现了蛛丝马迹,并且顺利定位了黑客上传的webshell,尊容见下图

因为被黑客所利用的这个站点,使用的开源框架比较古老,且相关开发人员人手不足。所以此次被黑客利用的程序漏洞仍未修复,最后只是把这些黑客上传进来的文件保存到本地留存后删除,以免二次伤害。

并且为了防止黑客再次进行攻击,果断的修改了nginx配置文件,对这个可上传文件的文件夹限制php程序运行。

1
2
3
location ~ ^/file/.*.(php|php5).*$ {
deny all;
}