monicazhang 发表于 2017-9-3 11:43:18

看Zabbix 2.2.x / 3.0.x latest.php SQL 注入

摘要:本次给大家分享的是四叶草安全BugScan社区成员" 呔(dai),妖怪!"童鞋提交的"Zabbix 2.2.x / 3.0.x latest.php SQL 注入检测"1、Zabbix?      zabbix(音同 zæbix)是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。      zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。      zabbix由2部分构成,zabbix server与可选组件zabbix agent。      zabbix server可以通过SNMP,zabbix agent,ping,端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能,它可以运行在Linux,Solaris,HP-UX,AIX,Free BSD,Open BSD,OS X等平台上。(注:文来自百度百科)2、漏洞危害证明
先来看下漏洞文件的源代码:
全局搜索使用该函数的地方。我们到这里:\include\classes\user\CProfile.php 第70行全局搜索flush(),zabbix\charts.php   zabbix\include\classes\user\CWebUser.phpzabbix\include\page_footer.php三个文件中做了调用。然后我们可以看到在jsrpc.php的最后一行:
那么我们的参数应该如何带入呢?我们可以看到在jsrpc.php中,
传入参数 type不为6时(PAGE_TYPE_JSON 为常量6),$data可以接受$_REQUEST传来的值。所以其实这里不论是get还是post或者cookie都可以带入。(cookie具体看服务端配置)。当method = screen.get的时候会进入到
$options数组的值我们根据情况来进行构造就好饿了。随后可以看到
继续跟进:
然后是这样:
我们的resourcetype的值为17(SCREEN_RESOURCE_HISTORY为17)接着进入了:

继续跟进:
这个类继承来自CScreenBase。在构造方法中调用了父类的构造方法。我们跟进来看看:
到了calculate中。
来跟进:
可以看到进入了insert。最终未处理的变量被带入到了查询。导致了sql注入。配置环境服务器:debian 4.0.4环境:docker程序:zabbix 3.0.2源码:Medicean/VulApps审计工具:sublime text上传点:jsrpc.php?sid=0bcd4ade648214dc&type=3&method=screen.get&timestamp=1471054088083&mode=2&screenid=&groupid=&hostid=0&pageFile=history.php&profileIdx=web.item.graph&profileIdx2=2%27123&updateProfile=true&screenitemid=&period=3600&stime=20170813040734&resourcetype=17&itemids=23297&action=showlatest&filter=&filter_task=&mark_color=1

直接带入请求链接
页面返回数据库INSERT报错信息,漏洞存在,丢sqlmap跑一边


修复建议:1、升级到3.0.42、使用 intval 函数过滤 CProfile::insertDB 中的 $idx2 变量检测插件

原创:四叶草安全BugScan社区
页: [1]
查看完整版本: 看Zabbix 2.2.x / 3.0.x latest.php SQL 注入