SNMP协议漏洞分析
SNMP协议漏洞分析
前言
SNMP(Simple Network Management Protocol,简单网络管理协议)是一种用来管理和监控网络设备的标准协议。
📡 SNMP 的作用
SNMP 允许网络管理员使用一台集中管理的计算机(称为 管理端)来获取或控制网络中各种设备(如路由器、交换机、服务器、打印机等,称为 被管理端)的状态或配置。
🧱 SNMP 的基本组成
| 组件 | 说明 |
| ——————————————————— | —————————————————————————————— |
| 管理端(Manager) | 负责发送请求、接收数据、集中管理设备 |
| 代理端(Agent) | 运行在每台被管理设备上,负责收集设备信息并响应管理端的请求 |
| MIB(Management Information Base) | 一种定义设备中可以被监控的数据结构的数据库(比如 CPU 使用率、接口状态等) |
| 协议端口 | 默认使用 UDP 协议,监听端口为 161(Agent)和 162(Trap 信息) |
🔄 SNMP 的常见操作
GET
:获取某个参数(如接口状态)SET
:修改某个参数(如重新启动接口)TRAP
:由设备主动发送警告(如温度过高、端口断连)WALK
:遍历某个 MIB 的多个数据项
🛠 SNMP 应用场景
监控服务器 CPU、内存使用率
网络设备端口状态监控
故障告警系统(通过 Trap 机制)
自动化网络配置工具
1. CVE-2025-27147
漏洞描述:
GLPI 清单插件处理 GLPI 代理的各种类型的任务,包括网络发现和清单 (SNMP)、软件部署、VMWare ESX 主机远程清单和数据收集(文件、Windows 注册表、WMI)。1.5.0 之前的版本存在不正确的访问控制漏洞。版本 1.5.0 修复了此漏洞。
🧰 GLPI 插件中涉及的各种工具与软件模块
GLPI 的清单插件配合代理(如 GLPI-Agent)或 FusionInventory 使用,可以自动执行多种任务:
功能/模块 描述 GLPI-Agent 一种跨平台的代理程序,安装在客户端设备上,负责采集系统信息并与 GLPI 通信。支持任务如资产清单、命令执行、部署等。 FusionInventory Agent 原始的社区版本代理,功能类似,但逐步被 GLPI-Agent 替代 网络发现(Discovery) 使用 Ping/SNMP 发现子网中活动设备,例如打印机、交换机、摄像头等 网络清单(SNMP Inventory) 通过 SNMP 收集设备的硬件信息、运行状态、端口信息 软件部署(Deployment) 向客户端推送并自动安装 MSI、EXE、脚本包。适用于集中化管理软件环境 VMWare ESX 清单 使用 VMWare API 获取 ESXi 主机、虚拟机的信息,供虚拟化资产管理 文件收集任务 从客户端系统上指定路径中提取文件(如配置文件、日志) Windows 注册表 读取客户端注册表特定项值,用于配置识别或安全检查 WMI 数据收集 通过 WMI(Windows Management Instrumentation)提取详细系统属性,如补丁、硬件序列号等 命令执行 在客户端上执行指定命令或脚本,通常用于诊断或补丁脚本 计划任务调度 定期执行上述任何任务,支持自定义调度策略
漏洞类型:
CWE-22: Improper Limitation of a Pathname to a Restricted Directory (‘Path Traversal’)
描述:
对受限目录的路径名有不当限制(“路径遍历”),产品使用外部输入来构造路径名,该路径名旨在标识位于受限父目录下的文件或目录,但产品无法正确中和路径名中的特殊元素,这些元素可能导致路径名解析为受限目录之外的位置。这是一种危险的路径遍历漏洞(Path Traversal)。
🔍 一、漏洞原理解释
📂 正常情况(期望行为)
程序通常会将某个“受限目录”(如
/uploads/
或C:\data\userfiles\
)作为文件操作的根目录,限制用户只能在这个目录下上传、下载或访问文件:
>受限目录: /var/www/app/uploads/
>用户输入: report.pdf
>结果路径: /var/www/app/uploads/report.pdf ✅
🧨 漏洞发生(路径遍历)
攻击者输入包含特殊的路径控制符,如
../
(代表上一级目录):
>受限目录: /var/www/app/uploads/
>用户输入: ../../../../etc/passwd
>结果路径: /var/www/app/uploads/../../../../etc/passwd系统在解析后:
>解析后路径: /etc/passwd ❌(敏感系统文件)如果没有对
../
等元素进行清理或限制,攻击者就能越权访问系统文件、配置、脚本等敏感资源。
🔓 二、攻击影响举例
攻击目标 后果 /etc/passwd
获取系统用户列表(类 Unix 系统) config.php
泄露数据库账号密码 C:\Windows\win.ini
读取 Windows 配置 ../../app.db
访问 SQLite 数据库 ../../../.ssh/id_rsa
窃取 SSH 私钥(如果权限配置不当)
🛡️ 三、防护建议
绝对路径固定 + 路径拼接后校验
确保最终路径仍在合法目录中,例如使用realpath()
做校验:
>import os
>BASE_DIR = "/var/www/app/uploads" #受限目录
>user_input = "../../../../etc/passwd" #模拟用户输入路径
>target_path = os.path.realpath(os.path.join(BASE_DIR, user_input))
>#os.path.join(BASE_DIR,user_input)拼接用户输入到受限目录后,realpath解析实际路径
>if not target_path.startswith(BASE_DIR): #如果不在受限目录下则报错
raise Exception("非法路径访问")清洗用户输入
禁止
../
、\..
、..%2f
等变种对路径使用白名单或正则表达式限制
不要允许直接拼接路径
永远不要信任用户提供的文件名或路径片段。使用虚拟路径(数据库索引)
不直接暴露真实路径,所有文件由系统自动映射管理。
CWE-73: External Control of File Name or Path
描述:
文件名或路径的外部控制,该产品允许用户输入来控制或影响文件系统作中使用的路径或文件名。
CWE-552: Files or Directories Accessible to External Parties
描述:
外部方可访问的文件或目录,该产品使未经授权的行为者可以访问文件或目录,即使他们不应该可以访问。
2. CVE-2024-5557
漏洞描述:
存在将敏感信息插入日志文件漏洞,当攻击者有权访问控制器日志时,该漏洞可能会导致 SNMP 凭据泄露。
漏洞类型:
CWE-532: Insertion of Sensitive Information into Log File
描述:
将敏感信息插入日志文件,产品将敏感信息写入日志文件。