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

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

缺陷编号:wooyun-2014-060479

漏洞标题:U-Mail邮件系统上传文件缺陷导致暴力getshell

相关厂商:U-Mail

漏洞作者: Ano_Tom

提交时间:2014-05-13 01:12

修复时间:2014-08-11 01:14

公开时间:2014-08-11 01:14

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

危害等级:高

自评Rank:10

漏洞状态:已交由第三方合作机构(cncert国家互联网应急中心)处理

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-05-13: 细节已通知厂商并且等待厂商处理中
2014-05-16: 厂商已经确认,细节仅向厂商公开
2014-05-19: 细节向第三方安全合作伙伴开放
2014-07-10: 细节向核心白帽子及相关领域专家公开
2014-07-20: 细节向普通白帽子公开
2014-07-30: 细节向实习白帽子公开
2014-08-11: 细节向公众公开

简要描述:

U-Mail邮件系统某处上传缺陷,导致可以暴力获取webshell

详细说明:

漏洞文件:C:\umail\WorldClient\html\client\mail\module\o_attach.php
代码:

if ( ACTION == "attach-upload" )
{
if ( $_FILES )
{
$file_name = $_FILES['Filedata']['name'];
$file_type = $_FILES['Filedata']['type'];
$file_size = $_FILES['Filedata']['size'];
$file_source = $_FILES['Filedata']['tmp_name'];
$file_suffix = getfilenamesuffix( $file_name );
$path_target = getusercachepath( );
do
{
$file_id = makerandomname( );
$file_target = $path_target.$file_id.".".$file_suffix;
} while ( file_exists( $file_target ) );
if ( !move_uploaded_file( $file_source, $file_target ) )
{
dump_json( array(
"status" => 0,
"message" => el( "写入文件出错,请与管理员联系!", "" )
) );
}
$_SESSION[SESSION_ID]['attach_cache'][] = array(
"id" => $file_id,
"name" => $file_name,
"type" => "1",
"path" => $file_target,
"size" => $file_size
);
dump_json( array(
"status" => "1",
"filename" => $file_name,
"filesize" => $file_size,
"file_id" => $file_id
) );
}
else
{
dump_json( array(
"status" => "0",
"message" => el( "无法找到需要上传的文件!", "" )
) );
}
}


此处为发送邮件时的上传附件函数,允许上传任意文件,在通过黑白盒测试对比分析后得知$path_target = getusercachepath( )函数执行的结果为C:\umail\WorldClient\html\client\cache\{用户的user_id},其中$file_id即为上传文件保存的随机文件名,$file_suffix即为上传附件的文件类型。
在执行上传文件时候先将文件保存为临时文件,而此临时文件是存在web目录里,默认配置是可执行的(此处演示的是官网下载的最新版,windows server 2003搭建,且都为默认配置)
漏洞产生的在哪里?
首先通过对代码的分析,没找到用户可以查看$user_id的函数,而$user_id还是有规律可循的,按用户的数量从1一直递增;临时文件存放的路径是在web目录里,默认是有脚本执行权限的;临时文件名在上传成功后,审查元素可以看到。
因而,可以暴力猜解$user_id的值,来获得我们的webshell。
漏洞演示:
首先要有一个普通的用户,此处为了说明存储文件的伪随机性,在后台添加1000个用户,如图

5f9965a4-255e-4120-a178-b18213a51424.jpg


挑选test00877@fuck.com帐号密码password877登录后,写信,如图

7b7e1d2a-b0fd-4694-ae4b-d281717963ac.jpg


选择添加附件,上传php文件,返回结果获得的文件名(php文件上传过程中的临时文件名)为13998959208,保留此页面不关闭,然后打开burpsuite构造如下请求

0cf0d69a-144d-4df2-816b-089dca5b359e.jpg


载入intruder,设置payloads为numbers,依次递增。

f9d4bc3f-653a-44b6-9e89-6ce83b5afedb.jpg


好吧,1000个用户,跑了不到5秒。结果如下

bc3af965-86a5-401e-8522-37aba9d3d5f9.jpg


服务器状况为

7828b351-b850-400b-9c7c-5ca0c9e2f712.jpg


漏洞证明:

如上详细描述

修复方案:

将临时文件放在非web目录下,可以参考你们的网盘文件的写法

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:10

确认时间:2014-05-16 18:31

厂商回复:

CNVD只发现贵司官网的测试版本存在漏洞,其他实例因没有账号,无法确认。已联系深圳市福洽科技有限公司处置。

最新状态:

暂无


漏洞评价:

评论

  1. 2014-05-13 07:15 | 夕风号 ( 普通白帽子 | Rank:229 漏洞数:35 )

    Another example of "Bye,360.Hello,wooyun."

  2. 2014-05-13 08:25 | Lonely ( 实习白帽子 | Rank:72 漏洞数:27 | 人生如梦,始终都游不过当局者迷的悲哀。)

    Another example of "Bye,360.Hello,wooyun."

  3. 2014-05-13 11:13 | Ano_Tom ( 普通白帽子 | Rank:368 漏洞数:40 | Talk is cheap.:)

    @夕风号 Don't talk about these platforms,sharing is the most valuable. :)

  4. 2014-05-13 11:29 | 夕风号 ( 普通白帽子 | Rank:229 漏洞数:35 )

    @Ano_Tom Good job,bro!