当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2014-052420

漏洞标题:CSDJCMS 程式舞曲最新版上传设计缺陷(IIS6可getshell)

相关厂商:chshcms.com

漏洞作者: ′雨。

提交时间:2014-03-02 20:08

修复时间:2014-05-31 20:08

公开时间:2014-05-31 20:08

漏洞类型:文件上传导致任意代码执行

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-03-02: 细节已通知厂商并且等待厂商处理中
2014-03-03: 厂商已经确认,细节仅向厂商公开
2014-03-06: 细节向第三方安全合作伙伴开放
2014-04-27: 细节向核心白帽子及相关领域专家公开
2014-05-07: 细节向普通白帽子公开
2014-05-17: 细节向实习白帽子公开
2014-05-31: 细节向公众公开

简要描述:

若IIS6 支持asp的话
可导致直接Getshell。

详细说明:

在user/upload.php中

public function upload_save() {  //多文件
$ac = $this->input->get_post('ac', TRUE);

if (!empty($_FILES)) {
$tempFile = $_FILES['Filedata']['tmp_name'];

$targetPath = './attachment/' . $ac . '/'.date('Ym').'/'.date('d').'/';


$file_name = $_FILES['Filedata']['name'];
$file_size = @filesize($_FILES['Filedata']['tmp_name']);
//获得文件扩展名
$file_ext = strtolower(trim(substr(strrchr($file_name, '.'), 1)));
if($file_ext=='mp3' || $file_ext=='wma' || $file_ext=='m4a' || $file_ext=='f4a' || $file_ext=='mp4' || $file_ext=='flv' || $file_ext=='avi' || $file_ext=='asf' || $file_ext=='wmv' || $file_ext=='swf'){ //判断后缀
}else{
@unlink($tempFile);
}
//---------获取歌曲属性------------------
$djinfo=$this->CsdjSkins->djinfo(@iconv('utf-8','gbk',$tempFile));
if($djinfo){
$info=explode("|",$djinfo);
$dx =$info[0];
$yz =$info[1];
$sc =$info[2];
} else {
$dx ='';
$yz ='';
$sc ='';
}
//新文件名
$new_file_name = date("YmdHis") . '_' . rand(10000, 99999) . '.' . $file_ext;

$targetFile = str_replace('//','/',$targetPath) . $new_file_name;

if(FTP_Fun==1){ //开启远程附件
$FTPUP['hostname'] = FTP_Server;
$FTPUP['port'] = FTP_Port;
$FTPUP['username'] = FTP_Name;
$FTPUP['password'] = FTP_Pass;
//$FTPUP['debug'] = TRUE;
$FTPUP['passive'] = FTP_Ive;
$this->ftp->connect($FTPUP);
$targetPath = './attachment/' . $ac . '/'.date('Ymd').'/';
//----------创建目录------------------------
$Dirs=FTP_Dir;
if(substr($Dirs,0,1)=='/') $Dirs=substr($Dirs,1);
if(substr($Dirs,-1)=='/') $Dirs=substr($Dirs,0,-1);
if(!empty($Dirs)) $Dirs.='/';
$All=explode("/",$targetPath);
$Dir1='./'.$Dirs.$All[1].'/';
$this->ftp->mkdir($Dir1, DIR_WRITE_MODE);
$Dir2=$Dir1.$All[2].'/';
$this->ftp->mkdir($Dir2, DIR_WRITE_MODE);
$Dir3=$Dir2.$All[3].'/';
$this->ftp->mkdir($Dir3, DIR_WRITE_MODE);
//----------上传文件------------------------
$this->ftp->mkdir($targetPath, DIR_WRITE_MODE);
$this->ftp->upload($tempFile, $Dir3.$new_file_name);
$this->ftp->close();
echo "/attachment/" . $ac . "/".date('Ymd')."/".$new_file_name."=cscms=".$dx."=cscms=".$yz."=cscms=".$sc;
}else{ //本地附件
!is_dir(str_replace('//','/',$targetPath)) && mkdir(str_replace('//','/',$targetPath), 0755, true);

if(!file_exists($targetPath.'index.html')){
@file_put_contents($targetPath.'index.html','cscms');
}
@move_uploaded_file($tempFile,$targetFile);
echo "/attachment/" . $ac . "/".date('Ym')."/".date('d')."/".$new_file_name."=cscms=".$dx."=cscms=".$yz."=cscms=".$sc;
}
}
}


$ac 可控 然后 可以看到 路径是由$ac 和data 组成的。
这里由于是生成目录。 就算能截断也没用 况且还不能截断。。
在iis6 asp中 有解析洞 就是xx.asp/xx/xx.flv 都会当成asp来解析嘛。
虽然csdj 是php的 但是很多windows下IIS6的 支持php大部分都还是支持asp的。
这里来控制$ac

88.jpg


就在元素那里改把。。
type改了是没用了 就算改成了jogx也不能上传jpgx。。
然后 上传一个flv。

89.jpg


上传后 就是这样的路径了。
如果IIS6 asp的话 这样的是可以解析的。。
但是我本地apache 就算了。 - -
至于这个路径的话。
"/attachment/" . $ac . "/".date('Ymd')."/".$new_file_name.
attachment/yu.asp/2014/03/01/ 这些都是可以知道的。
$new_file_name.
$new_file_name = date("YmdHis") . '_' . rand(10000, 99999) . '.' . $file_ext;
格式化的时间戳
20140301115658 2014年3月1日11点56分58秒
例如是这样的 这个也是可以知道的 上传的时候记录一下时间
然后就是_ 10000-99999的随机了 这里就需要爆破一下 然后就是最后的.flv

漏洞证明:

。嗯 说得很清楚了。

修复方案:

过滤

版权声明:转载请注明来源 ′雨。@乌云


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:10

确认时间:2014-03-03 09:21

厂商回复:

感谢您的检测
已经修复!

最新状态:

暂无