.. | ||
cisco-snmp.md | ||
README.md | ||
snmp-rce.md |
161,162,10161,10162/udp - Pentesting SNMP
{% hint style="success" %}
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
Wenn Sie an einer Hacking-Karriere interessiert sind und das Unhackbare hacken möchten - wir stellen ein! (fließend Polnisch in Wort und Schrift erforderlich).
{% embed url="https://www.stmcyber.com/careers" %}
Grundinformationen
SNMP - Simple Network Management Protocol ist ein Protokoll, das verwendet wird, um verschiedene Geräte im Netzwerk (wie Router, Switches, Drucker, IoTs...) zu überwachen.
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. Dies sind Daten Pakete, die vom SNMP-Server an den Client gesendet werden, ohne dass sie ausdrücklich angefordert werden. {% endhint %}
MIB
Um sicherzustellen, dass der SNMP-Zugriff herstellerübergreifend und mit verschiedenen 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 Text-Datei, in der alle abfragbaren SNMP-Objekte eines Geräts in einer standardisierten Baumhierarchie aufgeführt sind. Sie enthält mindestens einen Object Identifier
(OID
), der neben der notwendigen eindeutigen Adresse und einem Namen auch Informationen über den Typ, die Zugriffsrechte und eine Beschreibung des jeweiligen Objekts bereitstellt.
MIB-Dateien sind im Abstract Syntax Notation One
(ASN.1
) basierten ASCII-Textformat 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 Identifikatoren sind dafür ausgelegt, Objekte innerhalb einer Management Information Base (MIB) zu verwalten.
Die höchsten Ebenen der MIB-Objekt-IDs oder OIDs sind verschiedenen standardsetzenden Organisationen zugewiesen. Innerhalb dieser obersten Ebenen wird der Rahmen für globale Managementpraktiken und -standards festgelegt.
Darüber hinaus haben Anbieter die Freiheit, private Zweige zu schaffen. Innerhalb dieser Zweige haben sie die Autonomie, verwaltete Objekte, die für ihre eigenen Produktlinien relevant sind, einzuschließen. Dieses System stellt sicher, dass es eine strukturierte und organisierte Methode zur Identifizierung und Verwaltung einer Vielzahl von Objekten über verschiedene Anbieter und Standards hinweg gibt.
Sie können durch einen OID-Baum hier im Web navigieren: 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 aufrufen.
Es gibt einige bekannte OIDs, wie die innerhalb von 1.3.6.1.2.1, die auf die MIB-2 definierten Simple Network Management Protocol (SNMP)-Variablen verweisen. Und von den OIDs, die von dieser abhängen, können Sie einige interessante Hostdaten (Systemdaten, Netzwerkdaten, Prozessdaten...) erhalten.
OID Beispiel
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 stellt fest, dass dies eine OID ist. 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, das die Organisation ist, die das Internet zuerst etabliert hat.
- 1 – dies ist der Wert des Internets, um anzuzeigen, dass alle Kommunikationen über das Internet stattfinden.
- 4 – dieser Wert bestimmt, dass dieses Gerät von einer privaten Organisation und nicht von einer Regierungsorganisation hergestellt wurde.
- 1 – dieser Wert zeigt an, dass das Gerät von einem Unternehmen oder einer Geschäftseinheit hergestellt wurde.
Diese ersten sechs Werte sind für alle Geräte gleich und geben Ihnen die grundlegenden Informationen über sie. Diese Zahlenfolge wird für alle OIDs gleich sein, es sei denn, das Gerät wird von der Regierung hergestellt.
Weiter zur nächsten Zahlenreihe.
- 1452 – gibt den Namen der Organisation an, die dieses Gerät hergestellt hat.
- 1 – erklärt die Art des Geräts. In diesem Fall handelt es sich um einen Wecker.
- 2 – bestimmt, dass dieses Gerät eine Fernbedienungseinheit ist.
Die restlichen Werte geben spezifische Informationen über das Gerät.
- 5 – bezeichnet 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: Hauptversion, sie ist immer noch die häufigste, die Authentifizierung basiert auf einer Zeichenfolge (Community-String), die in Klartext übertragen wird (alle Informationen werden im Klartext übertragen). Version 2 und 2c senden den Verkehr ebenfalls im Klartext und verwenden einen Community-String als Authentifizierung.
- SNMPv3: Verwendet eine bessere Authentifizierungsform und die Informationen werden verschlüsselt übertragen (ein Dictionary-Angriff könnte durchgeführt werden, wäre aber viel schwieriger, die richtigen Anmeldeinformationen zu finden als in SNMPv1 und v2).
Community-Strings
Wie bereits erwähnt, um auf die im MIB gespeicherten Informationen zuzugreifen, müssen Sie 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 Lesefunktionenprivate
Lese/Schreib im Allgemeinen
Beachten Sie, dass die Schreibbarkeit einer OID vom verwendeten Community-String abhängt, sodass selbst wenn Sie feststellen, dass „public“ verwendet wird, Sie möglicherweise in der Lage sind, einige Werte zu schreiben. Außerdem kann es Objekte geben, 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, wenn Sie einen schlechten Community-String verwenden, wird der Server nicht antworten. Wenn er antwortet, wurde ein gültiger Community-String verwendet.
Ports
- Der SNMP-Agent empfängt Anfragen auf UDP-Port 161.
- Der Manager empfängt Benachrichtigungen (Traps und InformRequests) auf Port 162.
- Wenn er mit Transport Layer Security oder Datagram Transport Layer Security verwendet wird, 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önnten Sie einen Dictionary-Angriff durchführen. Überprüfen Sie hier verschiedene Möglichkeiten, einen Brute-Force-Angriff gegen SNMP durchzuführen. Ein häufig verwendeter Community-String ist public
.
SNMP auflisten
Es wird empfohlen, Folgendes zu installieren, um zu sehen, was jede gesammelte OID vom Gerät bedeutet:
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 die Daten mit SNMPWalk oder SNMP-Check abrufen:
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
Dank erweiterter Abfragen (download-mibs) ist es möglich, noch mehr über das System mit dem folgenden Befehl zu enumerieren:
snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull
SNMP hat viele Informationen über den Host, und Dinge, die Sie interessant finden könnten, sind: Netzwerkschnittstellen (IPv4- und IPv6-Adresse), Benutzernamen, Betriebszeit, Server-/Betriebssystemversion und Prozesse
laufend (kann 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 vollständigen OID-Baum, der ein entscheidendes Element im Netzwerkmanagement ist:
rwuser noauth
ist so eingestellt, dass es vollen Zugriff auf den OID-Baum ohne Authentifizierung ermöglicht. Diese Einstellung ist unkompliziert und erlaubt uneingeschränkten Zugriff.- Für spezifischere Kontrollen kann der Zugriff gewährt werden mit:
rwcommunity
für IPv4-Adressen undrwcommunity6
für IPv6-Adressen.
Beide Befehle erfordern eine Community-String und die relevante IP-Adresse, die vollen Zugriff unabhängig vom Ursprung der Anfrage bieten.
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
1.3.6.1.2.1.25.1.6.0
aufgerufen, ermöglicht dieser Parameter die Überwachung aktiver Prozesse im System. - Laufende Programme: Der Wert
1.3.6.1.2.1.25.4.2.1.2
ist für die Verfolgung aktuell laufender Programme vorgesehen. - Prozesspfad: Um zu bestimmen, wo 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
erleichtert. - Softwarename: Um die auf einem System installierte Software zu identifizieren, 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-Lokale Ports: Schließlich ist
1.3.6.1.2.1.6.13.1.3
für die Überwachung von TCP-lokalen Ports vorgesehen, was Einblicke in aktive Netzwerkverbindungen bietet.
Cisco
Schauen Sie sich diese Seite an, wenn Sie Cisco-Geräte haben:
{% content-ref url="cisco-snmp.md" %} cisco-snmp.md {% endcontent-ref %}
Von SNMP zu RCE
Wenn Sie die String haben, die es Ihnen erlaubt, Werte im SNMP-Dienst zu schreiben, könnten Sie in der Lage sein, dies auszunutzen, um Befehle auszuführen:
{% content-ref url="snmp-rce.md" %} snmp-rce.md {% endcontent-ref %}
Massives SNMP
Braa ist ein massiver SNMP-Scanner. Die beabsichtigte Verwendung eines solchen Tools besteht natürlich darin, SNMP-Abfragen durchzuführen – aber im Gegensatz zu snmpwalk von net-snmp kann es Dutzende oder Hunderte von Hosts gleichzeitig und in einem einzigen Prozess abfragen. Dadurch verbraucht es sehr wenige Systemressourcen und führt das Scannen SEHR schnell durch.
Braa implementiert seinen eigenen SNMP-Stack, sodass es keine SNMP-Bibliotheken wie net-snmp benötigt.
Syntax: braa [Community-String]@[IP des SNMP-Servers]:[iso id]
braa ignite123@192.168.1.125:.1.3.6.*
Dies kann eine Menge MB an Informationen extrahieren, die Sie manuell nicht verarbeiten können.
Schauen wir uns also die interessantesten Informationen an (von https://blog.rapid7.com/2016/05/05/snmp-data-harvesting-during-penetration-testing/):
Geräte
Der Prozess beginnt mit der Extraktion von 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:
grep ".1.3.6.1.2.1.1.1.0" *.snmp
Identifizieren Sie die private Zeichenfolge
Ein entscheidender Schritt besteht darin, die private Community-Zeichenfolge zu identifizieren, die von Organisationen verwendet wird, insbesondere auf Cisco IOS-Routern. Diese Zeichenfolge ermöglicht das Extrahieren von laufenden Konfigurationen von Routern. Die Identifizierung basiert häufig auf der Analyse von SNMP-Trap-Daten nach dem Wort "trap" mit einem grep-Befehl:
grep -i "trap" *.snmp
Benutzernamen/Passwörter
Protokolle, die in MIB-Tabellen gespeichert sind, werden auf fehlgeschlagene Anmeldeversuche untersucht, die möglicherweise versehentlich Passwörter enthalten, die als Benutzernamen eingegeben wurden. Schlüsselwörter wie fail, failed oder login werden durchsucht, um wertvolle Daten zu finden:
grep -i "login\|fail" *.snmp
Emails
Schließlich wird ein grep-Befehl mit einem regulären Ausdruck verwendet, um E-Mail-Adressen aus den Daten zu extrahieren, wobei der Fokus auf Mustern liegt, die E-Mail-Formate entsprechen:
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp
Modifizieren von SNMP-Werten
Sie können NetScanTools verwenden, um Werte zu ändern. Sie müssen die private Zeichenfolge kennen, um dies zu tun.
Spoofing
Wenn es eine ACL gibt, die nur einigen IPs erlaubt, den SNMP-Dienst abzufragen, können Sie eine dieser Adressen im UDP-Paket fälschen und den Verkehr abhören.
Überprüfen von SNMP-Konfigurationsdateien
- snmp.conf
- snmpd.conf
- snmp-config.xml
Wenn Sie an einer Hacking-Karriere interessiert sind und das Unhackbare hacken möchten - wir stellen ein! (fließend Polnisch in Wort und Schrift erforderlich).
{% embed url="https://www.stmcyber.com/careers" %}
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
{% hint style="success" %}
Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Unterstütze HackTricks
- Überprüfe die Abonnementpläne!
- Tritt der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folge uns auf Twitter 🐦 @hacktricks_live.
- Teile Hacking-Tricks, indem du PRs zu den HackTricks und HackTricks Cloud GitHub-Repos einreichst.