• 内网横向移动——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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    二、工具使用

    (一) SNMP扫描

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

    onesixtyone

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

    onesixtyone 192.168.4.0/24 public
    
    onesixtyone -c dict.txt -i hosts -o my.log -w 100
    # -c: 团体字字典
    # -i: 扫描主机文件
    # -w: 发包间隔时间,单位ms,缺省值为10
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    (二) 信息获取

    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/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    snmp-check

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

    snmp-check -c public -v 2c 192.168.43.124
    # -c: 指定团体字
    # -v: 指定SNMP版本
    
    # 检查是否可写,如果可写则返回查询信息
    snmp-check -c public -v 2c 192.168.43.124 -w
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    ⚠️注意: 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,默认以简略形式输出
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
  • 相关阅读:
    k8s 实战篇 - 镜像打包部署 - springboot&mysql - 3
    【Qt6】QWidgetAction 的使用
    常识性概念知识图谱
    nacos配置启动
    软件测试面试题:您以往的工作中是否曾开展过测试用例的评审工作?如果有,请描述测试用例评审的过程和评审的内容?
    Spring核心问题回顾1:ioc容器创建的大致过程、bean的生命周期、解决循环依赖为什么需要三级缓存
    递归与回溯法
    python excel接口自动化测试框架
    G1垃圾收集器
    Spring之IoC
  • 原文地址:https://blog.csdn.net/Captain_RB/article/details/126406411