dedecms v5.7 文件包含导致任意代码执行

安全盒子团队今日发现了织梦dedecms的一个代码执行漏洞,该漏洞可执行任意代码导致getshell,
影响版本:≤V5.7SP1正式版(2014-06-27)
概述:
安全盒子团队在审计织梦dedecms时发现,某处过滤不严格,可任意代码执行,导致getshell
漏洞细节:
需要登录后台
在后台的随机模板设置
跟入article_template_rand.php
看到这里

//对旧文档进行随机模板处理
else if($dopost=='makeold')
{
set_time_limit(3600);
if(!file_exists($m_file))
{
AjaxHead();
echo "配置文件不存在!";
exit();
}
require_once($m_file);
/*省略*/
AjaxHead();
echo "全部随机操作成功!";
exit();
}


可以看到判断文件存在之后就直接require_once了

看看$m_file是什么文件

$m_file = DEDEDATA.'/template.rand.php';

然后可以看到save方法

if($dopost=='save')
{
$fp = fopen($m_file,'w');
flock($fp,3);
fwrite($fp,$templates);
fclose($fp);
$okmsg = '成功保存配置信息 AT:('.MyDate('H:i:s', time()).')';
}

写入$m_file,在article_template_rand.php中是可以进行编辑template.rand.php文件的
那么就看看在什么地方进入了makeold方法

<a href='#' onclick='DoRand(\"makeold\")'>[<u>设置全部</u>]</a>

可以看到在设置全部处有一个makeold,跟入js方法

function DoRand(jobname)
{
ChangeFullDiv('show');
\$DE('loading').style.display = 'block';
var myajax = new DedeAjax(\$DE('tmpct'));
myajax.SendGet2('article_template_rand.php?dopost='+jobname);
\$DE('loading').style.display = 'none';
ChangeFullDiv('hide');
}

到这里就明白了,在后台的article_template_rand.php处编辑文件写入一段php代码,我在这里写入一个phpinfo
然后保存之后点击设置全部,看看效果


本博客所有文章如无特别注明均为原创。作者:封笔尘缘复制或转载请以超链接形式注明转自 封笔尘缘
原文地址《dedecms v5.7 文件包含导致任意代码执行
分享到:更多

相关推荐

网友评论(0)