FineCMS SYS_KEY未初始化导致任意文件写入

起初我以为这个sys_key是随机生成的.然后我本地和vps上发现都是一样的.最后去看了下源码发现没有生成这个值的地方.最后的最后看了开源的地址http://git.oschina.net/dayrui/finecms/blob/master/v5/config/system.php

发现是固定值 24b16fede9a67c9251d3e7c7161c83ac

文件:finecms/dayrui/controllers/Api.php
   
 /**
     * 自定义数据调用(新版本)
     */
    public function data2() {

        $data = array();

        // 安全码认证
        $auth = $this->input->get('auth', true);
        if ($auth != md5(SYS_KEY)) {
            // 授权认证码不正确
            $data = array('msg' => '授权认证码不正确', 'code' => 0);
        } else {
            // 解析数据
            $cache = '';
            $param = $this->input->get('param');
            if (isset($param['cache']) && $param['cache']) {
                $cache = md5(dr_array2string($param));
                $data = $this->get_cache_data($cache);
            }
            if (!$data) {

                if ($param == 'login') {
                    // 登录认证
                    $code = $this->member_model->login(
                        $this->input->get('username'),
                        $this->input->get('password'),
                        0, 1);
                    if (is_array($code)) {
                        $data = array(
                            'msg' => 'ok',
                            'code' => 1,
                            'return' => $this->member_model->get_member($code['uid'])
                        );
                    } elseif ($code == -1) {
                        $data = array('msg' => fc_lang('会员不存在'), 'code' => 0);
                    } elseif ($code == -2) {
                        $data = array('msg' => fc_lang('密码不正确'), 'code' => 0);
                    } elseif ($code == -3) {
                        $data = array('msg' => fc_lang('Ucenter注册失败'), 'code' => 0);
                    } elseif ($code == -4) {
                        $data = array('msg' => fc_lang('Ucenter:会员名称不合法'), 'code' => 0);
                    }
                } elseif ($param == 'update_avatar') {
                    // 更新头像
                    $uid = (int)$_REQUEST['uid'];
                    $file = $_REQUEST['file'];
                    //
                    // 创建图片存储文件夹
                    $dir = SYS_UPLOAD_PATH.'/member/'.$uid.'/';
                    @dr_dir_delete($dir);
                    if (!is_dir($dir)) {
                        dr_mkdirs($dir);
                    }
                    $file = str_replace(' ', '+', $file);
                    if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $file, $result)){
                        $new_file = $dir.'0x0.'.$result[2];
                        if (!@file_put_contents($new_file, base64_decode(str_replace($result[1], '', $file)))) {
                            $data = array(
                                'msg' => '目录权限不足或磁盘已满',
                                'code' => 0
                            );
                        }

和之前的一样.正则获取的地方有问题.image后面的值为任意值.导致悲剧的发生

 




上一篇:没有了

评论

大侠名号:   验证码: 点击我更换图片  

修远兮

在这里记录每一点自己需要的知识

添加创始人微信,一起交流心得

推荐文章RECOMMEND