Zabbix SQL注入漏洞技术分析与防护方案

Zabbix软件被爆存在SQL注入漏洞,经过分析发现Zabbix默认开启了guest权限,且默认密码为空。随后Zabbix V3.0.4版本修复了2个SQL注入漏洞,本文对其公布的PoC进行分析,并给出检测及防护方案。

Zabbix公布了2个POC,如下:

  • /zabbix/jsrpc.php?sid=0bcd4ade648214dc&type=9&method=screen.get&timestamp=1471054088083&mode=2&screenid=&groupid=&hostid=0&pageFile=history.php&profileIdx=web.item.graph&profileIdx2=2’3297&updateProfile=true&screenitemid=&period=3600&stime=20170813040734&resourcetype=17&itemids%5B23297%5D=23297&action=showlatest&filter=&filter_task=&mark_color=1
  • latest.php?output=ajax&sid=&favobj=toggle&toggle_open_state=1&toggle_ids[]=15385); select * from users where (1=1

以下为第一个poc的调用链:

Jsrpc.php:413 require_once dirname(__FILE__).'/include/page_footer.php';

include/page_footer.php:40  $result = CProfile::flush();

include/class/user/Cprofile.php:63 function flush()

include/class/user/Cprofile.php:277 function insertDB ()

再看第二个poc的调用链:

Latest.php:88  CProfile::update('web.latest.toggle_other', $_REQUEST['toggle_open_state'], PROFILE_TYPE_INT, $hostId);

Latest.php:829 require_once dirname(__FILE__).'/include/page_footer.php';

include/page_footer.php:40  $result = CProfile::flush();

include/class/user/Cprofile.php:63 function flush()

include/class/user/Cprofile.php:277 function insertDB ()

Zabbix SQL注入漏洞过程分析

以第一个调用链为例,我们来看文件

\zabbix-3.0.0beta2\frontends\php\jsrpc.php。

当method等于screen.get时,profileIdx2参数进入options中,然后options进入CScreenBuilder::getScreen($options),继续跟进文件\zabbix-3.0.0beta2\frontends\php\include\classes\screens\CScreenBuilder.php。

profileIdx2参数又进入CScreenBase::calculateTime()函数,继续跟进文件\zabbix-3.0.0beta2\frontends\php\include\classes\screens\CScreenBase.php。

profileIdx2参数又进入CProfile::update()函数中,继续跟进\zabbix-3.0.0beta2\frontends\php\include\classes\user\CProfile.php。

这里的profileIdx2参数就是这里的idx2,进入到profile中,然后profile进入insert中最后进入到insertDB()函数中。

insertDB中的处理过程如下:

insertDB函数中,对一些关键参数(idx,value),用zbx_dbstr()函数进行了过滤,但对idx2没有过滤,导致产生了sql注入漏洞。

分析过滤函数zbx_dbstr()函数,位于文件zabbix-3.0.0beta2\zabbix-3.0.0beta2\frontends\php\include\db.inc.php。

可以看到这个就是zabbix的全局过滤函数,根据各种数据库类型,过滤sql注入的。

从开始到最后进入sql语句中的参数有三个:$options['profileIdx']、$options['period']、$options['profileIdx2'],只有$options['profileIdx2']全程没有过滤,直接进入sql语句中。

看官方的3.0.4修复版本的Cprofile::insertDB函数,其关键参数idx2也做了过滤,如下图:

当然,要使请求最终到达这个漏洞函数,中间还有一些限制条件,主要看Cprofile::flush函数,如下:

$profiles和$isModified()都会在前面的update()函数内会保证为真,而要满足userDeatails[‘suerid’]>0,则需要用户登录或系统开启guest模式。

Zabbix SQL注入漏洞检测及防护方案

监控系统监控着每个企业的核心资产,一旦被黑客入侵控制,等同为黑客进一步渗透企业敞开了大门。绿盟科技针对此次漏洞提供了以下解决方案:

1、对于受影响的版本,建议升级到最新版本,获取地址:

http://www.zabbix.com/download.php

2、禁用访客账户,例如Windows下的guest账户

3、绿盟科技免费在线检测:

https://cloud.nsfocus.com/#/krosa/views/initcdr/productandservice?pid=0&sid=1

4、绿盟科技在线云检测,登陆绿盟科技云,申请极光自助扫描服务试用:

https://cloud.nsfocus.com/#/krosa/views/initcdr/productandservice?pid=0&sid=0

5、使用绿盟科技的远程评估系统(RSAS/WVSS)对内网进行安全评估,RSAS插件升级包获取地址: http://update.nsfocus.com/update/listRsasDetail/v/vulweb ,WVSS插件升级包获取地址: http://update.nsfocus.com/update/listWvssDetail/v/6/t/plg

6、使用绿盟科技检测类产品(IDS)进行检测,各版本对应升级包分别为 5.6.10.14273 、 5.6.9.14273 、 5.6.8.594、 5.6.7.594 、 5.6.0.500

7、使用绿盟科技防护类产品(IPS/NF/SG)进行防护,各版本对应升级包分别为 5.6.10.14273 、 5.6.9.14273 、 5.6.8.594 、 5.6.7.594 、 5.6.0.500

8、已经购买了绿盟科技相关服务的客户可与售后联系,进行检测与防护

9、短期服务:绿盟科技工程师现场处理。确保第一时间消除网络内相关风险点,控制事件影响范围,并提供事件分析报告

10、中期服务:提供 3-6个月的风险监控与巡检服务。根除风险,确保事件不复发

11、长期服务:基金行业业务风险解决方案(威胁情报+攻击溯源+专业安全服务)

官方公告页面: https://support.zabbix.com/browse/ZBX-11023

漏洞报告详情: http://seclists.org/fulldisclosure/2016/Aug/82


原文发布时间:2017年3月24日
本文由:绿盟科技 发布,版权归属于原作者
原文链接:http://toutiao.secjia.com/zabbix-sql-injection-vulnerabilities-technical-analysis-and-protection-solution
本文来自云栖社区合作伙伴安全加,了解相关信息可以关注安全加网站
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值