SNMP 枚举与凭据收集
SNMP 是运行在 161/udp 上的网络管理协议,早期版本访问时只需要一个 community string,作用相当于明文口令。TCP 面很窄的主机(例如只开放 22/80)往往在 UDP 侧藏着 SNMP,因此 UDP 扫描是侦察阶段不可省略的一步。
整体流程是:先用 onesixtyone 爆破 community,再用 snmpwalk 全量拉取 MIB 数据。系统描述、进程命令行、联系人字段里经常直接存有可登录的凭据。
仅限授权环境
SNMP 爆破与全量枚举会产生明显查询流量,只能在授权测试或靶场环境中执行。
判断前提:补一轮 UDP 扫描
TCP 端口很少时,先按 端口扫描实战流程:RustScan 与 Nmap 完成常规扫描,再补 UDP:
nmap -sU --top-ports 50 <target>
常能发现 161/udp 上开放的 SNMP。常用工具:
| 工具 | 用途 |
|---|---|
| onesixtyone | community 爆破,速度快 |
| snmpwalk | 全量遍历 MIB 树 |
| snmp-check | 一体化枚举与信息提取 |
方法 A:community 爆破
onesixtyone -c /usr/share/seclists/Discovery/SNMP/common-snmp-community-strings-onesixtyone.txt <target>
public 是最常见的 community,命中后即可用它进行读取。
方法 B:snmpwalk 全量拉取
snmpwalk -v 2c -c public <target>
输出量大,建议重定向到文件后按 OID 关键字筛选。
高价值信息对照
| OID / 字段 | 价值 |
|---|---|
| sysDescr / sysName | 系统版本与主机名 |
| sysContact | 联系人字段常存 Name:password 形态凭据,注意大小写归一后再尝试 |
| hrSWRunName / hrSWRunParameters | 进程命令行直接暴露 --password xxx、service --user u --password p 等参数 |
| hrSWInstalled | 安装包列表,判断软件版本与攻击面 |
| 网络接口 | 发现第二块网卡与内网 IP,指明横向方向 |
复核要点
- 拿到候选凭据后,对 SSH 等已开放服务逐一验证。
- 命令行中的口令注意大小写归一与变体。
- 记录内网网卡信息,作为下一步内网探测的输入。
防御建议
- 修改默认 community string,避免 public 等弱口令直接可用。
- 迁移到 SNMPv3,启用认证与加密。
- 用 ACL 限制可访问 SNMP 的源地址。
- 敏感参数不进入命令行,避免被进程列表类信息泄露。
相关知识
- Nmap 服务识别与脚本扫描 —
-sUUDP 扫描参数详解