发新话题
打印

天融信WEB应用安全网关任意命令执行+SQL注入(无需登录)

天融信WEB应用安全网关任意命令执行+SQL注入(无需登录)

漏洞概要
缺陷编号:        WooYun-2015-131155
漏洞标题:        天融信WEB应用安全网关任意命令执行+SQL注入(无需登录)
相关厂商:        天融信
漏洞作者:        路人甲
提交时间:        2015-08-03 08:11
公开时间:        2015-11-01 16:06
漏洞类型:        命令执行
危害等级:        高
自评Rank:        20
漏洞状态: 厂商已经确认
漏洞来源:        http://www.wooyun.org
Tags标签:php源码审核 敏感文件操作参数未加过滤

漏洞详情披露状态:
2015-08-03:        细节已通知厂商并且等待厂商处理中
2015-08-03:        厂商已经确认,细节仅向厂商公开
2015-08-06:        细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航
2015-09-27:        细节向核心白帽子及相关领域专家公开
2015-10-07:        细节向普通白帽子公开
2015-10-17:        细节向实习白帽子公开
2015-11-01:        细节向公众公开

简要描述:天融信WEB应用安全网关三个不需要登录的任意命令执行和SQL注入+几十个普通权限的命令执行。
详细说明:天融信的WEB应用安全网关我感觉是安全做的相对较好的一套系统,但最终还是找到一个疏漏的地方,可执行任意命令,同时还存在SQL注入,另外该系统在登录的前提下,还是有许多处可以直接执行命令的地方,这里就不多说了,望厂商自行修复。

前面有人提交了该系统的命令执行漏洞,但需要登录,非常鸡肋


code 区域 WooYun: 天融信WEB应用安全网关可任意命令执行

漏洞一、命令执行漏洞

这里首先给出不需要登录的命令执行。


code 区域/function/ssh/file_ssh.php
/function/ssh/file_ssh_exec.php
/function/ssh/file_ssh_result.php

直接访问


code 区域https://122.156.42.163/function/ssh/file_ssh.php

如图所示,并点击执行命令按钮





跳转到如下的连接,输入命令,并点击提交命令:


code 区域https://122.156.42.163/function/ssh/file_ssh_exec.php?action=user_query&id=2



刷新页面,点击"查看"即可查看执行命令的结果,如下所示





这里以执行 cat /etc/shadow 为例





漏洞二、SQL注入


code 区域/function/ssh/file_ssh.php

部分代码为:


code 区域/* 获取用户查询信息 */
$id                 = getVar('id');
$starttime         = getVar("starttime");         // 查询起始时间
$stoptime        = getVar("stoptime");         // 查询结束时间
$page_num                 = getVar("page_num");                                // 分页变量
$lines                 = getVar('lines');                        // 每页显示记录数

$page_num                = ($page_num != "") ? $page_num : 1;
$lines                 = ($lines != '') ? $lines : 10;
$offset                = $lines * ( $page_num - 1 );

/* 构建SQL查询语句 */
$sql = "";
。。。
}

$lines参数,很明显的注入,但需要绕过系统本身的WAF,就不多说了

漏洞三:无数个命令执行漏洞

如下图所示







这些文件(包括但不限于这些文件)均存在任意命令执行漏洞,简单贴下造成漏洞的代码

命令执行一:


