标题:
天融信WEB应用安全网关任意命令执行+SQL注入(无需登录)
[打印本页]
作者:
linda
时间:
2016-1-12 11:54
标题:
天融信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 编辑
]
欢迎光临 中神通公司技术论坛 (http://trustcomputing.com.cn/bbs/)
Powered by Discuz! 6.0.0