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

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

缺陷编号:wooyun-2015-0131155

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

相关厂商:天融信

漏洞作者: 路人甲

提交时间:2015-08-03 08:11

修复时间:2015-11-01 16:06

公开时间:2015-11-01 16:06

漏洞类型:命令执行

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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注入,另外该系统在登录的前提下,还是有许多处可以直接执行命令的地方,这里就不多说了,望厂商自行修复。
前面有人提交了该系统的命令执行漏洞,但需要登录,非常鸡肋

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


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

/function/ssh/file_ssh.php
/function/ssh/file_ssh_exec.php
/function/ssh/file_ssh_result.php


直接访问

https://122.156.42.163/function/ssh/file_ssh.php


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

a.png


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

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


b.png


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

c.png


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

d.png


漏洞二、SQL注入

/function/ssh/file_ssh.php


部分代码为:

/* 获取用户查询信息 */
$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 = "";
$sql = "SELECT * FROM tb_product";
$sql_where = " WHERE 1";
$sql_orderby = " order by status DESC limit $offset,$lines";
if($id != '' && $id != 'all'){
$sql_where .= " AND id=\"$id\"";
}


$lines参数,很明显的注入,但需要绕过系统本身的WAF,就不多说了
漏洞三:无数个命令执行漏洞
如下图所示

11.png


22.png


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

/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);


命令执行二:

/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;
}


命令执行三:

/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 为例

d.png

修复方案:

过滤吧

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:10

确认时间:2015-08-03 16:04

厂商回复:

感谢您的关注

最新状态:

暂无