# 161,162,10161,10162/udp - Pentesting SNMP

<details>

<summary><strong>从零开始学习 AWS 黑客技术，成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE（HackTricks AWS 红队专家）</strong></a><strong>！</strong></summary>

支持 HackTricks 的其他方式：

* 如果您想看到您的**公司在 HackTricks 中做广告**或**下载 PDF 版的 HackTricks**，请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
* 探索[**PEASS 家族**](https://opensea.io/collection/the-peass-family)，我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享您的黑客技巧。

</details>

<figure><img src="/files/GHj1ZZKHZeM4ad1xvzNu" alt=""><figcaption></figcaption></figure>

如果您对**黑客职业**感兴趣并想要黑掉不可能黑掉的东西 - **我们正在招聘！**（需要流利的波兰语书面和口语表达能力）。

{% 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文件以基于ASCII文本格式的`抽象语法表示一（ASN.1）`编写。**MIB不包含数据**，但它们解释了**在哪里找到哪些信息**，以及其外观是什么，返回特定OID的值，或使用了哪种数据类型。

### OIDs

\*\*对象标识符（OIDs）**起着至关重要的作用。这些唯一标识符旨在管理**管理信息库（MIB）\*\*中的对象。

MIB对象ID或OID的最高级别分配给各种标准制定组织。在这些顶级中，建立了全球管理实践和标准的框架。

此外，供应商被授予建立私有分支的自由。在这些分支中，他们有**自主权包括与其产品线相关的受管理对象**。这个系统确保了对跨不同供应商和标准的各种对象进行识别和管理的结构化和有组织的方法。

![](/files/RgtOSFSY9s8k0NkCLUFO)

您可以从这里通过网络**导航**到**OID树**：<http://www.oid-info.com/cgi-bin/display?tree=#focus>，或者通过访问<http://oid-info.com/get/1.3.6.1.2.1.1> **查看OID的含义**（如`1.3.6.1.2.1.1`）。\
有一些**众所周知的OID**，如[1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1)，引用了MIB-2定义的简单网络管理协议（SNMP）变量。从**从这个OID挂起的OID**中，您可以获取一些有趣的主机数据（系统数据、网络数据、进程数据...）

### **OID示例**

[**这里的示例**](https://www.netadmintools.com/snmp-mib-and-oids/):

**`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中，如果使用**错误的**社区字符串，服务器将不会**响应**。因此，如果它响应了，就是使用了**有效的社区字符串**。

## 端口

[来自维基百科](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol):

* SNMP代理程序在UDP端口**161**上接收请求。
* 管理器在端口**162**上接收通知（[陷阱](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol#Trap)和[InformRequests](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol#InformRequest)）。
* 当与[传输层安全性](https://en.wikipedia.org/wiki/Transport_Layer_Security)或[数据报传输层安全性](https://en.wikipedia.org/wiki/Datagram_Transport_Layer_Security)一起使用时，请求将在端口**10161**上接收，通知将发送到端口**10162**。

## 暴力破解社区字符串（v1和v2c）

要**猜测社区字符串**，您可以执行字典攻击。查看[这里不同的方法来执行针对SNMP的暴力攻击](/generic-methodologies-and-resources/brute-force.md#snmp)。一个经常使用的社区字符串是`public`。

## 枚举SNMP

建议安装以下内容以查看从设备收集的**每个OID的含义**：

```bash
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**来访问数据：

```bash
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），可以使用以下命令更详细地枚举系统信息：

```bash
snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull
```

**SNMP** 包含许多关于主机的信息，您可能会发现感兴趣的内容包括：**网络接口**（IPv4 和 **IPv6** 地址）、用户名、正常运行时间、服务器/操作系统版本以及正在运行的 **进程**（可能包含密码）。

### **危险设置**

在网络管理领域，某些配置和参数对于确保全面监控和控制至关重要。

### 访问设置

两个主要设置允许访问完整的 OID 树，这是网络管理的关键组成部分：

1. 设置 **`rwuser noauth`** 允许无需身份验证即可完全访问 OID 树。这个设置很直接，允许无限制访问。
2. 为了更具体的控制，可以使用：

* **`rwcommunity`** 用于 **IPv4** 地址，以及
* **`rwcommunity6`** 用于 **IPv6** 地址。

这两个命令都需要一个 **community 字符串** 和相关的 IP 地址，无论请求的来源如何，都提供完全访问权限。

### 用于 Microsoft Windows 的 SNMP 参数

一系列 **管理信息库（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="/pages/nmCyhaLY12YHgt26Jw9R" %}
[Cisco SNMP](/network-services-pentesting/pentesting-snmp/cisco-snmp.md)
{% endcontent-ref %}

## 从 SNMP 到 RCE

如果您拥有允许您在 SNMP 服务中 **编写值** 的 **字符串**，您可能可以滥用它来 **执行命令**：

{% content-ref url="/pages/g4u00HH4fuByx3Ux7yGr" %}
[SNMP RCE](/network-services-pentesting/pentesting-snmp/snmp-rce.md)
{% endcontent-ref %}

## **Massive SNMP**

[Braa ](https://github.com/mteg/braa)是一个大规模 SNMP 扫描器。这样的工具的预期用途当然是进行 SNMP 查询 - 但与 net-snmp 中的 snmpwalk 不同，它能够同时查询数十甚至数百个主机，并在单个进程中执行。因此，它消耗非常少的系统资源，并且扫描非常快速。

Braa 实现了自己的 SNMP 栈，因此不需要像 net-snmp 这样的任何 SNMP 库。

**语法：** braa \[Community-string]@\[SNMP 服务器的 IP]:\[iso id]

```bash
braa ignite123@192.168.1.125:.1.3.6.*
```

### **设备**

该过程始于从每个文件中提取**sysDesc MIB数据** (1.3.6.1.2.1.1.1.0) 以识别设备。这是通过使用**grep命令**来完成的：

```bash
grep ".1.3.6.1.2.1.1.1.0" *.snmp
```

### **识别私有字符串**

一个关键的步骤是识别组织使用的**私有社区字符串**，特别是在Cisco IOS路由器上。该字符串使得可以从路由器中提取**运行配置**。通常通过分析SNMP Trap数据中包含"trap"这个词来识别，可以使用**grep命令**：

```bash
grep -i "trap" *.snmp
```

### **用户名/密码**

MIB表中存储的日志被检查以查找**登录失败尝试**，这可能会意外地包括将密码输入为用户名的情况。搜索关键字如\_fail\_、\_failed\_或\_login\_以找到有价值的数据：

```bash
grep -i "login\|fail" *.snmp
```

### **电子邮件**

最后，为了从数据中提取**电子邮件地址**，使用带有正则表达式的**grep命令**，重点关注与电子邮件格式匹配的模式：

```bash
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp
```

## 修改 SNMP 值

您可以使用 ***NetScanTools*** 来**修改值**。您需要知道**私有字符串**才能这样做。

## 欺骗

如果有一个 ACL 只允许一些 IP 查询 SMNP 服务，您可以在 UDP 数据包中欺骗其中一个地址并嗅探流量。

## 检查 SNMP 配置文件

* snmp.conf
* snmpd.conf
* snmp-config.xml

<figure><img src="/files/GHj1ZZKHZeM4ad1xvzNu" alt=""><figcaption></figcaption></figure>

如果您对**黑客职业**感兴趣并想要黑掉不可能黑掉的东西 - **我们正在招聘！**（需要流利的波兰语书面和口语表达能力）。

{% 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


```

<details>

<summary><strong>从零开始学习AWS黑客技术，成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE（HackTricks AWS Red Team Expert）</strong></a><strong>！</strong></summary>

其他支持HackTricks的方式：

* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**，请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family)，我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。

</details>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://hacktricks.xsx.tw/network-services-pentesting/pentesting-snmp.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
