记录黑客技术中优秀的内容,传播黑客文化,分享黑客技术精华

dzzoffice任意文件包含下载(需要登录)

2016-07-12 05:55

任意文件包含漏洞

问题文件在dzz/system/save.php之中

code 区域
}elseif($_GET['do']=='move'){



当是move方法的时候

从115行开始看

code 区域
if($sourcetype=='icoid'){//是ico时



$data=array();

$totalsize=0;

$data['gid']=$gid;

$data['iscopy']=$iscopy;

$icos=$folderids=array();



//分4种情况:a:本地到api;b:api到api;c:api到本地;d:本地到本地;



foreach($icoids as $icoid){

//在目标位置创建

$opath=rawurldecode($icoid);



$path=rawurldecode(str_replace(array('_dock_','icosContainer_folder_','icosContainer_body_'),'',$container));





$return=IO::CopyTo($opath,$path,$iscopy);

//调用了IO类的CopyTo方法

if(!$iscopy && !$return['moved']){

$return = IO::DeleteByData($return);

}



if($return['success']===true){

$data['icoarr'][]=$return['newdata'];

if(!$tbz){

addtoconfig($return['newdata'],$ticoid);

}



if($return['newdata']['type']=='folder') $data['folderarr'][]=IO::getFolderByIcosdata($return['newdata']);

$data['successicos'][$return['icoid']]=$return['newdata']['icoid'];



}else{

$data['error'][]=$return['name'].':'.$return['success'];

}

}



那么我们继续到CopyTo方法中看一下

code 区域
function CopyTo($opath,$path,$iscopy=0){



if($io=self::initIO($opath)) return $io->CopyTo($opath,$path,$iscopy);

else return false;

}



这里$io是io_dzz调用了io_dzz的CopyTo方法

code 区域
default:



$re=IO::multiUpload($icoid,$path,$data['name']);

if($re['error']) $data['success']=$re['error'];

else{

$data['newdata']=$re;

$data['success']=true;

}

break;

}



关键的代码段在这里,直接UPload到web应用的目录中来

code 区域
public function multiUpload($opath,$path,$filename,$attach=array(),$ondup="newcopy"){



看到上传文件这里

code 区域
if($size<$partsize){

//获取文件内容

$fileContent='';



if(!$handle=fopen($filepath, 'rb')){

return array('error'=>'打开文件错误');

}

while (!feof($handle)) {

$fileContent .= fread($handle, 8192);

}

fclose($handle);



return self::upload($fileContent,$path,$filename);



直接调用了自己的上传方法。这个upload方法会将文件上传的最终目录写在返回包中

我自己在本地测试了一下

QQ20160411-3@2x.png





QQ20160411-4@2x.png





QQ20160411-5@2x.png





百度了一下,发现存在好多的dzzoffice用户呢

QQ20160411-6@2x.png





随便找了一个测试一下

QQ20160411-7@2x.png





QQ20160411-8@2x.png

漏洞证明:

任意文件包含漏洞

问题文件在dzz/system/save.php之中

code 区域
}elseif($_GET['do']=='move'){



当是move方法的时候

从115行开始看

code 区域
if($sourcetype=='icoid'){//是ico时



$data=array();

$totalsize=0;

$data['gid']=$gid;

$data['iscopy']=$iscopy;

$icos=$folderids=array();



//分4种情况:a:本地到api;b:api到api;c:api到本地;d:本地到本地;



foreach($icoids as $icoid){

//在目标位置创建

$opath=rawurldecode($icoid);



$path=rawurldecode(str_replace(array('_dock_','icosContainer_folder_','icosContainer_body_'),'',$container));





$return=IO::CopyTo($opath,$path,$iscopy);

//调用了IO类的CopyTo方法

if(!$iscopy && !$return['moved']){

$return = IO::DeleteByData($return);

}



if($return['success']===true){

$data['icoarr'][]=$return['newdata'];

if(!$tbz){

addtoconfig($return['newdata'],$ticoid);

}



if($return['newdata']['type']=='folder') $data['folderarr'][]=IO::getFolderByIcosdata($return['newdata']);

$data['successicos'][$return['icoid']]=$return['newdata']['icoid'];



}else{

$data['error'][]=$return['name'].':'.$return['success'];

}

}



那么我们继续到CopyTo方法中看一下

code 区域
function CopyTo($opath,$path,$iscopy=0){



if($io=self::initIO($opath)) return $io->CopyTo($opath,$path,$iscopy);

else return false;

}



这里$io是io_dzz调用了io_dzz的CopyTo方法

code 区域
default:



$re=IO::multiUpload($icoid,$path,$data['name']);

if($re['error']) $data['success']=$re['error'];

else{

$data['newdata']=$re;

$data['success']=true;

}

break;

}



关键的代码段在这里,直接UPload到web应用的目录中来

code 区域
public function multiUpload($opath,$path,$filename,$attach=array(),$ondup="newcopy"){



看到上传文件这里

code 区域
if($size<$partsize){

//获取文件内容

$fileContent='';



if(!$handle=fopen($filepath, 'rb')){

return array('error'=>'打开文件错误');

}

while (!feof($handle)) {

$fileContent .= fread($handle, 8192);

}

fclose($handle);



return self::upload($fileContent,$path,$filename);



直接调用了自己的上传方法。这个upload方法会将文件上传的最终目录写在返回包中

我自己在本地测试了一下

QQ20160411-3@2x.png





QQ20160411-4@2x.png





QQ20160411-5@2x.png





百度了一下,发现存在好多的dzzoffice用户呢

QQ20160411-6@2x.png





随便找了一个测试一下

QQ20160411-7@2x.png





QQ20160411-8@2x.png

修复方案:

对文件的上传做好限制就行了


知识来源: www.wooyun.org/bugs/wooyun-2016-0195162

阅读:113649 | 评论:0 | 标签:无

想收藏或者和大家分享这篇好文章→复制链接地址

“dzzoffice任意文件包含下载(需要登录)”共有0条留言

发表评论

姓名:

邮箱:

网址:

验证码:

ADS

标签云

本页关键词