首页 | 安全文章 | 安全工具 | Exploits | 本站原创 | 关于我们 | 网站地图 | 安全论坛
  当前位置:主页>安全文章>文章资料>漏洞资料>文章内容
dedecms5.3--5.6通杀执行漏洞
来源:http://hi.baidu.com/mr_xhming/blog 作者:mr_xhming 发布时间:2010-08-18  

看到大牛已放出exp,我也放出我的分析!大家将就下看吧

exp在http://hi.baidu.com/toby57/blog/item/686b70ece294cfdc2f2e2183.html

................................................................................................................................................

by:xhm1n9

article_add.php
........................
else if($dopost=='save')
{
include(DEDEMEMBER.'/inc/archives_check.php');

//分析处理附加表数据
$inadd_f = $inadd_v = '';
if(!empty($dede_addonfields))
{
   $addonfields = explode(';',$dede_addonfields);
............................................ //省略部份代码
     $inadd_f .= ','.$vs[0];
     $inadd_v .= " ,'".${$vs[0]}."' ";
    }
   }
}
..........................................
$addtable = trim($cInfos['addtable']);
if(empty($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->ParseDMFields($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']}<br />";
     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(!empty($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( !empty($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(!empty($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来生成图片里的后门!


 
[推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论:
  热点文章
·XSOK环境变量本地命令执行漏洞
·N点虚拟主机管理系统 致命漏洞。
·南方数据企业网站管理系统V10.0
·动网(DVBBS)Version 8.2.0 后
·Solaris 10 telnet漏洞及解决
·破解无线路由器密码,常见无线密
·Nginx %00空字节执行php漏洞
·WinWebMail、7I24提权漏洞
·XPCD xpcd-svga本地缓冲区溢出漏
·Struts2多个漏洞简要分析
·ecshop2.72 api.php 文件鸡肋注
·Discuz!后台拿Webshell 0day
  相关文章
·Dedecms <= V5.6 Final模板执行
·dedecms v5.3-v5.6 Get Shell 0d
·FreeBSD Kernel nfs_mount漏洞分
·FreeBSD Kernel mountnfs() 漏洞
·Microsoft IE 8 toStaticHTML()
·请下载新版工行个人网银
·新版搜狗输入法已修复多个安全漏
·ecshop SQL注射漏洞
·discuz 7.x xss 反射型exploit
·Windows Win32k.sys 窗口创建漏
·最新 phpcms 0day(图)
·dvbbs php2.0 多个漏洞
  推荐广告
CopyRight © 2002-2022 VFocuS.Net All Rights Reserved