dzzoffice 任意文件下载漏洞分析
dzzoffice 任意文件下载
\updload\dzz\system\save.php
第72行开始:
elseif($_GET['do']=='move'){
$obz=trim($_GET['obz']);
$tbz=trim($_GET['tbz']);
$sourcetype=trim($_GET['sourcetype']);
$icoids=explode(',',$_GET['icoid']);
$ticoid=intval($_GET['ticoid']);
$container=trim($_GET['container']);
$iscut=isset($_GET['iscut'])?intval($_GET['iscut']):0;
$data=array();
$icoarr=array();
$folderarr=array();
进入move条件
几个参数全是直接GET传入,没有过滤,只有$ticoid经过intval整形判断。
$icoids看这个参数完全没有过滤,跟进
elseif($sourcetype=='icoid'){//
$data=array();
$totalsize=0;
$data['gid']=$gid;
$data['iscopy']=$iscopy;
$icos=$folderids=array();
//
foreach($icoids as $icoid){
//
$opath=rawurldecode($icoid);
$path=rawurldecode(str_replace(array('_dock_','icosContainer_folder_','icosContainer_body_'),'',$container));
$return=IO::CopyTo($opath,$path,$iscopy);
if(!$iscopy){
$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'];
}
}
if($data['successicos']){
$data['msg']='success';
if(isset($data['error'])) $data['error']=implode(';',$data['error']);
echo json_encode_gbk($data);
exit();
}else{
$data['error']=implode(';',$data['error']);
echo json_encode_gbk($data);
exit();
}
}
第162到第205行全是这个函数相关。
首先是rawurldecode 和urldecode功能一样是url解码,然后$container=trim($_GET['container']);
这个函数也是直接传入然后去空格没有过滤。
$return=IO::CopyTo($opath,$path,$iscopy);这句是返回一个IO类的CopyTo方法的值跟进这个方法
class IO extends dzz_io {}
找到dzz_io类
在\upload\core\class\dzz\dzz_io.php中定义这个类
然后找到类方法CopyTo
function CopyTo($opath,$path,$iscopy=0){
if($io=self::initIO($opath)) return $io->CopyTo($opath,$path,$iscopy);
else return false;
}
这里调用了另外一个类方法initIO这里把传入的第一个变量$opath传到这个方法当中跟进这个类方法
protected function initIO($path){
$bzarr=explode(':',$path);
$allowbz=C::t('connect')->fetch_all_bz();//array('baiduPCS','ALIOSS','dzz','JSS');
if(strpos($path,'dzz::')!==false){
$classname= 'io_dzz';
}elseif(strpos($path,'attach::')!==false){
$classname= 'io_dzz';
}elseif(is_numeric($bzarr[0])){
$classname= 'io_dzz';
}elseif(in_array($bzarr[0],$allowbz)){
$classname= 'io_'.$bzarr[0];
}else{
return false;
}
return new $classname($path);
观察返回值前是return $io->CopyTo而这里$io的值全是io_dzz所以就变成了return io_dzz->CopyTo(这里之前没注意$io返回值卡了半天)
查看io_dzz类中的CopyTo方法
public function CopyTo($icoid,$path,$iscopy){
try{
$data=self::getMeta($icoid);
if(is_numeric($path)){//如果目标位置也是本地
if(!$iscopy){
$re=self::FileMove($icoid,$path,true);
$data['newdata']=$re['icoarr'];
$data['success']=true;
}else{
$re=self::FileCopy($icoid,$path,true);
$data['newdata']=$re['icoarr'];
$data['success']=true;
}
}else{
switch($data['type']){
case 'folder'://创建目录
if($re=IO::CreateFolder($path,$data['name'])){
if(isset($re['error']) && intval($re['error_code'])!=31061){
$data['success']=$arr['error'];
}else{
$data['newdata']=$re['icoarr'];
$data['success']=true;
$contents=C::t('icos')->fetch_all_by_pfid($data['oid']);
foreach($contents as $key=>$value){
$data['contents'][$key]=self::CopyTo($value['icoid'],$re['folderarr']['path']);
}
}
}
break;
case 'shortcut':case 'discuss':case 'dzzdoc':case 'user':case 'link':case 'music':case 'video':case 'topic':case 'app'://这些内容不能移动到api网盘内;
$data['success']=lang('message','非文件类只能存储在企业盘');
break;
default:
$re=IO::multiUpload($icoid,$path,$data['name']);
if($re['error']) $data['success']=$re['error'];
else{
$data['newdata']=$re;
$data['success']=true;
}
break;
}
}
}catch(Exception $e){
$data['success']=$e->getMessage();
return $data;
}
return $data;
}
在\upload\core\class\io\io_dzz.php的1415到1465行
$re=IO::multiUpload($icoid,$path,$data['name']);这里调用multiUpload方法跟进
function multiUpload($file,$path,$filename,$attach=array(),$ondup="newcopy"){
if($io=self::initIO($path)) return $io->multiUpload($file,$path,$filename,$attach,$ondup);
else return false;
}
同样是io_dzz类里面的multiUpload方法
public function multiUpload($opath,$path,$filename,$attach=array(),$ondup="newcopy"){
/*
* 分块上传文件
* param $file:文件路径(可以是url路径,需要服务器开启allow_url_fopen);
*/
$partsize=1024*1024*5; //分块大小2M
$data=IO::getMeta($opath);
if($data['error']) return $data;
$size=$data['size'];
if(is_array($filepath=IO::getStream($opath))){
return array('error'=>$filepath['error']);
}
if(!SpaceSize($attach['filesize'],$gid)){
return array('error' => lang('message','inadequate_capacity_space'));
}
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);
}else{ //分片上传
$partinfo=array('ispart'=>true,'partnum'=>0,'flag'=>$path,'iscomplete'=>false);
if(!$handle=fopen($filepath, 'rb')){
return array('error'=>'打开文件错误');
}
$fileContent='';
while (!feof($handle)) {
$fileContent .= fread($handle, 8192);
if(strlen($fileContent)>=$partsize){
$partinfo['partnum']+=1;
if($partinfo['partnum']*$partsize>=$size) $partinfo['iscomplete']=true;
if($re=self::upload($fileContent,$path,$filename,$partinfo)){
if($re['error']) return $re;
if($partinfo['iscomplete']) return $re;
}
$fileContent='';
}
}
fclose($handle);
if(!empty($fileContent)){
$partinfo['partnum']+=1;
$partinfo['iscomplete']=true;
if($re=self::upload($fileContent,$path,$filename,$partinfo)){
if($re['error']) return $re;
if($partinfo['iscomplete']) return $re;
}
}
}
}
}
这里上传文件
重点终于来了!!!
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居然还会返回,而且变量可控。
mod=corpus&op=list&cid=&fid=在数据库中看到他的上传结构是这样的
构造payload
/mod=system&op=save&do=move&container=dzz::&tbz=a&sourcetype=icoid&icoid=../../index.php
转载于:https://www.cnblogs.com/wangshuwin/p/7261939.html
dzzoffice 任意文件下载漏洞分析相关推荐
- 【代码审计】CLTPHP_v5.5.3后台任意文件下载漏洞分析
0x00 环境准备 CLTPHP官网:http://www.cltphp.com 网站源码版本:CLTPHP内容管理系统5.5.3版本 程序源码下载:https://gitee.com/chich ...
- 致远OA任意文件下载漏洞(CNVD-2020-62422)
文章目录 漏洞描述 影响版本 payload poc 漏洞复现 修复补丁 漏洞描述 致远OA存在任意文件下载漏洞,攻击者可利用该漏洞下载任意文件,获取敏感信息 影响版本 致远OA A6-V5 致远OA ...
- (原创)浅谈任意文件下载漏洞的利用
文章写的一般,如果有错误的地方,请指教~ 0x01 任意文件下载常见利用方式 0x02 信息收集部分 0x03 代码审计部分 0x04 总结 0x01 前言 在web语言中,php和java常常会产生 ...
- AVCON6 系统管理平台 download.action 任意文件下载漏洞
漏洞描述: 华平信息技术股份有限公司是一家视讯产品与应用提供商,掌握视频处理.视音频编解码和网络适应性等.AVCON6 系统管理平台 download.action 存在任意文件下载漏洞,攻击者通过漏 ...
- 任意文件下载漏洞知识点
文章目录 资料下载 任意文件下载 漏洞描述 利用条件 漏洞危害 漏洞发现 链接上 参数上 案例 漏洞利用 利用原理 windows路径 linux路径 修复建议 摘抄 资料下载 点击 下载 https ...
- 金蝶协同办公平台任意文件下载漏洞(无需登录)
经测试发现,该系统存在任意文件下载,且无需登录 存在漏洞的文件: /oa/admin/application/file_download.jsp?filePath=http://x.x.x.x:789 ...
- 大华城市安防监控系统平台管理存在任意文件下载漏洞
大华城市安防监控系统平台管理存在任意文件下载漏洞 1.大华城市安防监控系统平台管理存在任意文件下载漏洞 1.1.漏洞描述 1.2.漏洞影响 1.3.FOFA 2.漏洞复现 2.1.登录页面 2.2.抓 ...
- 华平信息技术股份有限公司 AVCON6 系统管理平台存在任意文件下载漏洞
文章目录 华平信息技术股份有限公司 AVCON6 系统管理平台存在任意文件下载漏洞 1. AVCON6 2.漏洞描述 3.影响版本 4.fofa 查询语句 5.漏洞复现 6.POC&EXP 7 ...
- symantec+linux+升级包,Symantec Messaging Gateway任意文件下载漏洞
发布日期:2012-12-01 更新日期:2012-12-06 受影响系统: Symantec Messaging Gateway 9.5.1 Symantec Messaging Gateway 9 ...
- 目录遍历漏洞和任意文件下载漏洞
目录浏览(目录遍历)漏洞 目录浏览漏洞是由于网站存在配置缺陷,导致网站目录可以被任意浏览,这会导致网站很多隐私文件与目录泄露,比如数据库备份文件.配置文件等,攻击者利用该信息可以为进一步入侵网站做准备 ...
最新文章
- Go协程池设计思路(Task-Job-Worker)
- STL Deque 容器
- (详解)你应该知道的new操作符
- raspberry pi_通过串行蓝牙从Raspberry Pi传感器单元发送数据
- 在Swing和Swt中使用JavaFX
- 博客堂怎么连个搜索功能都没有
- session一致性架构设计
- 【10分钟】入门人工智能
- 在线数值列表求和工具
- MEncoder的基础用法—6.6. 改变电影大小
- 清华大学计算机系研究生培养方案,清华大学计算机科学与技术系攻读硕士学位研究生培养方案...
- 前端特效-霓虹灯按钮
- java+微博上传图片_GitHub - lkshuihua/webpic: 轻量级Java 上传图片 到微博图床小工具...
- 顽固文件删除终极武器
- 推荐系统——利用用户标签数据
- 吴文俊应用计算机进行几何定理,我国著名数学家吴文俊院士应用计算机进行几何定理的证明,该应用属于计算机应用领域中的( )。...
- service暴露端口的方式与代理的方式
- 总账科目 前台操作关事务代码及操作要点
- 洛谷P2245 星际导航
- 赛科尔亚洲招聘Axapta顾问
热门文章
- 计算机提示无法识别优盘,插入U盘显示无法识别怎么办
- Unrecognized field ResultCode (class com.xiaocaimi.loan.pojo.vo.LiuLiuYuResponse), not marked as i
- ***测试技巧总结更新篇2
- C++操作Excel表格
- Java多维数组length
- EL表达式和JSTL笔记
- 高速收费员招聘考试题计算机题,高速公路面试题和考官题本及答案44套
- 网络文件夹共享服务器,五个最佳网络文件共享服务
- iOS根据相册图片识别条形码、二维码以及脸部特征
- NW.JS 客户端开发入坑指南