0x00 漏洞背景
2018-12-11 在CVE中文申请站公布了一个 DEDECMS 5.7 SP2 最新版本中存在文件上传漏洞,具有管理员权限者可利用该漏洞上传并getshell执行任意PHP代码。
经过分析验证。该漏洞要求管理员权限登录。并且要开启会员功能,这个功能在默认情况下是不开启,需要管理员手动开启。
经过360CERT判断,该漏洞危害小,影响面有限。但还是推荐使用DedeCMS的用户进行相关验证,并执行修复建议。
0x01 漏洞详情
include/dialog/config.php 在dialog操作的时候,针对用户权限进行校验。这就限制了必须是管理员。
随后 include/dialog/select_images_post.php 进行图片的校验,在这里可以明显的看到逻辑错误,这里针对文件名中的异常符号进行了替换为”的操作,并且随后的正则过滤条件限定宽松。导致漏洞产生。
对数据包进行修改
漏洞
同时在分析中发现一处有意思的点
如果要开启会员功能,需要访问到sys_info.php, 但这个文件最终会调用到dede_random_bytes, 其中有个一个关于MCRYPT_DEV_URANDOM的检测。
如果不是用的集成环境包,而是手动配置服务器,以Debain9为例,若没有安装libmcrypt-dev 这个package则会导致访问不存在的函数is_php
进而导致无法进行系统基本参数设置。
0x02 修复建议
1.文件后缀名检测进行重写。 2.对上传文件名进行统一重命名,后缀名只允许为image type类型。 3.对上传文件夹进行限制,不允许执行php。
除了上述方式以外,还可以直接进行代码层面的修改
对于受影响的正则表达式进行强化。限定$cfg_imgtype固定结尾的文件。
include/dialog/select_images_post.php
if(!preg_match("#\.(".$cfg_imgtype.")#i", $imgfile_name))
->
if(!preg_match("#\.(".$cfg_imgtype.")$#i", $imgfile_name))
0x03 时间线
2018-12-11 CVE中文申请站进行细节公开
2018-12-21 360CERT发布预警