DedeCMS 前台文件上传绕过漏洞

Posted by JenI on 2019-01-02 00:00:00+08:00

前言

织梦CMS是集简单、健壮、灵活、开源几大特点的开源内容管理系统,是国内开源CMS的领先品牌,目前程序安装量已达七十万,超过六成的站点正在使用织梦CMS或基于织梦CMS核心开发。最近,织梦DedeCMS-V5.7-UTF8-SP2版本被曝存在前台文件上传绕过漏洞,漏洞分析如下:

漏洞分析

漏洞出现在 DEDECMS的 会员文章发表页面,在编写详细内容时,页面使用了 CKEditor 编辑器,通过构造特殊的文件名并使用编辑器内的图片上传功能,可以绕过服务器限制,上传木马文件。文件上传到服务器后,交由 /include/dialog/select_images_post.php 文件进行处理:

dede-file-upload-bypass-1

select_images_post.php 文件针对上传图片的文件名进行了过滤,通过正则表达式对文件名内的字符进行匹配,删除掉可能存在问题的异常字符,之后,同样使用正则表达式检查了文件的后缀名是否为系统支持的图片格式。服务器也会对图片头进行检查:

dede-file-upload-bypass-2

然后判断上传图片的格式是否正确。如果判断通过了,对文件名进行整理:

dede-file-upload-bypass-3

这里可以看到 $fs 是将上传文件名按照“.”进行分割后的数组,而下一行代码中 $filename 所拼接的后缀为 $fs 数组中的最后一个元素,拼接后执行上传操作。 到这里就可以根据以上特点构造特殊文件名进行绕过了。首先需要满足文件名内存在服务器允许的几种图片格式中的某一个,如 jpg,gif,png 等,且文件头为对应格式的文件头,同时需要让最后一个“.”之后的内容为 php,但是后缀为 php 的文件是被禁止上传的,这里可以利用上面提到的对文件名特殊字符进行删除的特性,将 php 改写为 p*hp 或 p?hp 等,这样经过删除操作的文件名后缀就变为了 php。这样就可以绕过限制顺利上传了。

漏洞复现

访问漏洞存在的页面。

dede-file-upload-bypass-4

点击上传,选择提前准备好的图片木马:

dede-file-upload-bypass-5

浏览器代理改为 Burpsuite 进行抓包,点击上传到服务器,数据包成功被拦截:

dede-file-upload-bypass-6

在 Repeater 选项卡进行修改,并检查是否满足上述分析中的上传限制。

dede-file-upload-bypass-7

发送数据包之后,在 Response 页面会显示上传地址。

dede-file-upload-bypass-8

使用一句话木马连接工具进行连接;

dede-file-upload-bypass-9

连接成功。

参考

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-20129


作者:   JenI   转载请注明出处,谢谢


Comments !