.. | ||
cisco-snmp.md | ||
README.md | ||
snmp-rce.md |
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
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
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). 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 globale.
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 dei processi...)
Esempio di OID
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). 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 letturaprivate
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
- L'agente SNMP riceve richieste sulla porta UDP 161.
- Il manager riceve notifiche (Traps e InformRequests) sulla porta 162.
- Quando utilizzato con Transport Layer Security o Datagram Transport Layer Security, le richieste vengono ricevute sulla porta 10161 e le notifiche vengono inviate alla porta 10162.
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 a query estese (download-mibs), è possibile enumerare ancora di più sul 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:
rwuser noauth
è impostato per consentire l'accesso completo all'albero OID senza la necessità di autenticazione. Questa impostazione è semplice e consente un accesso illimitato.- Per un controllo più specifico, l'accesso può essere concesso utilizzando:
rwcommunity
per indirizzi IPv4, erwcommunity6
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 sta girando 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
Emails
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
Modificare i 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 Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos su github.