当前位置: 首页 > 工具软件 > KiteCMS > 使用案例 >

[代码审计]kitecms后台存在文件上传漏洞

陶博涉
2023-12-01

前言

今天在CNVD看到这个东东,考虑到危害不大,因此就在这里分享分享

利用方式

这个漏洞后台很多地方都存在,然后首先/admin/site/config.html?config_name=uploadFile,在这里设置图片后缀为php,之后可以在带图片上传的地方,通过burp抓包绕过前端验证后,改为php后缀以及添加GIF89a,即可成功利用

分析

首先网站会根据你的账户权限在session当中设置site_id(这里不做分析,有兴趣可以自己看看蛮有意思),在admin/site/config下进行配置修改的时候,有几行代码,可以看见其根据请求传入的键值对去执行saveCofig

foreach ($request as $k => $v) {
                $res = SiteConfig::saveCofig($this->site_id, $k, $v);
}

能看出是数据库操作,这里对传入的键值对去更新了kite_site_id

static public function saveCofig($site_id, $k, $v)
    {
        return self::where('site_id', $site_id)
            ->where('k', $k)
            ->update(['v' => $v]);
    }

在文件上传处

public function uploadFile()
    {
        // 获取表单上传文件
        $file = Request::file('file');

        $uploadObj = new UploadFile($this->site_id);
        $ret = $uploadObj->upload($file, 'image');

        if ($ret) {
            return $this->response(200, '上传成功', $ret);
        } else {
            return $this->response(201, $uploadObj->getError());
        }
    }

根据site_id初始化相关配置
$uploadObj = new UploadFile($this->site_id);
他会执行到下面

case 'image':
                $result = $file->check(['ext' => $this->config['upload_image_ext'], 'size' => $this->config['upload_image_size']*1024]);
                if(empty($result)){
                    // 上传失败获取错误信息
                    $this->error = $file->getError();
                    return false;
                }
                break;

这里我们upload_image_ext的配置就更新,中间还有很多细节就不继续写了,感兴趣的可以自己继续深入研究

 类似资料: