dedecms5.6注入漏洞分析与利用

2010年7月21日星期三 | | |

  • 发布日期:2010-07.20  
  • 发布作者:xhm1n9
  • 官方地址:www.dedecms.com
  • 漏洞描述:  

    1. 此漏洞最先由toby57牛在http: //hi.baidu.com/toby57/blog/item/074f6b592d1dac272834f0c7.html公布出来,本人只是将漏洞跟了下,希望toby57别见怪啊!利用地方不一样,但问题出在同一地方!

    caicai.php
    ...............................................................................
     

    1. if($tid!=0)  
    2. {  
    3. $arr = $dsql->GetOne("Select * From `dede_arctype` where id='$tid' And corank=0 ");  
    4. if($cfg_list_son=='Y')  
    5. {  
    6. $CrossID = GetSonIds($tid,$arr['channeltype']); //注意  
    7. }  
    8. else  
    9. {  
    10. $CrossID = $tid;  
    11. }  
    12. .........................  
    13. $typequery = " arc.typeid in($CrossID) And ";  
    14. }  
    15.  
    16. $query = "Select arc.*,m.userid,m.face,  
    17. tp.typedir,tp.typename,tp.isdefault,tp.defaultname,tp.namerule,tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepath  
    18. From `dede_archives` arc left join `dede_arctype` tp on tp.id=arc.typeid left join `dede_member` m on m.mid=arc.mid  
    19. where $typequery arc.arcrank>-1  
    20. order by arc.`{$sort}` desc limit $maxrc ";  
    21. $dlist->SetParameter('tid',$tid);  
    22. $dlist->SetParameter('sort',$sort);  
    23. $dlist->SetTemplate(DEDEMEMBER.'/templets/caicai.htm');  
    24. $dlist->SetSource($query);  

    .............................................................................................

    GetSonIds()函数在channelunit.func.php中有定义

    1. function GetSonIds($id,$channel=0,$addthis=true)  
    2. {  
    3. global $_Cs; //注意  
    4. $GLOBALS['idArray'] = array();  
    5. if( !is_array($_Cs) )  
    6. {  
    7. require_once(DEDEROOT."/data/cache/inc_catalog_base.inc");  
    8. }  
    9. GetSonIdsLogic($id,$_Cs,$channel,$addthis);  
    10. $rquery = join(',',$GLOBALS['idArray']);  
    11. $rquery = preg_replace("/,$/", '', $rquery);  
    12.  
    13. return $rquery;  
    14. }  
    15.  
    16. //递归逻辑  
    17. function GetSonIdsLogic($id,$sArr,$channel=0,$addthis=false)  
    18. { echo $id;  
    19. if($id!=0 && $addthis)  
    20. {  
    21. $GLOBALS['idArray'][$id] = $id;  
    22. }  
    23. foreach($sArr as $k=>$v)  
    24. {   
    25. if( $v[0]==$id && ($channel==0 || $v[1]==$channel ))  
    26. {  
    27. GetSonIdsLogic($k,$sArr,$channel,true);var_dump($GLOBALS['idArray']); //第一个参数为$_Cs下标  
    28. }  
    29. }  
    30. }  


    漏洞在于引进函数中的$_Cs没有初始化,我们可以利用它的下标注入
    例:caicai.php?tid=1&_Cs[8)'][0]=1&_Cs[8)'][1]=1就会看到报错信息.
     

    2,mtypes.php 注入

    1. elseif ($dopost == 'save')  
    2. {  
    3. if(isset($mtypeidarr) && is_array($mtypeidarr))  
    4. {  
    5. $delids = '0';  
    6. $mtypeidarr = array_filter($mtypeidarr, 'is_numeric');  
    7. foreach($mtypeidarr as $delid)  
    8. {  
    9. $delids .','.$delid;  
    10. unset($mtypename[$delid]);  
    11. }  
    12. $query = "delete from `dede_mtypes` where mtypeid in ($delids) and mid='$cfg_ml->M_ID';";  
    13. $dsql->ExecNoneQuery($query);  
    14. }  
    15. foreach ($mtypename as $id => $name) //注意  
    16. {  
    17. echo $name = HtmlReplace($name);  
    18. echo $id;  
    19. $query = "update `dede_mtypes` set mtypename='$name' where mtypeid='$id' and mid='$cfg_ml->M_ID'";  
    20. $dsql->ExecuteNoneQuery($query);  
    21. }  
    22. //ShowMsg('分类修改完成','mtypes.php');  
    23. }  

    magic_quotes_gpc=off时,程序没处理$mtypename数组下标的值,可造成注入

    现在的dedecms默认开启了内置80sec写的过滤函数,注入语句要特殊构造,上面给的链接里其实牛人己忽破了,感兴趣的同鞋们可以自己看图本地测试:)

  • From:http://www.hackline.net/a/news/ldfb/web/2010/0721/4824.html
     
    我的QQ空间
    小析linux之压缩,解压,打包命令
    文件压缩和归档有时候,我们需要把一组文件贮存成一个文件以便备...
     

    0 评论:


    所有文章收集于网络,如果有牵扯到版权问题请与本站站长联系。谢谢合作![email protected]