hacktricks/network-services-pentesting/pentesting-snmp
2024-11-19 12:00:42 +00:00
..
cisco-snmp.md Translated ['README.md', 'binary-exploitation/format-strings/README.md', 2024-11-19 12:00:42 +00:00
README.md Translated ['README.md', 'binary-exploitation/format-strings/README.md', 2024-11-19 12:00:42 +00:00
snmp-rce.md Translated ['generic-methodologies-and-resources/basic-forensic-methodol 2024-07-19 10:13:27 +00:00

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

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

If you are interested in hacking career and hack the unhackable - we are hiring! (fluent polish written and spoken required).

{% embed url="https://www.stmcyber.com/careers" %}

Basic Information

SNMP - Simple Network Management Protocol è un protocollo utilizzato per monitorare diversi dispositivi nella rete (come router, switch, stampanti, IoT...).

PORT    STATE SERVICE REASON                 VERSION
161/udp open  snmp    udp-response ttl 244   ciscoSystems SNMPv3 server (public)

{% hint style="info" %} SNMP utilizza anche la porta 162/UDP per i traps. Questi sono pacchetti di dati inviati dal server SNMP al client senza essere esplicitamente richiesti. {% endhint %}

MIB

Per garantire che l'accesso SNMP funzioni tra diversi produttori e con diverse combinazioni client-server, è stata creata la Management Information Base (MIB). La MIB è un formato indipendente per memorizzare informazioni sui dispositivi. Un MIB è un file testo in cui tutti gli oggetti SNMP interrogabili di un dispositivo sono elencati in una gerarchia ad albero standardizzata. Contiene almeno un Object Identifier (OID), che, oltre all'indirizzo unico necessario e a un nome, fornisce anche informazioni sul tipo, diritti di accesso e una descrizione dell'oggetto rispettivo.
I file MIB sono scritti nel formato di testo ASCII basato su Abstract Syntax Notation One (ASN.1). Le MIB non contengono dati, ma spiegano dove trovare quali informazioni e come appaiono, quali valori restituiscono per l'OID specifico o quale tipo di dato viene utilizzato.

OIDs

Object Identifiers (OIDs) svolgono un ruolo cruciale. Questi identificatori unici sono progettati per gestire oggetti all'interno di una Management Information Base (MIB).

I livelli più alti degli ID oggetto MIB, o OIDs, sono assegnati a diverse organizzazioni di standardizzazione. È all'interno di questi livelli superiori che viene stabilito il quadro per le pratiche e gli standard di gestione globali.

Inoltre, ai fornitori è concessa la libertà di stabilire rami privati. All'interno di questi rami, hanno l'autonomia di includere oggetti gestiti pertinenti alle proprie linee di prodotto. Questo sistema garantisce che ci sia un metodo strutturato e organizzato per identificare e gestire una vasta gamma di oggetti tra diversi fornitori e standard.

Puoi navigare attraverso un albero OID dal web qui: http://www.oid-info.com/cgi-bin/display?tree=#focus o vedere cosa significa un OID (come 1.3.6.1.2.1.1) accedendo a http://oid-info.com/get/1.3.6.1.2.1.1.
Ci sono alcuni OID ben noti come quelli all'interno di 1.3.6.1.2.1 che fanno riferimento alle variabili del Simple Network Management Protocol (SNMP) definite in MIB-2. E dagli OID in attesa di questo puoi ottenere alcuni dati interessanti sull'host (dati di sistema, dati di rete, dati sui processi...)

Esempio di OID

Esempio da qui:

1 . 3 . 6 . 1 . 4 . 1 . 1452 . 1 . 2 . 5 . 1 . 3. 21 . 1 . 4 . 7

Ecco una suddivisione di questo indirizzo.

  • 1 questo è chiamato ISO e stabilisce che questo è un OID. Ecco perché tutti gli OID iniziano con "1"
  • 3 questo è chiamato ORG e viene utilizzato per specificare l'organizzazione che ha costruito il dispositivo.
  • 6 questo è il dod o il Dipartimento della Difesa, che è l'organizzazione che ha stabilito per prima Internet.
  • 1 questo è il valore di internet per denotare che tutte le comunicazioni avverranno attraverso Internet.
  • 4 questo valore determina che questo dispositivo è realizzato da un'organizzazione privata e non da una governativa.
  • 1 questo valore denota che il dispositivo è realizzato da un'impresa o un'entità commerciale.

Questi primi sei valori tendono a essere gli stessi per tutti i dispositivi e forniscono le informazioni di base su di essi. Questa sequenza di numeri sarà la stessa per tutti gli OID, tranne quando il dispositivo è realizzato dal governo.

Passando al set successivo di numeri.

  • 1452 fornisce il nome dell'organizzazione che ha fabbricato questo dispositivo.
  • 1 spiega il tipo di dispositivo. In questo caso, è una sveglia.
  • 2 determina che questo dispositivo è un'unità terminale remota.

Il resto dei valori fornisce informazioni specifiche sul dispositivo.

  • 5 denota un punto di allerta discreto.
  • 1 punto specifico nel dispositivo
  • 3 porta
  • 21 indirizzo della porta
  • 1 display per la porta
  • 4 numero del punto
  • 7 stato del punto

Versioni SNMP

Ci sono 2 versioni importanti di SNMP:

  • SNMPv1: La principale, è ancora la più frequente, l'autenticazione si basa su una stringa (community string) che viaggia in testo chiaro (tutte le informazioni viaggiano in testo chiaro). La versione 2 e 2c inviano il traffico in testo chiaro anche e utilizzano una community string come autenticazione.
  • SNMPv3: Utilizza una forma di autenticazione migliore e le informazioni viaggiano crittografate (un attacco a dizionario potrebbe essere eseguito ma sarebbe molto più difficile trovare le credenziali corrette rispetto a SNMPv1 e v2).

Community Strings

Come accennato in precedenza, per accedere alle informazioni salvate sulla MIB è necessario conoscere la community string nelle versioni 1 e 2/2c e le credenziali nella versione 3.
Ci sono 2 tipi di community strings:

  • public principalmente funzioni di sola lettura
  • private Lettura/Scrittura in generale

Nota che la scrivibilità di un OID dipende dalla community string utilizzata, quindi anche se scopri che viene utilizzato "public", potresti essere in grado di scrivere alcuni valori. Inoltre, potrebbero esistere oggetti che sono sempre "Read Only".
Se provi a scrivere un oggetto, si riceve un errore noSuchName o readOnly.**.**

Nelle versioni 1 e 2/2c, se utilizzi una community string errata, il server non risponderà. Quindi, se risponde, è stata utilizzata una community string valida.

Porte

Da Wikipedia:

Brute-Force Community String (v1 e v2c)

Per indovinare la community string potresti eseguire un attacco a dizionario. Controlla qui diversi modi per eseguire un attacco brute-force contro SNMP. Una community string frequentemente utilizzata è public.

Enumerare SNMP

Si raccomanda di installare quanto segue per vedere cosa significa ogni OID raccolto dal dispositivo:

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

Se conosci una stringa di comunità valida, puoi accedere ai dati utilizzando SNMPWalk o 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

Grazie alle query estese (download-mibs), è possibile enumerare ulteriormente il sistema con il seguente comando :

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

SNMP ha molte informazioni sull'host e le cose che potresti trovare interessanti sono: Interfacce di rete (indirizzo IPv4 e IPv6), Nomi utente, Tempo di attività, Versione del server/SO e processi

in esecuzione (potrebbero contenere password)....

Impostazioni pericolose

Nel campo della gestione della rete, alcune configurazioni e parametri sono fondamentali per garantire un monitoraggio e un controllo completi.

Impostazioni di accesso

Due impostazioni principali abilitano l'accesso all'intero albero OID, che è un componente cruciale nella gestione della rete:

  1. rwuser noauth è impostato per consentire l'accesso completo all'albero OID senza la necessità di autenticazione. Questa impostazione è semplice e consente un accesso illimitato.
  2. Per un controllo più specifico, l'accesso può essere concesso utilizzando:
  • rwcommunity per indirizzi IPv4, e
  • rwcommunity6 per indirizzi IPv6.

Entrambi i comandi richiedono una stringa di comunità e l'indirizzo IP pertinente, offrendo accesso completo indipendentemente dall'origine della richiesta.

Parametri SNMP per Microsoft Windows

Una serie di valori della Management Information Base (MIB) sono utilizzati per monitorare vari aspetti di un sistema Windows tramite SNMP:

  • Processi di sistema: Accessibile tramite 1.3.6.1.2.1.25.1.6.0, questo parametro consente il monitoraggio dei processi attivi all'interno del sistema.
  • Programmi in esecuzione: Il valore 1.3.6.1.2.1.25.4.2.1.2 è designato per tracciare i programmi attualmente in esecuzione.
  • Percorso dei processi: Per determinare da dove proviene un processo, viene utilizzato il valore MIB 1.3.6.1.2.1.25.4.2.1.4.
  • Unità di archiviazione: Il monitoraggio delle unità di archiviazione è facilitato da 1.3.6.1.2.1.25.2.3.1.4.
  • Nome del software: Per identificare il software installato su un sistema, si impiega 1.3.6.1.2.1.25.6.3.1.2.
  • Account utente: Il valore 1.3.6.1.4.1.77.1.2.25 consente di tracciare gli account utente.
  • Porte locali TCP: Infine, 1.3.6.1.2.1.6.13.1.3 è designato per monitorare le porte locali TCP, fornendo informazioni sulle connessioni di rete attive.

Cisco

Dai un'occhiata a questa pagina se hai attrezzature Cisco:

{% content-ref url="cisco-snmp.md" %} cisco-snmp.md {% endcontent-ref %}

Da SNMP a RCE

Se hai la stringa che ti consente di scrivere valori all'interno del servizio SNMP, potresti essere in grado di abusarne per eseguire comandi:

{% content-ref url="snmp-rce.md" %} snmp-rce.md {% endcontent-ref %}

SNMP Massivo

Braa è uno scanner SNMP di massa. L'uso previsto di tale strumento è, ovviamente, effettuare query SNMP ma a differenza di snmpwalk di net-snmp, è in grado di interrogare dozzine o centinaia di host simultaneamente, e in un unico processo. Pertanto, consuma pochissime risorse di sistema e esegue la scansione MOLTO velocemente.

Braa implementa il proprio stack SNMP, quindi non ha bisogno di librerie SNMP come net-snmp.

Sintassi: braa [Stringa di comunità]@[IP del server SNMP]:[id iso]

braa ignite123@192.168.1.125:.1.3.6.*

Questo può estrarre molti MB di informazioni che non puoi elaborare manualmente.

Quindi, cerchiamo le informazioni più interessanti (da https://blog.rapid7.com/2016/05/05/snmp-data-harvesting-during-penetration-testing/):

Dispositivi

Il processo inizia con l'estrazione dei dati sysDesc MIB (1.3.6.1.2.1.1.1.0) da ciascun file per identificare i dispositivi. Questo viene realizzato attraverso l'uso di un comando grep:

grep ".1.3.6.1.2.1.1.1.0" *.snmp

Identificare la Stringa Privata

Un passaggio cruciale implica l'identificazione della stringa di comunità privata utilizzata dalle organizzazioni, in particolare sui router Cisco IOS. Questa stringa consente l'estrazione delle configurazioni in esecuzione dai router. L'identificazione si basa spesso sull'analisi dei dati SNMP Trap per la parola "trap" con un comando grep:

grep -i "trap" *.snmp

Nomi utente/Password

I log memorizzati all'interno delle tabelle MIB vengono esaminati per tentativi di accesso non riusciti, che potrebbero accidentalmente includere password inserite come nomi utente. Parole chiave come fail, failed o login vengono cercate per trovare dati preziosi:

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

Email

Infine, per estrarre indirizzi email dai dati, viene utilizzato un comando grep con un'espressione regolare, concentrandosi su modelli che corrispondono ai formati email:

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

Modifica dei valori SNMP

Puoi usare NetScanTools per modificare i valori. Dovrai conoscere la stringa privata per farlo.

Spoofing

Se c'è un ACL che consente solo ad alcuni IP di interrogare il servizio SMNP, puoi spoofare uno di questi indirizzi all'interno del pacchetto UDP e sniffare il traffico.

Esaminare i file di configurazione SNMP

  • snmp.conf
  • snmpd.conf
  • snmp-config.xml

Se sei interessato a una carriera nel hacking e a hackare l'inhackabile - stiamo assumendo! (richiesta di polacco fluente scritto e parlato).

{% embed url="https://www.stmcyber.com/careers" %}

HackTricks Comandi Automatici

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" %} Impara e pratica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Supporta HackTricks
{% endhint %}