code 区域/function/sysconfig/log_manage.php
class Datamanage extends baseControl{
        public function doingSave()
        {
                $accesslog = getVar('accesslog');
                $accesslog2db = getVar('accesslog2db');
                $parselog = getVar('parselog');
               
                $accesslog = ($accesslog=='on')? 'start' : 'stop';
                $accesslog2db = ($accesslog2db=='on')? 'start' : 'stop';
                $parselog = ($parselog=='on')? 'start' : 'stop';
               
                $path = "/usr/local/waf/waa/bin/waf_system_config.sh ";
               
                $cmd1 = $path." $accesslog accesslog";
                @exec($cmd1, $out1, $ret1);

命令执行二:


code 区域/function/sysconfig/syslogng_configs.php
        class Datamanage extends baseControl        
        {
                public function doingSave()
                {
                        $accesslog = getVar('accesslog');
                        $accesslog2db = getVar('accesslog2db');
                        $parselog = getVar('parselog');
                        
                        $accesslog = ($accesslog=='on')? 'start' : 'stop';
                        $accesslog2db = ($accesslog2db=='on')? 'start' : 'stop';
                        $parselog = ($parselog=='on')? 'start' : 'stop';
                        
                        $path = "/usr/local/waf/waa/bin/waf_system_config.sh ";
                        
                        $cmd1 = $path." $accesslog accesslog";
                        @exec($cmd1, $out1, $ret1);
                        
                        $cmd2 = $path." $accesslog2db accesslog2db";
                        @exec($cmd2, $out2, $ret2);
                                                
                        $cmd3 = $path." $parselog parselog";
                        @exec($cmd3, $out3, $ret3);
                        
                        $this->redirect("log_manage.php");
                        //jsAlert("操作成功");
                        //echo("<script language='javascript'>top.window.frames['carnoc'].location.reload();</script>");
                        //jsLocation('log_manage.php');
                        exit;
                }

命令执行三:


code 区域/function/appconfig/alarm/alarm_ddos.php
if(getVar("action") == 'save'){
   $weboc                         = getVar("weboc");
   $intervalValue                 = getVar("interval");
   if(getVar("yj") == 1){
                $emailValue                    = getVar("email");
                $isEmailAbstratValue = getVar("isEmailAbstrat");
                $emailValue = preg_replace("/[\r|\n]/i", "", $emailValue);        // 就剩下xxx,xxx,xxx了。        
        }else{
                $emailValue                    = "NULL";
                $isEmailAbstratValue = "0";

        }
        if(getVar("fx") == 1){
                $smsValue                          = getVar("sjNum");               
                $smsValue = preg_replace("/[\r|\n]/i", "", $smsValue);        // 就剩下xxx,xxx,xxx了。
                //add by haoyh,2011-8-19,BUG[52534]处理连续逗号
                $smsValuearray =explode(',',$smsValue);
                $smsValue="";
                foreach($smsValuearray as $value)
                {
                   if($value!="")
                   {
                                $smsValue.=$value.",";
                   }
                }
                $smsValue=trim($smsValue,",");        
        }else{
                $smsValue                          = "NULL";               
        }
        if($weboc == 0){
                $cmd = "/usr/local/waf/waa/alarm/alarm_config.py ddos ".$weboc;                        
        }else{
                $cmd = "/usr/local/waf/waa/alarm/alarm_config.py ddos ".$weboc." ".$intervalValue." ".$emailValue." ".$isEmailAbstratValue." ".$smsValue;
        }
        @exec($cmd, $out, $ret);
        error_show($message= array(
                'defaultUrl' => '/function/appconfig/alarm/alarm_ddos.php',
                'msg_content'=> ($ret ? "操作失败":"操作成功"),
                'label'=> '返回告警管理',
                'why' => $cmd,
                'where'=> 'DDos攻击告警修改',
                'status'=> $ret ? '1': '0',
                'menu'=>'appconfig'
        ));
}

其他的命令执行还有非常多,请官方自行检查!


漏洞证明:这里以执行 cat /etc/shadow 为例





修复方案:过滤吧

版权声明:转载请注明来源 路人甲@乌云

漏洞回应
厂商回应:
危害等级:高

漏洞Rank:10
确认时间:2015-08-03 16:04
厂商回复:感谢您的关注
最新状态:暂无
原文:http://www.wooyun.org/bugs/wooyun-2015-0131155


[ 本帖最后由 linda 于 2016-1-12 11:58 编辑 ]

TOP

发新话题