.. | ||
cisco-snmp.md | ||
README.md | ||
snmp-rce.md |
161,162,10161,10162/udp - Pentesting SNMP
{% hint style="success" %}
学习与实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE)
学习与实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 关注 我们的 Twitter 🐦 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 分享黑客技巧。
如果你对 黑客职业 感兴趣并想要攻克不可攻克的目标 - 我们正在招聘! (要求流利的波兰语书写和口语能力).
{% embed url="https://www.stmcyber.com/careers" %}
基本信息
SNMP - 简单网络管理协议 是一种用于监控网络中不同设备(如路由器、交换机、打印机、物联网设备等)的协议。
PORT STATE SERVICE REASON VERSION
161/udp open snmp udp-response ttl 244 ciscoSystems SNMPv3 server (public)
{% hint style="info" %} SNMP 还使用端口 162/UDP 进行 traps。这些是 从 SNMP 服务器发送到客户端的数据包,而无需明确请求。 {% endhint %}
MIB
为了确保 SNMP 访问在不同制造商和不同客户端-服务器组合之间正常工作,创建了 管理信息库 (MIB)。MIB 是 存储设备信息的独立格式。MIB 是一个 文本 文件,其中列出了设备的所有可查询 SNMP 对象,以 标准化 的树形层次结构呈现。它至少包含一个 对象标识符
(OID
),该标识符除了必要的 唯一地址 和 名称 外,还提供有关类型、访问权限和相应对象描述的信息。
MIB 文件采用 抽象语法标记一
(ASN.1
) 基于 ASCII 文本格式编写。MIB 不包含数据,但它解释了 在哪里找到哪些信息 以及它的外观,返回特定 OID 的值,或使用了哪种数据类型。
OIDs
对象标识符 (OIDs) 起着至关重要的作用。这些唯一标识符旨在管理 管理信息库 (MIB) 中的对象。
MIB 对象 ID 或 OID 的最高级别分配给不同的标准制定组织。在这些顶级中,建立了全球管理实践和标准的框架。
此外,供应商被授予建立私有分支的自由。在这些分支中,他们有 自主权来包含与其自身产品线相关的管理对象。该系统确保在不同供应商和标准之间有一个结构化和有组织的方法来识别和管理各种对象。
您可以通过此网站 浏览 OID 树: http://www.oid-info.com/cgi-bin/display?tree=#focus 或 查看 OID 的含义(如 1.3.6.1.2.1.1
)访问 http://oid-info.com/get/1.3.6.1.2.1.1。
有一些 众所周知的 OID,例如 1.3.6.1.2.1 中的 OID,引用了 MIB-2 定义的简单网络管理协议 (SNMP) 变量。从 此 OID 的待处理 OID 中,您可以获取一些有趣的主机数据(系统数据、网络数据、进程数据...)
OID 示例
1 . 3 . 6 . 1 . 4 . 1 . 1452 . 1 . 2 . 5 . 1 . 3. 21 . 1 . 4 . 7
以下是该地址的分解。
- 1 – 这称为 ISO,表明这是一个 OID。这就是所有 OID 以“1”开头的原因。
- 3 – 这称为 ORG,用于指定构建设备的组织。
- 6 – 这是 dod 或国防部,它是最早建立互联网的组织。
- 1 – 这是互联网的值,表示所有通信将通过互联网进行。
- 4 – 该值确定该设备是由私营组织制造的,而不是政府组织。
- 1 – 该值表示该设备是由企业或商业实体制造的。
这前六个值对于所有设备来说往往是相同的,它们提供了关于设备的基本信息。这个数字序列对于所有 OID 来说都是相同的,除非设备是由政府制造的。
接下来是下一组数字。
- 1452 – 给出制造该设备的组织名称。
- 1 – 解释设备的类型。在这种情况下,它是一个闹钟。
- 2 – 确定该设备是一个远程终端单元。
其余的值提供有关设备的具体信息。
- 5 – 表示一个离散的报警点。
- 1 – 设备中的特定点
- 3 – 端口
- 21 – 端口的地址
- 1 – 端口的显示
- 4 – 点号
- 7 – 点的状态
SNMP 版本
SNMP 有两个重要版本:
- SNMPv1:主要版本,仍然是最常用的,身份验证基于字符串(社区字符串),以 明文 形式传输(所有信息以明文形式传输)。版本 2 和 2c 也以 明文 发送 流量,并使用 社区字符串作为身份验证。
- SNMPv3:使用更好的 身份验证 形式,信息以 加密 形式传输(可以进行 字典攻击,但找到正确的凭据比在 SNMPv1 和 v2 中要困难得多)。
社区字符串
如前所述,要访问保存在 MIB 上的信息,您需要知道版本 1 和 2/2c 的社区字符串,以及版本 3 的凭据。
有 2 种类型的社区字符串:
public
主要是 只读 功能private
读/写 一般
请注意,OID 的可写性取决于使用的社区字符串,因此 即使 您发现“public”正在使用,您也可能能够 写入某些值。 另外,可能存在 始终为“只读”的对象。
如果您尝试 写入 一个对象,将收到 noSuchName
或 readOnly
错误**.**
在版本 1 和 2/2c 中,如果您使用 错误 的社区字符串,服务器将不会 响应。因此,如果它响应,则使用了 有效的社区字符串。
端口
- SNMP 代理在 UDP 端口 161 上接收请求。
- 管理器在端口 162 上接收通知(Traps 和 InformRequests)。
- 当与 传输层安全性 或 数据报传输层安全性 一起使用时,请求在端口 10161 上接收,通知发送到端口 10162。
暴力破解社区字符串 (v1 和 v2c)
要 猜测社区字符串,您可以执行字典攻击。查看 这里不同的方法以对 SNMP 执行暴力破解攻击。一个常用的社区字符串是 public
。
枚举 SNMP
建议安装以下内容,以查看从设备收集的 每个 OID 的含义:
apt-get install snmp-mibs-downloader
download-mibs
# Finally comment the line saying "mibs :" in /etc/snmp/snmp.conf
sudo vi /etc/snmp/snmp.conf
如果您知道有效的社区字符串,您可以使用 SNMPWalk 或 SNMP-Check 访问数据:
snmpbulkwalk -c [COMM_STRING] -v [VERSION] [IP] . #Don't forget the final dot
snmpbulkwalk -c public -v2c 10.10.11.136 .
snmpwalk -v [VERSION_SNMP] -c [COMM_STRING] [DIR_IP]
snmpwalk -v [VERSION_SNMP] -c [COMM_STRING] [DIR_IP] 1.3.6.1.2.1.4.34.1.3 #Get IPv6, needed dec2hex
snmpwalk -v [VERSION_SNMP] -c [COMM_STRING] [DIR_IP] NET-SNMP-EXTEND-MIB::nsExtendObjects #get extended
snmpwalk -v [VERSION_SNMP] -c [COMM_STRING] [DIR_IP] .1 #Enum all
snmp-check [DIR_IP] -p [PORT] -c [COMM_STRING]
nmap --script "snmp* and not snmp-brute" <target>
braa <community string>@<IP>:.1.3.6.* #Bruteforce specific OID
感谢扩展查询(download-mibs),可以通过以下命令枚举更多关于系统的信息:
snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull
SNMP 有很多关于主机的信息,您可能会发现有趣的内容包括:网络接口(IPv4 和 IPv6 地址)、用户名、运行时间、服务器/操作系统版本,以及 进程
运行中(可能包含密码)....
危险设置
在网络管理领域,某些配置和参数是确保全面监控和控制的关键。
访问设置
两个主要设置使访问 完整的 OID 树 成为可能,这是网络管理中的一个关键组成部分:
rwuser noauth
被设置为允许在不需要身份验证的情况下完全访问 OID 树。此设置简单明了,允许无限制访问。- 为了更具体的控制,可以使用以下方式授予访问权限:
rwcommunity
用于 IPv4 地址,和rwcommunity6
用于 IPv6 地址。
这两个命令都需要一个 社区字符串 和相关的 IP 地址,无论请求的来源如何,都提供完全访问权限。
SNMP 参数用于 Microsoft Windows
一系列 管理信息库 (MIB) 值 被用于通过 SNMP 监控 Windows 系统的各个方面:
- 系统进程:通过
1.3.6.1.2.1.25.1.6.0
访问,此参数允许监控系统内的活动进程。 - 运行程序:
1.3.6.1.2.1.25.4.2.1.2
值用于跟踪当前运行的程序。 - 进程路径:要确定进程的运行位置,使用
1.3.6.1.2.1.25.4.2.1.4
MIB 值。 - 存储单元:通过
1.3.6.1.2.1.25.2.3.1.4
监控存储单元。 - 软件名称:要识别系统上安装的软件,使用
1.3.6.1.2.1.25.6.3.1.2
。 - 用户账户:
1.3.6.1.4.1.77.1.2.25
值允许跟踪用户账户。 - TCP 本地端口:最后,
1.3.6.1.2.1.6.13.1.3
被指定用于监控 TCP 本地端口,提供对活动网络连接的洞察。
Cisco
如果您使用 Cisco 设备,请查看此页面:
{% content-ref url="cisco-snmp.md" %} cisco-snmp.md {% endcontent-ref %}
从 SNMP 到 RCE
如果您拥有允许您 写入值 的 字符串,您可能能够利用它来 执行命令:
{% content-ref url="snmp-rce.md" %} snmp-rce.md {% endcontent-ref %}
大规模 SNMP
Braa 是一个大规模 SNMP 扫描器。此类工具的预期用途当然是进行 SNMP 查询——但与来自 net-snmp 的 snmpwalk 不同,它能够同时查询数十或数百个主机,并且在一个进程中。因此,它消耗的系统资源非常少,并且扫描速度非常快。
Braa 实现了自己的 SNMP 栈,因此不需要任何 SNMP 库,如 net-snmp。
语法: braa [社区字符串]@[[SNMP 服务器的 IP]:[iso id]
braa ignite123@192.168.1.125:.1.3.6.*
这可以提取大量您无法手动处理的信息。
所以,让我们寻找最有趣的信息(来自 https://blog.rapid7.com/2016/05/05/snmp-data-harvesting-during-penetration-testing/):
设备
该过程从每个文件中提取 sysDesc MIB 数据 (1.3.6.1.2.1.1.1.0) 开始,以识别设备。这是通过使用 grep 命令 完成的:
grep ".1.3.6.1.2.1.1.1.0" *.snmp
识别私有字符串
一个关键步骤是识别组织使用的 私有社区字符串,特别是在 Cisco IOS 路由器上。这个字符串使得从路由器中提取 运行配置 成为可能。识别通常依赖于分析 SNMP Trap 数据中包含 "trap" 的内容,使用 grep 命令:
grep -i "trap" *.snmp
用户名/密码
存储在 MIB 表中的日志会被检查以寻找 失败的登录尝试,这些尝试可能意外地将输入的密码包含为用户名。搜索关键词如 fail、failed 或 login 以找到有价值的数据:
grep -i "login\|fail" *.snmp
Emails
最后,为了从数据中提取电子邮件地址,使用带有正则表达式的grep命令,重点关注与电子邮件格式匹配的模式:
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp
修改 SNMP 值
您可以使用 NetScanTools 来 修改值。您需要知道 私有字符串 才能做到这一点。
欺骗
如果有一个 ACL 只允许某些 IP 查询 SNMP 服务,您可以在 UDP 数据包中伪造其中一个地址并嗅探流量。
检查 SNMP 配置文件
- snmp.conf
- snmpd.conf
- snmp-config.xml
如果您对 黑客职业 感兴趣并想要破解不可破解的 - 我们正在招聘! (需要流利的波兰语书写和口语能力)。
{% embed url="https://www.stmcyber.com/careers" %}
HackTricks 自动命令
Protocol_Name: SNMP #Protocol Abbreviation if there is one.
Port_Number: 161 #Comma separated if there is more than one.
Protocol_Description: Simple Network Managment Protocol #Protocol Abbreviation Spelled out
Entry_1:
Name: Notes
Description: Notes for SNMP
Note: |
SNMP - Simple Network Management Protocol is a protocol used to monitor different devices in the network (like routers, switches, printers, IoTs...).
https://book.hacktricks.xyz/pentesting/pentesting-snmp
Entry_2:
Name: SNMP Check
Description: Enumerate SNMP
Command: snmp-check {IP}
Entry_3:
Name: OneSixtyOne
Description: Crack SNMP passwords
Command: onesixtyone -c /usr/share/seclists/Discovery/SNMP/common-snmp-community-strings-onesixtyone.txt {IP} -w 100
Entry_4:
Name: Nmap
Description: Nmap snmp (no brute)
Command: nmap --script "snmp* and not snmp-brute" {IP}
Entry_5:
Name: Hydra Brute Force
Description: Need Nothing
Command: hydra -P {Big_Passwordlist} -v {IP} snmp
{% hint style="success" %}
学习与实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE)
学习与实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。