CVE-2019-8362 Dedecms v5.7 sp2 后台文件上传 getshell
一、漏洞简介
上传zip文件解压缩对于文件名过滤不周,导致getshell
二、漏洞影响
Dedecms v5.7 sp2
三、漏洞原理
在dede/album_add.php
的175行为上传文件后缀验证
跟进GetMatchFiles()
函数
function GetMatchFiles($indir, $fileexp, &$filearr)
{
$dh = dir($indir);
while($filename = $dh->read())
{
$truefile = $indir.'/'.$filename;
if($filename == "." || $filename == "..")
{
continue;
}
else if(is_dir($truefile))
{
$this->GetMatchFiles($truefile, $fileexp, $filearr);
}
else if(preg_match("/\.(".$fileexp.")/i",$filename))
{
$filearr[] = $truefile;
}
}
$dh->close();
}
在这行验证中可以看到
preg_match("/.(".$fileexp.")/i",$filename)
只是判断了文件名中是否存在.jpg、.png、.gif
中的一个
我们可以构造1.jpg.php
来进行bypass
四、漏洞复现
在本地存放一个php探针命名为1.jpg.php
将其压缩为zip
然后在后台的常用操作-文件式管理器处上传压缩文件到soft目录下
将1.jpg.zip
上传到soft目录
然后在dede/album_add.php
中新建一个图集
上传成功后点击预览文档
成功后点击预览中的超链接
成功文件上传,如果将其换成webshell即可getshell
五、漏洞修复
1、把/dede/file_class.php中的
else if(preg_match("/\.(".$fileexp.")/i",$filename))
修改为:
else if(substr($filename, -strlen($fileexp))===$fileexp)
2、及时更新版本