wuzhiCMS audit
字数 1091 2025-08-09 09:46:33

wuzhiCMS 漏洞分析与利用教学文档

1. 环境搭建与准备

  1. 源码结构说明

    • www 文件夹:网站根目录
    • coreframe 文件夹:CMS框架目录,包含模块应用程序
    • 路径配置:coreframe/configs/wz_config.php 中定义网站根目录
  2. 路由解析

    • m 参数:调用 coreframe 中的具体文件夹名称
    • f 参数:调用的类名
    • v 参数:类中的函数方法名

2. 目录穿越导致任意文件删除漏洞

漏洞位置

后台"拓展模块->附件管理->目录模式"

漏洞分析

  1. 代码位置coreframe/app/attachment/admin/index.php 中的 dir() 方法

    $dir = isset($GLOBALS['dir']) && trim($GLOBALS['dir']) ? str_replace(array('..\\', '../', './', '.\\'), '', trim($GLOBALS['dir'])) : '';
    $dir = str_ireplace(array('%2F', '//'), '/', $dir);
    $lists = glob(ATTACHMENT_ROOT . $dir . '/' . '*');
    
  2. 过滤绕过

    • 过滤了 ..\, ../, ./, .\
    • 但可以通过传入 ....// 或类似变形绕过
    • 拼接后形成 ../ 实现目录穿越
  3. 文件删除操作

    • 调用 my_unlink() 方法:
    private function my_unlink($path) {
        if(file_exists($path)) unlink($path);
    }
    
    • 只要路径存在,即可删除任意文件

复现步骤

  1. 进入后台附件管理的目录模式
  2. 点击返回上一级目录时抓包
  3. 修改 dir 参数为 ....// 等变形
  4. 构造路径删除目标文件

3. RCE (远程代码执行) 漏洞

漏洞位置

coreframe/app/attachment/admin/index.php 第156行

漏洞分析

  1. 缓存写入机制

    • 通过 submit 参数判断是否写入缓存
    • 调用 set_cache() 方法 (coreframe/app/core/libs/function/common.func.php 第392行)
    function set_cache($name, $data, $dir = '_cache_') {
        $filename = preg_replace('/([^a-z0-9_]+)/i', '', $name);
        // 创建目录并写入数据
        file_put_contents($path, $data);
    }
    
  2. 利用点

    • $data 可控 (来自 $setting 参数)
    • 可写入PHP代码
  3. 缓存读取机制

    • 未传入 submit 参数时调用 get_cache()
    • 包含之前写入的缓存文件

利用POC

  1. 写入shell

    ?m=attachment&f=index&_su=wuzhicms&v=ueditor&submit=1&setting=<?php phpinfo();?>
    
  2. 触发执行

    ?m=attachment&f=index&_su=wuzhicms&v=ueditor
    

4. 其他漏洞点

  1. 模板管理目录穿越
    • 维护界面->模板管理
    • 类似附件管理的目录穿越逻辑
    • 默认操作HTML文件

5. 防御建议

  1. 目录穿越防护

    • 使用 realpath() 规范化路径
    • 严格限制访问范围
  2. 文件操作防护

    • 增加权限检查
    • 限制可操作文件类型
  3. RCE防护

    • 对写入内容严格过滤
    • 避免直接包含用户可控文件
  4. 其他建议

    • 更新到最新版本
    • 限制后台访问IP

6. 总结

wuzhiCMS存在多个高危漏洞:

  1. 后台目录穿越导致任意文件删除
  2. 缓存机制不当导致RCE
  3. 模板管理目录穿越

这些漏洞组合可导致服务器完全沦陷,建议用户立即采取防护措施。

wuzhiCMS 漏洞分析与利用教学文档 1. 环境搭建与准备 源码结构说明 : www 文件夹:网站根目录 coreframe 文件夹:CMS框架目录,包含模块应用程序 路径配置: coreframe/configs/wz_config.php 中定义网站根目录 路由解析 : m 参数:调用 coreframe 中的具体文件夹名称 f 参数:调用的类名 v 参数:类中的函数方法名 2. 目录穿越导致任意文件删除漏洞 漏洞位置 后台"拓展模块->附件管理->目录模式" 漏洞分析 代码位置 : coreframe/app/attachment/admin/index.php 中的 dir() 方法 过滤绕过 : 过滤了 ..\ , ../ , ./ , .\ 但可以通过传入 ....// 或类似变形绕过 拼接后形成 ../ 实现目录穿越 文件删除操作 : 调用 my_unlink() 方法: 只要路径存在,即可删除任意文件 复现步骤 进入后台附件管理的目录模式 点击返回上一级目录时抓包 修改 dir 参数为 ....// 等变形 构造路径删除目标文件 3. RCE (远程代码执行) 漏洞 漏洞位置 coreframe/app/attachment/admin/index.php 第156行 漏洞分析 缓存写入机制 : 通过 submit 参数判断是否写入缓存 调用 set_cache() 方法 ( coreframe/app/core/libs/function/common.func.php 第392行) 利用点 : $data 可控 (来自 $setting 参数) 可写入PHP代码 缓存读取机制 : 未传入 submit 参数时调用 get_cache() 包含之前写入的缓存文件 利用POC 写入shell : 触发执行 : 4. 其他漏洞点 模板管理目录穿越 : 维护界面->模板管理 类似附件管理的目录穿越逻辑 默认操作HTML文件 5. 防御建议 目录穿越防护 : 使用 realpath() 规范化路径 严格限制访问范围 文件操作防护 : 增加权限检查 限制可操作文件类型 RCE防护 : 对写入内容严格过滤 避免直接包含用户可控文件 其他建议 : 更新到最新版本 限制后台访问IP 6. 总结 wuzhiCMS存在多个高危漏洞: 后台目录穿越导致任意文件删除 缓存机制不当导致RCE 模板管理目录穿越 这些漏洞组合可导致服务器完全沦陷,建议用户立即采取防护措施。