menu arrow_back 湛蓝安全空间 |狂野湛蓝,暴躁每天 chevron_right ... chevron_right Yunucms v2.0.7 数据库泄露 chevron_right Yunucms v2.0.7 数据库泄露.md
  • home 首页
  • brightness_4 暗黑模式
  • cloud
    xLIYhHS7e34ez7Ma
    cloud
    湛蓝安全
    code
    Github
    Yunucms v2.0.7 数据库泄露.md
    3.43 KB / 2021-07-15 20:11:41
        Yunucms v2.0.7 数据库泄露
    =========================
    
    一、漏洞简介
    ------------
    
    云优CMS是一款基于TP5.0框架为核心开发的一套免费+开源的城市分站内容管理系统。云优CMS前身为远航CMS。云优CMS于2017年9月上线全新版本,二级域名分站,内容分站独立,七牛云存储,自定义字段,自定义表单,自定义栏目权限,自定义管理权限等众多功能深受用户青睐。
    
    二、漏洞影响
    ------------
    
    Yunucms v2.0.7
    
    三、复现过程
    ------------
    
    ### 漏洞分析
    
        POST /index.php?s=/admin/data/export HTTP/1.1
    
        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');
                    is_dir($path) || mkdir($path, 755, true);
                    //读取备份配置
                    $config = [
                        'path' => realpath($path) . DIRECTORY_SEPARATOR,
                        'part' => config('data_backup_part_size'),
                        'compress' => config('data_backup_compress'),
                        'level' => config('data_backup_compress_level'),
                    ];
    
                    //检查是否有正在执行的任务
                    $lock = "{$config['path']}backup.lock";
                    if (is_file($lock)) {
                        return $this->error('检测到有一个备份任务正在执行,请稍后再试,或手动删除"'.$lock.'"后重试!');
                    }
                    file_put_contents($lock, $Request->time()); //创建锁文件
                    //检查备份目录是否可写
                    is_writeable($config['path']) || $this->error('备份目录不存在或不可写,请检查后重试!');
                    session('backup_config', $config);
    
                    //生成备份文件信息
                    $file = [
                        'name' => date('Ymd-His', $Request->time()),
                        'part' => 1,
                    ];
                    session('backup_file', $file);
                    //缓存要备份的表
                    session('backup_tables', $ids);
    
                    //创建备份文件
                    $Database = new \com\Database($file, $config);
                    if (false !== $Database->create()) {
                        $tab = ['id' => 0, 'start' => 0];
                        return $this->success('初始化成功!', '', ['tables' => $ids, 'tab' => $tab]);
                    } else {
                        return $this->error('初始化失败,备份文件创建失败!');
                    }
                }
        ......
    
    可以看到,备份文件的命名用的time方法,跟进
    
        public function time($float = false)
            {
                return $float ? $_SERVER['REQUEST_TIME_FLOAT'] : $_SERVER['REQUEST_TIME'];
            }
    
    可以看到利用REQUEST\_TIME进行构造文件名,因此可以直接爆破得到并下载。
    
    ### 漏洞复现
    
    在后台系统管理-\>数据库管理模块将所有数据库备份
    
    ![](./resource/Yunucmsv2.0.7数据库泄露/media/rId26.png)
    
    查看本地文件,所有备份保存在data目录下,发现名命是以时间命名,可以直接爆破得到
    
    ![](./resource/Yunucmsv2.0.7数据库泄露/media/rId27.png)
    
    从前台访问并下载
    
    ![](./resource/Yunucmsv2.0.7数据库泄露/media/rId28.png)
    
    下载完成后打开,泄露所有数据库信息
    
    ![](./resource/Yunucmsv2.0.7数据库泄露/media/rId29.shtml)
    
    
    links
    file_download