Yunucms代码审计:后台XSS和数据库信息泄露
字数 987 2025-08-26 22:11:56

Yunucms代码审计:后台XSS和数据库信息泄露漏洞分析

1. 系统概述

Yunucms(云优CMS)是一款基于TP5.0框架开发的开源城市分站内容管理系统,前身为远航CMS。系统提供以下主要功能:

  • 二级域名分站
  • 内容分站独立
  • 七牛云存储
  • 自定义字段和表单
  • 自定义栏目和管理权限

2. 漏洞环境搭建

  1. 从官网下载源码并安装
  2. 注册云账号(测试账号:testqwe/123456)
  3. 填写MySQL数据库信息完成安装

3. 后台XSS漏洞分析

3.1 漏洞复现步骤

  1. 登录后台访问TAG管理模块
  2. 添加TAG时在名称字段插入XSS代码(如<script>alert(1)</script>
  3. 提交后返回TAG列表页面触发XSS

3.2 漏洞代码分析

漏洞位于/index.php?s=/admin/tagurl/addtagurl路由:

public function addTagurl()
{
    if(request()->isAjax()){
        $param = input('post.'); // 获取用户输入
        $tagurl = new TagurlModel();
        $flag = $tagurl->insertTagurl($param); // 直接保存输入
        return json(['code' => $flag['code'], 'data' => $flag['data'], 'msg' => $flag['msg']]);
    }
    return $this->fetch();
}

关键问题点:

  1. 直接接收用户输入(input('post.')
  2. 未进行任何过滤直接保存到数据库
  3. 输出时未进行HTML编码

3.3 漏洞调用链

  1. addTagurl()接收用户输入
  2. 调用insertTagurl()方法保存数据
  3. 最终通过PDO的bindValue()直接绑定参数,无过滤:
$this->PDOStatement->bindValue($param, $val);

4. 数据库信息泄露漏洞分析

4.1 漏洞复现步骤

  1. 登录后台访问"系统管理->数据库管理"
  2. 执行数据库备份操作
  3. 备份文件默认保存在/data目录下
  4. 文件名采用时间戳命名(如Ymd-His格式)
  5. 可直接通过URL访问并下载备份文件

4.2 漏洞代码分析

备份功能位于/index.php?s=/admin/data/export

public function export($ids = null, $id = null, $start = null) {
    $Request = Request::instance();
    if ($Request->isPost() && !empty($ids) && is_array($ids)) {
        $path = config('data_backup_path');
        // 生成备份文件名(使用当前时间)
        $file = [
            'name' => date('Ymd-His', $Request->time()),
            'part' => 1,
        ];
        session('backup_file', $file);
        // 创建备份文件
        $Database = new \com\Database($file, $config);
        if (false !== $Database->create()) {
            $tab = ['id' => 0, 'start' => 0];
            return $this->success('初始化成功!', '', ['tables' => $ids, 'tab' => $tab]);
        }
    }
}

关键问题点:

  1. 备份文件名使用可预测的时间戳格式(Ymd-His
  2. 备份文件存储在web可访问目录
  3. 无访问权限控制

5. 漏洞修复建议

5.1 XSS漏洞修复

  1. 输入过滤:
// 在接收参数时进行HTML实体编码
$param = htmlspecialchars(input('post.'), ENT_QUOTES);
  1. 输出编码:
<!-- 在模板中使用模板引擎的转义功能 -->
{$tag_name|htmlspecialchars}

5.2 数据库泄露漏洞修复

  1. 修改备份文件命名规则:
// 使用随机字符串作为文件名
$file = [
    'name' => md5(uniqid().mt_rand(1000,9999)),
    'part' => 1,
];
  1. 设置备份目录访问权限:
location ^~ /data/ {
    deny all;
}
  1. 添加身份验证:
// 检查下载权限
public function downloadBackup($filename) {
    if(!session('admin_id')) {
        $this->error('无权访问');
    }
    // 下载逻辑...
}

6. 总结

  1. 后台漏洞同样具有高风险,不应忽视其危害
  2. XSS漏洞源于未过滤的用户输入和未编码的输出
  3. 数据库泄露漏洞源于可预测的文件名和不当的访问控制
  4. 安全开发应遵循"不信任任何输入"和"最小权限"原则

通过这两个漏洞的组合利用,攻击者可能实现从XSS到服务器完全控制的全链条攻击,因此后台系统的安全性同样需要高度重视。

Yunucms代码审计:后台XSS和数据库信息泄露漏洞分析 1. 系统概述 Yunucms(云优CMS)是一款基于TP5.0框架开发的开源城市分站内容管理系统,前身为远航CMS。系统提供以下主要功能: 二级域名分站 内容分站独立 七牛云存储 自定义字段和表单 自定义栏目和管理权限 2. 漏洞环境搭建 从官网下载源码并安装 注册云账号(测试账号:testqwe/123456) 填写MySQL数据库信息完成安装 3. 后台XSS漏洞分析 3.1 漏洞复现步骤 登录后台访问TAG管理模块 添加TAG时在名称字段插入XSS代码(如 <script>alert(1)</script> ) 提交后返回TAG列表页面触发XSS 3.2 漏洞代码分析 漏洞位于 /index.php?s=/admin/tagurl/addtagurl 路由: 关键问题点: 直接接收用户输入( input('post.') ) 未进行任何过滤直接保存到数据库 输出时未进行HTML编码 3.3 漏洞调用链 addTagurl() 接收用户输入 调用 insertTagurl() 方法保存数据 最终通过PDO的 bindValue() 直接绑定参数,无过滤: 4. 数据库信息泄露漏洞分析 4.1 漏洞复现步骤 登录后台访问"系统管理->数据库管理" 执行数据库备份操作 备份文件默认保存在 /data 目录下 文件名采用时间戳命名(如 Ymd-His 格式) 可直接通过URL访问并下载备份文件 4.2 漏洞代码分析 备份功能位于 /index.php?s=/admin/data/export : 关键问题点: 备份文件名使用可预测的时间戳格式( Ymd-His ) 备份文件存储在web可访问目录 无访问权限控制 5. 漏洞修复建议 5.1 XSS漏洞修复 输入过滤: 输出编码: 5.2 数据库泄露漏洞修复 修改备份文件命名规则: 设置备份目录访问权限: 添加身份验证: 6. 总结 后台漏洞同样具有高风险,不应忽视其危害 XSS漏洞源于未过滤的用户输入和未编码的输出 数据库泄露漏洞源于可预测的文件名和不当的访问控制 安全开发应遵循"不信任任何输入"和"最小权限"原则 通过这两个漏洞的组合利用,攻击者可能实现从XSS到服务器完全控制的全链条攻击,因此后台系统的安全性同样需要高度重视。