内网横向移动——SNMP信息收集

SNMP协议被称为信息的金矿,经常被错误配置,如果可以通过SNMP的安全认证,则可以获取非常丰富的设备信息,且低版本SNMP报文以明文传输,容易被抓包分析。本文主要介绍SNMP的工作原理,以及利用其进行内网横向移动的常见方法。

一、相关概念

(一) 基本介绍

SNMP (Simple Network Management Protocol) 即简单网络管理协议,默认端口为161/udp和162/udp,该协议通常用于网络监控应用 (PRTG、Zabbix、OpManager等),用以监控管理网络中运行的服务器、主机和设备。

SNMP版本分为v1、v2c和v3,基本区别:

  • SNMPv1:协议操作简单,信息传输效率低,仅使用团体字进行身份认证,通信过程中报文以明文传输,造成很大的安全隐患
  • SNMPv2c:在v1的基础上增加了一些协议操作,丰富了数据类型,提高了传输效率,但仍然存在安全问题
  • SNMPv3:增加了基于用户的安全认证和基于视图的访问控制模型,对通信报文进行加密处理,安全认证使用密码,对用户组或团体字实现不同访问权限控制

(二) 工作原理

SNMP管理结构中分为SNMP管理器、SNMP代理和被管理设备3个部分,每一个被管理设备运行着SNMP代理,SNMP代理相当于运行在被管理设备上的网络管理模块,负责定期收集本地设备信息。SNMP管理器通常集成在网络监控应用中,通过“读”操作,与SNMP代理之间采用轮询的方式搜集信息,同时如果设备出现异常,SNMP代理则通过自陷的方式向管理器发出通知,SNMP管理器也可以通过“写”操作修改设备配置信息,更新设备状态,然后将信息整理显示在图形化界面,从而对设备运行状态、性能进行监控和管理。

在这里插入图片描述

1.安全认证方式

SNMPv1和v2c版本中,SNMP管理器和代理之间使用团体字进行安全认证,分为“读”和“读/写”两种团体字,分别作为读取信息和写入信息的认证方式,“读”团体字缺省值为public,“读/写”团体字缺省值为private。SNMP代理收到请求数据包后,读取团体字和版本信息,认证成功则进行相应操作,认证失败则不作响应。通信报文以明文传输,通过抓包分析就可以得到团体字信息。

SNMPv3版本中,增加了基于用户的安全认证和基于视图的访问控制模型,安全认证使用密码,对用户组或团体字实现不同访问权限控制,也就是说身份认证是通过用户配置的密码,而团体字仅用于区分访问权限,且通信报文进行加密处理,极大提高了安全性能。

2.OID & MIB

OID (Object Identifier) 即对象标识符,以层次化树形结构标识信息节点,由ITU和ISO/IEC制定标准,广泛应用于SNMP、LDAP、X.509等多种协议。SNMP OID定义了所有可能与被管理设备控制和状态相关的数据对象类型,OID树形结构节点信息庞大复杂,一些分支结构集合映射为MIB (Management Information Base),即管理信息数据库,这样便于统一标准和个性化定制信息,而OID即用于标识MIB分层结构中的对象类型。

MIB有多种标准,对应于OID不同的树形结构分支,不同的标准定义了不同的数据对象类型,目前通用MIB中使用最广泛的是MIB-II {1.3.6.1.2.1},还有一些企业定制化的信息管理节点 {1.3.6.1.4.1},目前已有超过5000家企业向IANA申请OID信息节点 (具体参见 IANA),用作其产品信息管理,OID树形结构如下所示:
在这里插入图片描述
OID有多种表达形式,如下所示:

# ASN.1表达
{iso(1) identified-organization(3) dod(6) internet(1) private(4) enterprise(1)}
{1 3 6 1 4 1}

# OID-IRI表达
/ISO/Identified-Organization/6/1/4/1

# 点号表达
1.3.6.1.4.1

# 名称表达
iso.org.dod.internet.private.enterprises

# 缩略表达
SNMPv2-SMI::enterprises
SNMPv2-SMI::enterprises.77.1.1
SNMPv2-MIB::system

OID具体含义可参考:OID Repository,也可以下载MIB Browser等SNMP查询工具,常用的OID查询如下所示:

# 系统基本信息,包括操作系统类型、CPU架构、主机名等
{iso(1) identified-organization(3) dod(6) internet(1) mgmt(2) mib-2(1) system(1)}
1.3.6.1.2.1.1

