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

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

缺陷编号:wooyun-2015-0136944

漏洞标题:金钱柜p2p系统某处设计缺陷导致大面积注入(demo成功)

相关厂商:山东金钱柜网络科技有限公司

漏洞作者: 牛肉包子

提交时间:2015-08-26 11:07

修复时间:2015-11-27 09:08

公开时间:2015-11-27 09:08

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-08-26: 细节已通知厂商并且等待厂商处理中
2015-08-29: 厂商已经确认,细节仅向厂商公开
2015-09-01: 细节向第三方安全合作伙伴开放
2015-10-23: 细节向核心白帽子及相关领域专家公开
2015-11-02: 细节向普通白帽子公开
2015-11-12: 细节向实习白帽子公开
2015-11-27: 细节向公众公开

简要描述:

只想上个前台
直接出数据。

详细说明:

看到/core/upload.class.php

function upfiles($data = array()){ 
global $mysql;
$error = "";
$file = $data['file'];
$dateFile = date("Y-m",time());
$this->setData($data);
$newDir = ROOT_PATH.$this->file_dir;
$count = $num = 0;
$error_msg = array();
$err_var = array("-2"=>"文件不存在","-3"=>"图片类型不正确","-4"=>"不是图片类型","-5"=>"上传图片过大");
$_result = array();
foreach($_FILES[$file]['name'] as $i =>$value){
if ($value!=""){
$count ++;
$this->img_type = strtolower(substr($_FILES[$file]['name'][$i],-3,3));
if ($_FILES[$file]['size'][$i]==0) $error = -2;
if(!in_array($this->img_type,$this->file_type)) $error = -3;
if(strpos($_FILES[$file]['type'][$i],'image')===false) $error = -4;
if($_FILES[$file]['size'][$i] >$this->file_size*1024) $error = -5;
if($_FILES[$file]['error'][$i] !=0 ) $error = -2;
$this->_mkdirs($this->file_dir);
$newFile = md5(time().rand(1,9)).$i.substr($_FILES[$file]['name'][$i],-4,4);
$oldFile = $_FILES[$file]['name'][$i];
$allFile = $newDir.$newFile;
if ($error<0){
$error_msg[] = $oldFile.$err_var[$error];
}else{
if(function_exists('move_uploaded_file')){
$result = move_uploaded_file($_FILES[$file]['tmp_name'][$i],$allFile);
}else{
@copy($_FILES[$file]['tmp_name'][$i],$allFile);
}
$this->setSrcImg($allFile);
$this->setCutimg();
$this->setDstImg($allFile);
$this->_createMask();
$this->_output();
if($data['name'][$i]==""){
$_name = $oldFile;
}else{
$_name = $data['name'][$i];
}
$sql = "insert into `{users_upfiles}` set code='{$data['code']}',aid='{$data['aid']}',user_id='{$data['user_id']}',`name`='{$_name}',filesize='{$_FILES[$file]['size'][$i]}',filetype='{$this->img_type}',fileurl='".$this->file_dir.$newFile."',filename='".$newFile."',`addtime` = '".time()."', `updatetime` = '".time()."',`addip` = '".ip_address()."',`updateip` = '".ip_address()."'";
$mysql ->db_query($sql);
$file_id = $mysql->db_insert_id();
$num++;
}
}
}
if ($num>0){
$sql = "select * from `{users_upfiles}` where code = '{$data['code']}' and aid = '{$data['aid']}' and if_cover = 1";
$result = $mysql->db_fetch_array($sql);
if($result==false){
$sql = "update `{users_upfiles}` set if_cover=1 where id= {$file_id}";
$mysql->db_query($sql);
}
}
$display = "有{$count}张相片上传,其中{$num}上传成功。".join(",",$error_msg);
return $display;
}


其中

name`='{$_name}'

是通过文件名获取的。由于是$_FILE变量获取,所以就可以无视单引号了(注:真的是这样么?测试下吧)。
我们搜一下这个函数的调用

QQ截图20150825205951.jpg


可以看到有近二十处调用,所以这些地方都存在注入。

http://demo1.wangdaixitong.com/?user&q=code/approve/realname
http://demo1.wangdaixitong.com/?user&q=code/approve/edu_status
http://demo1.wangdaixitong.com/?user&q=code/attestations/one
http://demo1.wangdaixitong.com/?user&q=code/attestations/more
等等 差不多有上传的地方都有注入


QQ截图20150825211016.jpg


我们随意拿一处测试

QQ截图20150825210135.jpg


然后截包,对文件名加个单引号

QQ截图20150825210247.jpg


报错了。
构造一下出数据

QQ截图20150825210346.jpg

漏洞证明:

QQ截图20150825210346.jpg

修复方案:

转义一下

版权声明:转载请注明来源 牛肉包子@乌云


漏洞回应

厂商回应:

危害等级:低

漏洞Rank:1

确认时间:2015-08-29 09:07

厂商回复:

谢谢

最新状态:

暂无


漏洞评价:

评论

  1. 2015-08-26 13:55 | roker ( 普通白帽子 | Rank:372 漏洞数:109 )

    膜拜爷爷

  2. 2015-08-29 09:21 | 玉林嘎 ( 普通白帽子 | Rank:798 漏洞数:99 )

    1rank...

  3. 2015-09-11 17:14 | 康小泡 ( 路人 | Rank:0 漏洞数:1 | 掉个offer给我吧)

    坐等$