CVE-2018-20129 织梦V5.7 SP2前台鸡肋文件上传getshell
抱大佬大腿的第一天,今日要做的事情是复现下CVE-2018-20129,也就是DedeCMS V5.7SP2 的一处通过文件上传get shell
介绍
此漏洞限制很大。
- 需要管理员权限
- 需要开启会员功能
也就是说虽然是前台getshell但是需要有后台权限
详情
漏洞产生于/include/dialog/select_images_post.php
1 | require_once(dirname(__FILE__)."/config.php"); |
看下config.php
1 | //检验用户登录状态 |
会先检验用户登录状态,必须要是后台管理员
同时config.php
1 | require_once(dirname(__FILE__)."/../common.inc.php"); |
而common.inc.php
1 | //转换上传的文件相关的变量及安全处理、并引用前台通用的上传函数 |
uploadsafe.inc.php中含有用来处理文件相关的函数
1 | $cfg_not_allowall = "php|pl|cgi|asp|aspx|jsp|php3|shtm|shtml"; |
上传的文件的后缀名不能是$cfg_not_allowall中的这些
1 | $imgfile_name = trim(preg_replace("#[ \r\n\t\*\%\\\/\?><\|\":]{1,}#", '', $imgfile_name)); |
这段代码表示$imgfile_name的一些特殊符号会先被去掉,在限制了php的情况下可以使用p?hp之类的后缀进行绕过,并且$imgfile_name中必须有.jpg,.png之类的
1 | $sparr = Array("image/pjpeg", "image/jpeg", "image/gif", "image/png", "image/xpng", "image/wbmp"); |
这段代码表示Content-Type必须是$sparr中的类型
- 如果网站配置AddType application/x-httpd-php .phtml之类的可以采用.phtml绕过后缀名限制
- 因为? *<* > 等字符会被过滤,所以也可以以使用.p?hp的形式绕过
复现
首先在后台打开会员功能,同时把注册审核给关了,方便注册
然后注册一个新账号,进入发表文章界面
点击下方的按钮后选择上传
修改后缀名为a.gif.p?hp,同时讲图片内容中加上**
进行访问
修复
- 关闭会员功能
- 采用白名单
- 改进扩展名判断