# IP地址列表
{iso(1) identified-organization(3) dod(6) internet(1) mgmt(2) mib-2(1) ip(4) ipAddrTable(20) ipAddrEntry(1)}
1.3.6.1.2.1.4.20.1

# 路由表
{iso(1) identified-organization(3) dod(6) internet(1) mgmt(2) mib-2(1) ip(4) ipRouteTable(21) ipRouteEntry(1)}
1.3.6.1.2.1.4.21.1

# ARP地址表
{iso(1) identified-organization(3) dod(6) internet(1) mgmt(2) mib-2(1) ip(4) ipNetToMediaTable(22) ipNetToMediaEntry(1)}
1.3.6.1.2.1.4.22.1

# 系统进程列表
{iso(1) identified-organization(3) dod(6) internet(1) mgmt(2) mib-2(1) host(25) hrSWRun(4) hrSWRunTable(2) hrSWRunEntry(1) hrSWRunName(2)}
1.3.6.1.2.1.25.4.2.1.2

# 接口信息
{iso(1) identified-organization(3) dod(6) internet(1) mgmt(2) mib-2(1) interfaces(2) ifTable(2) ifEntry(1)}
1.3.6.1.2.1.2.2.1

# LAN Manager MIB II,Microsoft早期注册的MIB管理节点
# 可以通过其查询主机共享、会话、用户、登录等信息
{iso(1) identified-organization(3) dod(6) internet(1) private(4) enterprise(1) 77 lanmgr-2(1)}
1.3.6.1.4.1.77.1

二、工具使用

(一) SNMP扫描

SNMP代理监听端口为161/udp,管理器自陷消息监听端口为162/udp,由于使用不建立连接的UDP协议,因此采用nmap等普通的扫描工具扫描时,即便目标开放了端口,显示结果也会是"open|filtered",而且SNMP采用团体字等安全认证方式,认证失败不回复直接丢包,因此采用SNMP专用扫描工具效率更高。

onesixtyone

SNMP枚举工具,扫描时向设备发送SNMP信息请求包,认证通过的设备会返回系统信息,使用方法 onesixtyone [options] <host> <community>,如下所示:

onesixtyone 192.168.4.0/24 public

onesixtyone -c dict.txt -i hosts -o my.log -w 100
# -c: 团体字字典
# -i: 扫描主机文件
# -w: 发包间隔时间,单位ms,缺省值为10

(二) 信息获取

snmpwalk

通过向设备发送GETNEXT请求包获取指定OID分支节点下的所有对象,如果不指明查询的OID,则默认返回MIB-II下的所有信息,使用方法 snmpwalk [OPTIONS] AGENT [OID],如下所示:

# 查询Windows主机账户信息
snmpwalk -c public -v 2c 192.168.43.124 1.3.6.1.4.1.77.1.2.25.1.1
# -c: 指定团体字
# -v: 指定SNMP版本

# 查询系统信息
snmpwalk -m all -c public -v 2c 192.168.43.124 system
# -m: 指定加载的MIB,这样可以使用OID最后一级名称代替具体表达进行查询
# 具体可加载的MIB可参见Kali目录 /usr/share/snmp/mibs/
snmp-check

可一次性查询设备所有信息,包括系统信息、用户信息、网卡信息、接口信息、运行进程、网络连接情况、监听端口、开启服务、硬盘信息、安装软件等,查询结果简单易懂,但是不能指定OID查询,使用方法 snmp-check [options] <host>,如下所示:

snmp-check -c public -v 2c 192.168.43.124
# -c: 指定团体字
# -v: 指定SNMP版本

# 检查是否可写,如果可写则返回查询信息
snmp-check -c public -v 2c 192.168.43.124 -w

⚠️注意: snmp-check和snmpcheck是两种工具,不要混淆

snmptranslate

将SNMP OID在数字和文字描述之间进行转换,即通过OID查询名称,或通过名称查询OID,使用方法 snmptranslate [OPTIONS] OID [OID],如下所示:

# 查询system对应的OID
snmptranslate -m all -On -IR system
# -m: 加载MIB
# -On: OID查询结果以数字点号形式输出
# -IR: OID查询输入随意性,这样可以只通过OID最后一级的名字进行查询,否则要输入全部名称

# 完整输出system之后的树形节点
snmptranslate -m all -Tp -OS -IR system
# -Tp: 输出树形符号表
# -OS: 输出MIB模块和最后一个元素

# 反查OID的名称
snmptranslate -m all -Of 1.3.6.1.2.1.1
# -Of: 输出完整OID,默认以简略形式输出
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值