# 161,162,10161,10162/udp - Pentesting SNMP
Lernen Sie das Hacken von AWS von Null auf Heldenniveau mit htARTE (HackTricks AWS Red Team Expert)!
Andere Möglichkeiten, HackTricks zu unterstützen:
* Wenn Sie Ihr **Unternehmen in HackTricks bewerben möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **GitHub-Repositories** senden.
\
**Bug-Bounty-Tipp**: **Registrieren** Sie sich für **Intigriti**, eine Premium-**Bug-Bounty-Plattform, die von Hackern für Hacker** entwickelt wurde! Treten Sie uns noch heute unter [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) bei und verdienen Sie Prämien von bis zu **100.000 $**!
{% embed url="https://go.intigriti.com/hacktricks" %}
## Grundlegende Informationen
**SNMP - Simple Network Management Protocol** ist ein Protokoll, das zur Überwachung verschiedener Geräte im Netzwerk verwendet wird (wie Router, Switches, Drucker, IoT-Geräte...).
```
PORT STATE SERVICE REASON VERSION
161/udp open snmp udp-response ttl 244 ciscoSystems SNMPv3 server (public)
```
{% hint style="info" %}
SNMP verwendet auch den Port **162/UDP** für **Traps**. Dabei handelt es sich um Daten **Pakete, die vom SNMP-Server an den Client gesendet werden, ohne explizit angefordert zu werden**.
{% endhint %}
### MIB
Um sicherzustellen, dass der SNMP-Zugriff über verschiedene Hersteller und mit unterschiedlichen Client-Server-Kombinationen funktioniert, wurde die **Management Information Base (MIB)** erstellt. MIB ist ein **unabhängiges Format zur Speicherung von Geräteinformationen**. Eine MIB ist eine **Textdatei**, in der alle abfragbaren **SNMP-Objekte** eines Geräts in einer **standardisierten** Baumhierarchie aufgelistet sind. Sie enthält mindestens eine `Object Identifier` (`OID`), die neben der erforderlichen **eindeutigen Adresse** und einem **Namen** auch Informationen über den Typ, die Zugriffsrechte und eine Beschreibung des jeweiligen Objekts liefert.\
MIB-Dateien sind im ASCII-Textformat basierend auf der `Abstract Syntax Notation One` (`ASN.1`) geschrieben. Die **MIBs enthalten keine Daten**, sondern erklären **wo welche Informationen zu finden sind** und wie sie aussehen, welche Rückgabewerte für die spezifische OID zurückgegeben werden oder welcher Datentyp verwendet wird.
### OIDs
**Object Identifiers (OIDs)** spielen eine entscheidende Rolle. Diese eindeutigen Bezeichner sind dazu bestimmt, Objekte innerhalb einer **Management Information Base (MIB)** zu verwalten.
Die höchsten Ebenen der MIB-Objekt-IDs oder OIDs werden verschiedenen Standardisierungsorganisationen zugewiesen. In diesen obersten Ebenen wird der Rahmen für globale Managementpraktiken und -standards festgelegt.
Darüber hinaus haben Hersteller die Freiheit, private Zweige zu erstellen. Innerhalb dieser Zweige haben sie die **Autonomie, verwaltete Objekte einzuschließen, die für ihre eigenen Produktlinien relevant sind**. Dieses System stellt sicher, dass es eine strukturierte und organisierte Methode zur Identifizierung und Verwaltung einer Vielzahl von Objekten über verschiedene Hersteller und Standards hinweg gibt.
![](../../.gitbook/assets/snmp\_oid\_mib\_tree.png)
Sie können durch einen **OID-Baum** hier navigieren: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) oder **sehen, was eine OID bedeutet** (wie `1.3.6.1.2.1.1`) indem Sie [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1) aufrufen.\
Es gibt einige **bekannte OIDs** wie diejenigen innerhalb von [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1), die auf von MIB-2 definierte Simple Network Management Protocol (SNMP) Variablen verweisen. Und von den **von dieser abhängigen OIDs** können Sie einige interessante Host-Daten abrufen (Systemdaten, Netzwerkdaten, Prozessdaten...).
### **OID-Beispiel**
[**Beispiel von hier**](https://www.netadmintools.com/snmp-mib-and-oids/):
**`1 . 3 . 6 . 1 . 4 . 1 . 1452 . 1 . 2 . 5 . 1 . 3. 21 . 1 . 4 . 7`**
Hier ist eine Aufschlüsselung dieser Adresse.
* 1 - dies wird als ISO bezeichnet und zeigt an, dass es sich um eine OID handelt. Deshalb beginnen alle OIDs mit "1".
* 3 - dies wird als ORG bezeichnet und wird verwendet, um die Organisation anzugeben, die das Gerät gebaut hat.
* 6 - dies ist das dod oder das Department of Defense, die Organisation, die das Internet zuerst etabliert hat.
* 1 - dies ist der Wert des Internets, um anzuzeigen, dass alle Kommunikation über das Internet erfolgen wird.
* 4 - dieser Wert bestimmt, dass dieses Gerät von einer privaten Organisation und nicht von einer Regierungsorganisation hergestellt wird.
* 1 - dieser Wert zeigt an, dass das Gerät von einem Unternehmen oder einer Geschäftseinheit hergestellt wird.
Diese ersten sechs Werte sind für alle Geräte tendenziell gleich und geben grundlegende Informationen über sie. Diese Zahlenfolge ist bei allen OIDs gleich, außer wenn das Gerät von der Regierung hergestellt wird.
Gehen wir zu den nächsten Zahlen über.
* 1452 - gibt den Namen der Organisation an, die dieses Gerät hergestellt hat.
* 1 - erklärt den Gerätetyp. In diesem Fall handelt es sich um einen Wecker.
* 2 - bestimmt, dass dieses Gerät eine Remote-Terminal-Einheit ist.
Die restlichen Werte geben spezifische Informationen über das Gerät.
* 5 - kennzeichnet einen diskreten Alarmpunkt.
* 1 - spezifischer Punkt im Gerät
* 3 - Port
* 21 - Adresse des Ports
* 1 - Anzeige für den Port
* 4 - Punktnummer
* 7 - Zustand des Punktes
### SNMP-Versionen
Es gibt 2 wichtige Versionen von SNMP:
* **SNMPv1**: Die Hauptversion, sie ist immer noch die häufigste, die **Authentifizierung basiert auf einem String** (Community-String), der im **Klartext** übertragen wird (alle Informationen werden im Klartext übertragen). **Version 2 und 2c** senden den **Datenverkehr ebenfalls im Klartext** und verwenden einen **Community-String zur Authentifizierung**.
* **SNMPv3**: Verwendet eine bessere **Authentifizierungsform** und die Informationen werden **verschlüsselt** übertragen (ein **Wörterbuchangriff** könnte durchgeführt werden, aber es wäre viel schwieriger, die richtigen Anmeldeinformationen zu finden als bei SNMPv1 und v2).
### Community-Strings
Wie bereits erwähnt, **müssen Sie für den Zugriff auf die in der MIB gespeicherten Informationen den Community-String in den Versionen 1 und 2/2c und die Anmeldeinformationen in Version 3 kennen.**\
Es gibt **2 Arten von Community-Strings**:
* **`public`** hauptsächlich **nur-Lese-Funktionen**
* **`private`** **Lese-/Schreibzugriff** im Allgemeinen
Beachten Sie, dass **die Schreibbarkeit einer OID vom verwendeten Community-String abhängt**, sodass Sie möglicherweise auch bei Verwendung von "**public**" einige Werte schreiben können. Es können auch Objekte vorhanden sein, die immer "nur-Lesen" sind.\
Wenn Sie versuchen, ein Objekt zu schreiben, wird ein **`noSuchName`- oder `readOnly`-Fehler** empfangen.
In den Versionen 1 und 2/2c antwortet der Server nicht, wenn ein **falscher** Community-String verwendet wird. Wenn also eine Antwort erfolgt, wurde ein **gültiger Community-String verwendet**.
## Ports
[Aus Wikipedia](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol#:~:text=All%20SNMP%20messages%20are%20transported,port%20161%20in%20the%20agent.):
* Der SNMP-Agent empfängt Anfragen auf UDP-Port **161**.
* Der Manager empfängt Benachrichtigungen ([Traps](https://en.wikipedia.org/wiki/Simple\_Network\_Management\_Protocol#Trap) und [InformRequests](https://en.wikipedia.org/wiki/Simple\_Network\_Management\_Protocol#InformRequest)) auf Port **162**.
* Bei Verwendung von [Transport Layer Security](https://en.wikipedia.org/wiki/Transport\_Layer\_Security) oder [Datagram Transport Layer Security](https://en.wikipedia.org/wiki/Datagram\_Transport\_Layer\_Security) werden Anfragen auf Port **10161** empfangen und Benachrichtigungen an Port **10162** gesendet.
## Brute-Force Community-String (v1 und v2c)
Um den Community-String zu **erraten**, können Sie einen Wörterbuchangriff durchführen. Überprüfen Sie [hier verschiedene Möglichkeiten, einen Brute-Force-Angriff gegen SNMP durchzuführen](../../generic-methodologies-and-resources/brute-force.md#snmp). Ein häufig verwendeter Community-String ist `public`.
## SNMP-Aufzählung
Es wird empfohlen, die folgenden Tools zu installieren, um zu sehen, was jede gesammelte OID vom Gerät bedeutet:
```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
```
Wenn Sie einen gültigen Community-String kennen, können Sie auf die Daten mit **SNMPWalk** oder **SNMP-Check** zugreifen:
```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"
braa @:.1.3.6.* #Bruteforce specific OID
```
Dank erweiterter Abfragen (download-mibs) ist es möglich, noch mehr Informationen über das System mit dem folgenden Befehl aufzulisten:
```bash
snmpwalk -v X -c public NET-SNMP-EXTEND-MIB::nsExtendOutputFull
```
**SNMP** enthält viele Informationen über den Host, und interessante Dinge, die Sie finden könnten, sind: **Netzwerkschnittstellen** (IPv4- und **IPv6**-Adressen), Benutzernamen, Betriebszeit, Server/OS-Version und **laufende** Prozesse (können Passwörter enthalten)....
### **Gefährliche Einstellungen**
Im Bereich des Netzwerkmanagements sind bestimmte Konfigurationen und Parameter entscheidend für eine umfassende Überwachung und Kontrolle.
### Zugriffseinstellungen
Zwei Hauptkonfigurationen ermöglichen den Zugriff auf den **vollen OID-Baum**, der ein wesentlicher Bestandteil des Netzwerkmanagements ist:
1. **`rwuser noauth`** ist so eingestellt, dass vollständiger Zugriff auf den OID-Baum ohne Authentifizierung möglich ist. Diese Einstellung ermöglicht uneingeschränkten Zugriff.
2. Für eine spezifischere Kontrolle kann der Zugriff gewährt werden mit:
- **`rwcommunity`** für **IPv4**-Adressen und
- **`rwcommunity6`** für **IPv6**-Adressen.
Beide Befehle erfordern eine **Community-String** und die entsprechende IP-Adresse und bieten uneingeschränkten Zugriff unabhängig von der Herkunft der Anfrage.
### SNMP-Parameter für Microsoft Windows
Eine Reihe von **Management Information Base (MIB)-Werten** wird verwendet, um verschiedene Aspekte eines Windows-Systems über SNMP zu überwachen:
- **Systemprozesse**: Über den Wert `1.3.6.1.2.1.25.1.6.0` können aktive Prozesse im System überwacht werden.
- **Laufende Programme**: Der Wert `1.3.6.1.2.1.25.4.2.1.2` ist für die Verfolgung der aktuell laufenden Programme vorgesehen.
- **Prozesspfad**: Um festzustellen, von wo aus ein Prozess ausgeführt wird, wird der MIB-Wert `1.3.6.1.2.1.25.4.2.1.4` verwendet.
- **Speichereinheiten**: Die Überwachung von Speichereinheiten wird durch `1.3.6.1.2.1.25.2.3.1.4` ermöglicht.
- **Softwarename**: Zur Identifizierung der auf einem System installierten Software wird `1.3.6.1.2.1.25.6.3.1.2` verwendet.
- **Benutzerkonten**: Der Wert `1.3.6.1.4.1.77.1.2.25` ermöglicht die Verfolgung von Benutzerkonten.
- **TCP-Local-Ports**: Schließlich ist `1.3.6.1.2.1.6.13.1.3` für die Überwachung von TCP-Local-Ports vorgesehen und bietet Einblick in aktive Netzwerkverbindungen.
### Cisco
Werfen Sie einen Blick auf diese Seite, wenn Sie Cisco-Geräte haben:
{% content-ref url="cisco-snmp.md" %}
[cisco-snmp.md](cisco-snmp.md)
{% endcontent-ref %}
## Von SNMP zu RCE
Wenn Sie den **String** haben, der es Ihnen ermöglicht, Werte im SNMP-Dienst zu **schreiben**, können Sie ihn möglicherweise missbrauchen, um **Befehle auszuführen**:
{% content-ref url="snmp-rce.md" %}
[snmp-rce.md](snmp-rce.md)
{% endcontent-ref %}
## **Massive SNMP**
[Braa](https://github.com/mteg/braa) ist ein massiver SNMP-Scanner. Die beabsichtigte Verwendung eines solchen Tools besteht natürlich darin, SNMP-Abfragen durchzuführen. Im Gegensatz zu snmpwalk von net-snmp kann es jedoch Dutzende oder Hunderte von Hosts gleichzeitig und in einem einzigen Prozess abfragen. Dadurch verbraucht es sehr wenig Systemressourcen und führt das Scannen SEHR schnell durch.
Braa implementiert seinen EIGENEN SNMP-Stack und benötigt daher keine SNMP-Bibliotheken wie net-snmp.
**Syntax:** braa \[Community-String]@\[IP des SNMP-Servers]:\[iso id]
```bash
braa ignite123@192.168.1.125:.1.3.6.*
```
Dies kann eine große Menge an Informationen extrahieren, die Sie manuell nicht verarbeiten können.
Also, lassen Sie uns nach den interessantesten Informationen suchen (von [https://blog.rapid7.com/2016/05/05/snmp-data-harvesting-during-penetration-testing/](https://blog.rapid7.com/2016/05/05/snmp-data-harvesting-during-penetration-testing/)):
### **Geräte**
Der Prozess beginnt mit der Extraktion der **sysDesc MIB-Daten** (1.3.6.1.2.1.1.1.0) aus jeder Datei, um die Geräte zu identifizieren. Dies wird durch die Verwendung eines **grep-Befehls** erreicht:
```bash
grep ".1.3.6.1.2.1.1.1.0" *.snmp
```
### **Identifizieren des privaten Strings**
Ein entscheidender Schritt besteht darin, den von Organisationen verwendeten **privaten Community-String** zu identifizieren, insbesondere bei Cisco IOS-Routern. Dieser String ermöglicht die Extraktion von **laufenden Konfigurationen** von Routern. Die Identifizierung erfolgt oft durch Analyse von SNMP-Trap-Daten nach dem Wort "trap" mit einem **grep-Befehl**:
```bash
grep -i "trap" *.snmp
```
### **Benutzernamen/Passwörter**
Protokolle, die in MIB-Tabellen gespeichert sind, werden auf **fehlgeschlagene Anmeldeversuche** untersucht, die versehentlich Passwörter enthalten können, die als Benutzernamen eingegeben wurden. Es werden Schlüsselwörter wie _fail_, _failed_ oder _login_ gesucht, um wertvolle Daten zu finden:
```bash
grep -i "login\|fail" *.snmp
```
### **E-Mails**
Schließlich werden zur Extraktion von **E-Mail-Adressen** aus den Daten ein **grep-Befehl** mit einem regulären Ausdruck verwendet, der sich auf Muster konzentriert, die E-Mail-Formate entsprechen:
```bash
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp
```
## Ändern von SNMP-Werten
Sie können _**NetScanTools**_ verwenden, um Werte zu **ändern**. Sie müssen den **privaten String** kennen, um dies zu tun.
## Spoofing
Wenn es eine ACL gibt, die nur bestimmten IPs das Abfragen des SNMP-Dienstes erlaubt, können Sie eine dieser Adressen in das UDP-Paket fälschen und den Datenverkehr abhören.
## Untersuchung von SNMP-Konfigurationsdateien
* snmp.conf
* snmpd.conf
* snmp-config.xml
## HackTricks Automatische Befehle
```
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
```
\
**Bug-Bounty-Tipp**: **Registrieren Sie sich** bei **Intigriti**, einer Premium-**Bug-Bounty-Plattform, die von Hackern für Hacker entwickelt wurde**! Treten Sie uns noch heute unter [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) bei und verdienen Sie Prämien von bis zu **100.000 $**!
{% embed url="https://go.intigriti.com/hacktricks" %}
Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!
Andere Möglichkeiten, HackTricks zu unterstützen:
* Wenn Sie Ihr **Unternehmen in HackTricks bewerben möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories senden.