CVE-2019-8362 Dedecms v5.7 sp2 后台文件上传 getshell


CVE-2019-8362 Dedecms v5.7 sp2 后台文件上传 getshell

一、漏洞简介

上传zip文件解压缩对于文件名过滤不周,导致getshell

二、漏洞影响

Dedecms v5.7 sp2

三、漏洞原理

dede/album_add.php的175行为上传文件后缀验证

1

跟进GetMatchFiles()函数

dqd.png

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目录下

firefox_53M4qOUQls.png

1.jpg.zip上传到soft目录

然后在dede/album_add.php中新建一个图集

上传成功后点击预览文档

firefox_4PLbaUquVF.png

成功后点击预览中的超链接

firefox_j83QycVp7F

成功文件上传,如果将其换成webshell即可getshell

五、漏洞修复

1、把/dede/file_class.php中的

else if(preg_match("/\.(".$fileexp.")/i",$filename))

修改为:

else if(substr($filename, -strlen($fileexp))===$fileexp)

2、及时更新版本


文章作者: H3h3QAQ
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 H3h3QAQ !
  目录