摘要:本次给大家分享的是四叶草安全BugScan社区成员" 呔(dai),妖怪!"童鞋提交的"Zabbix 2.2.x / 3.0.x latest.php SQL 注入检测" 1、Zabbix? zabbix(音同 zæbix)是一个基于WEB界面的提供分布式[url=]系统监视[/url]以及网络监视功能的企业级的开源解决方案。 zabbix能监视各种网络参数,保证[url=]服务器系统[/url]的安全运营;并提供灵活的通知机制以让[url=]系统管理员[/url]快速定位/解决存在的各种问题。 zabbix由2部分构成,zabbix server与可选组件zabbix agent。 zabbix server可以通过[url=]SNMP[/url],zabbix agent,[url=]ping[/url],端口监视等方法提供对远程服务器/网络状态的监视,[url=]数据收集[/url]等功能,它可以运行在Linux,Solaris,HP-UX,AIX,Free BSD,Open BSD,OS X等平台上。 (注:文来自百度百科) 2、漏洞危害证明
[size=1em] 先来看下漏洞文件的源代码: 我们到这里:\include\classes\user\CProfile.php 第70行 全局搜索flush(),zabbix\charts.php zabbix\include\classes\user\CWebUser.php zabbix\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。在构造方法中调用了父类的构造方法。我们跟进来看看:
可以看到进入了insert。最终未处理的变量被带入到了查询。导致了sql注入。 配置环境服务器:debian 4.0.4 环境:docker 程序:zabbix 3.0.2 审计工具:sublime text 上传点:jsrpc.php?sid=0bcd4ade648214dc&type=3&method=screen.get×tamp=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]=23297&action=showlatest&filter=&filter_task=&mark_color=1
直接带入请求链接
页面返回数据库INSERT报错信息,漏洞存在,丢sqlmap跑一边
修复建议:1、升级到3.0.4 2、使用 intval 函数过滤 CProfile::insertDB 中的 $idx2 变量 检测插件
|