建站之星php 漏洞,建站之星任意文件上传漏洞

#1 漏洞产生

/module/mod_media.php

flash_picker() 和 image_picker() 两个函数

image_picker() 函数

$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()函数

$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

Flash:

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

6c55116ac6c5522fb439a9dc2bfd9532.png

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

98f8fe80d35d18fab78e1b9d36421522.png

修复方案:

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值