YZNCMS白盒审计开源漏洞挖掘分析
字数 1301 2025-08-29 08:30:30

YZNCMS v2.0.1 安全漏洞分析与教学文档

1. 文件上传导致的命令执行漏洞

漏洞描述

YZNCMS最新版本v2.0.1在调试模式下,插件安装功能存在文件上传漏洞,攻击者可以通过修改插件压缩包上传并调用插件功能实现命令执行。

影响范围

  • YZNCMS v2.0.1
  • 需要后台权限
  • 需要在调试模式下

漏洞分析步骤

  1. 插件安装功能分析

    • 后台插件安装功能允许上传插件压缩包
    • 安装的插件压缩包存储在:runtime\admin\addons\command.zip
  2. 漏洞利用过程

    • 下载插件压缩包
    • 修改控制器文件:app\admin\controller\Command.php
    • 修改command方法代码部分为命令执行代码(如calc
    • 重新打包并上传修改后的插件
    • 调用插件功能执行命令
  3. 关键代码修改

    // 修改Command.php中的command方法
    public function command()
    {
        system('calc'); // 修改为任意命令
    }
    

漏洞复现步骤

  1. 登录后台
  2. 使用插件安装功能上传任意插件
  3. runtime\admin\addons\目录获取插件压缩包
  4. 解压并修改Command.php文件
  5. 重新打包并上传修改后的插件
  6. 调用插件功能触发命令执行

修复建议

  • 严格验证上传的插件文件
  • 禁用调试模式在生产环境
  • 对插件执行功能进行权限控制
  • 对上传的插件进行签名验证

2. 存储型XSS漏洞

漏洞描述

YZNCMS 2.0.1的Config.php存在存储型XSS漏洞,由于输入验证不足,攻击者可以注入恶意脚本并在其他用户浏览器中执行。

影响范围

  • YZNCMS v2.0.1
  • 需要后台权限

漏洞分析步骤

  1. 漏洞位置

    • 文件路径:admin/controller/general/Config.php
    • 关键方法:ConfigModel::refreshFile()
  2. 漏洞触发流程

    • 后台配置管理编辑站点名称
    • 输入恶意XSS payload
    • 系统调用refreshFile()方法写入配置文件
    • 未对内容进行过滤
    • 再次访问该页面时自动触发XSS
  3. 关键代码分析

    // 在Config.php中调用了写文件操作
    ConfigModel::refreshFile();
    
    // refreshFile方法中直接写入未过滤的内容
    file_put_contents($file, $config);
    

漏洞复现步骤

  1. 登录后台
  2. 进入配置管理->站点名称编辑
  3. 在默认值字段输入XSS payload,如:<script>alert(1)</script>
  4. 保存配置
  5. 再次访问该页面触发XSS

修复建议

  • 对所有用户输入进行HTML实体编码
  • 实现严格的输入验证
  • 对写入配置文件的内容进行过滤
  • 实施CSP(内容安全策略)

3. 综合防护措施

  1. 输入验证

    • 对所有用户输入实施白名单验证
    • 对特殊字符进行转义处理
  2. 输出编码

    • 对所有动态输出内容进行HTML编码
    • 使用上下文相关的输出编码
  3. 文件上传安全

    • 限制上传文件类型
    • 验证文件内容而不仅是扩展名
    • 将上传文件存储在非web可访问目录
  4. 安全配置

    • 生产环境禁用调试模式
    • 最小化PHP危险函数的使用
    • 定期更新框架和组件
  5. 权限控制

    • 实施最小权限原则
    • 对敏感操作进行二次验证
    • 记录所有管理操作

4. 总结

YZNCMS v2.0.1存在两个高危漏洞:

  1. 通过插件安装功能实现文件上传导致的命令执行
  2. 配置管理功能中的存储型XSS漏洞

这两个漏洞都需要后台权限才能利用,但一旦攻击者获取后台权限,将能完全控制系统。建议用户及时更新到修复版本,并实施上述安全措施。

YZNCMS v2.0.1 安全漏洞分析与教学文档 1. 文件上传导致的命令执行漏洞 漏洞描述 YZNCMS最新版本v2.0.1在调试模式下,插件安装功能存在文件上传漏洞,攻击者可以通过修改插件压缩包上传并调用插件功能实现命令执行。 影响范围 YZNCMS v2.0.1 需要后台权限 需要在调试模式下 漏洞分析步骤 插件安装功能分析 后台插件安装功能允许上传插件压缩包 安装的插件压缩包存储在: runtime\admin\addons\command.zip 漏洞利用过程 下载插件压缩包 修改控制器文件: app\admin\controller\Command.php 修改 command 方法代码部分为命令执行代码(如 calc ) 重新打包并上传修改后的插件 调用插件功能执行命令 关键代码修改 漏洞复现步骤 登录后台 使用插件安装功能上传任意插件 从 runtime\admin\addons\ 目录获取插件压缩包 解压并修改Command.php文件 重新打包并上传修改后的插件 调用插件功能触发命令执行 修复建议 严格验证上传的插件文件 禁用调试模式在生产环境 对插件执行功能进行权限控制 对上传的插件进行签名验证 2. 存储型XSS漏洞 漏洞描述 YZNCMS 2.0.1的Config.php存在存储型XSS漏洞,由于输入验证不足,攻击者可以注入恶意脚本并在其他用户浏览器中执行。 影响范围 YZNCMS v2.0.1 需要后台权限 漏洞分析步骤 漏洞位置 文件路径: admin/controller/general/Config.php 关键方法: ConfigModel::refreshFile() 漏洞触发流程 后台配置管理编辑站点名称 输入恶意XSS payload 系统调用 refreshFile() 方法写入配置文件 未对内容进行过滤 再次访问该页面时自动触发XSS 关键代码分析 漏洞复现步骤 登录后台 进入配置管理->站点名称编辑 在默认值字段输入XSS payload,如: <script>alert(1)</script> 保存配置 再次访问该页面触发XSS 修复建议 对所有用户输入进行HTML实体编码 实现严格的输入验证 对写入配置文件的内容进行过滤 实施CSP(内容安全策略) 3. 综合防护措施 输入验证 对所有用户输入实施白名单验证 对特殊字符进行转义处理 输出编码 对所有动态输出内容进行HTML编码 使用上下文相关的输出编码 文件上传安全 限制上传文件类型 验证文件内容而不仅是扩展名 将上传文件存储在非web可访问目录 安全配置 生产环境禁用调试模式 最小化PHP危险函数的使用 定期更新框架和组件 权限控制 实施最小权限原则 对敏感操作进行二次验证 记录所有管理操作 4. 总结 YZNCMS v2.0.1存在两个高危漏洞: 通过插件安装功能实现文件上传导致的命令执行 配置管理功能中的存储型XSS漏洞 这两个漏洞都需要后台权限才能利用,但一旦攻击者获取后台权限,将能完全控制系统。建议用户及时更新到修复版本,并实施上述安全措施。