今天在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
的配置就更新,中间还有很多细节就不继续写了,感兴趣的可以自己继续深入研究