266 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 161,162,10161,10162/udp - Pentesting SNMP
{{#include ../../banners/hacktricks-training.md}}
## Osnovne informacije
**SNMP - Simple Network Management Protocol** je protokol koji se koristi za praćenje različitih uređaja u mreži (kao što su ruteri, prekidači, štampači, IoT uređaji...).
```
PORT STATE SERVICE REASON VERSION
161/udp open snmp udp-response ttl 244 ciscoSystems SNMPv3 server (public)
```
> [!TIP]
> SNMP takođe koristi port **162/UDP** za **trape**. Ovo su podaci **paketi poslati sa SNMP servera klijentu bez eksplicitnog zahteva**.
### MIB
Da bi se osiguralo da SNMP pristup funkcioniše među proizvođačima i sa različitim kombinacijama klijent-server, **Management Information Base (MIB)** je stvoren. MIB je **nezavistan format za skladištenje informacija o uređaju**. MIB je **tekst** fajl u kojem su svi upitni **SNMP objekti** uređaja navedeni u **standardizovanoj** hijerarhiji stabla. Sadrži **barem jedan `Object Identifier` (`OID`)**, koji, pored potrebne **jedinstvene adrese** i **imena**, takođe pruža informacije o tipu, pravima pristupa i opisu odgovarajućeg objekta.\
MIB fajlovi su napisani u `Abstract Syntax Notation One` (`ASN.1`) zasnovanom ASCII tekst formatu. **MIB-ovi ne sadrže podatke**, ali objašnjavaju **gde pronaći koje informacije** i kako izgledaju, koje vraća vrednosti za specifični OID, ili koji tip podataka se koristi.
### OIDs
**Object Identifiers (OIDs)** igraju ključnu ulogu. Ovi jedinstveni identifikatori su dizajnirani za upravljanje objektima unutar **Management Information Base (MIB)**.
Najviši nivoi MIB identifikatora objekata, ili OIDs, su dodeljeni raznim organizacijama koje postavljaju standarde. U okviru ovih najviših nivoa uspostavlja se okvir za globalne prakse i standarde upravljanja.
Pored toga, proizvođačima je data sloboda da uspostave privatne grane. Unutar ovih grana, imaju **autonomiju da uključe upravljane objekte relevantne za svoje vlastite proizvodne linije**. Ovaj sistem osigurava da postoji strukturiran i organizovan metod za identifikaciju i upravljanje širokim spektrom objekata među različitim proizvođačima i standardima.
![](<../../images/SNMP_OID_MIB_Tree (1).png>)
Možete **navigirati** kroz **OID stablo** sa veba ovde: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) ili **videti šta OID znači** (kao `1.3.6.1.2.1.1`) pristupajući [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1).\
Postoje neki **poznati OIDs** kao što su oni unutar [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1) koji se odnose na MIB-2 definisane Simple Network Management Protocol (SNMP) varijable. I iz **OIDs koji slede od ovoga** možete dobiti neke zanimljive podatke o hostu (sistemski podaci, podaci o mreži, podaci o procesima...)
### **OID Primer**
[**Primer odavde**](https://www.netadmintools.com/snmp-mib-and-oids/):
**`1 . 3 . 6 . 1 . 4 . 1 . 1452 . 1 . 2 . 5 . 1 . 3. 21 . 1 . 4 . 7`**
Evo razlaganja ove adrese.
- 1 ovo se zove ISO i uspostavlja da je ovo OID. Zato svi OIDs počinju sa “1”
- 3 ovo se zove ORG i koristi se za specificiranje organizacije koja je izgradila uređaj.
- 6 ovo je dod ili Ministarstvo odbrane koje je organizacija koja je prvi uspostavila Internet.
- 1 ova vrednost interneta označava da će sve komunikacije biti obavljene putem Interneta.
- 4 ova vrednost određuje da je ovaj uređaj napravljen od strane privatne organizacije, a ne vladine.
- 1 ova vrednost označava da je uređaj napravljen od strane preduzeća ili poslovnog entiteta.
Ovih prvih šest vrednosti obično su iste za sve uređaje i daju vam osnovne informacije o njima. Ova sekvenca brojeva biće ista za sve OIDs, osim kada je uređaj napravljen od strane vlade.
Prelazimo na sledeći set brojeva.
- 1452 daje ime organizacije koja je proizvela ovaj uređaj.
- 1 objašnjava tip uređaja. U ovom slučaju, to je budilnik.
- 2 određuje da je ovaj uređaj daljinski terminal.
Ostatak vrednosti daje specifične informacije o uređaju.
- 5 označava diskretnu tačku alarma.
- 1 specifična tačka u uređaju
- 3 port
- 21 adresa porta
- 1 prikaz za port
- 4 broj tačke
- 7 stanje tačke
### SNMP Verzije
Postoje 2 važne verzije SNMP:
- **SNMPv1**: Glavna verzija, još uvek je najčešća, **autentifikacija se zasniva na stringu** (community string) koji putuje u **plain-text** (svi podaci putuju u plain text). **Verzija 2 i 2c** takođe šalju **saobraćaj u plain text** i koriste **community string kao autentifikaciju**.
- **SNMPv3**: Koristi bolji **oblik autentifikacije** i informacije putuju **kriptovano** (može se izvršiti **dictionary attack**, ali bi bilo mnogo teže pronaći ispravne kredencijale nego u SNMPv1 i v2).
### Community Strings
Kao što je ranije pomenuto, **da biste pristupili informacijama sačuvanim na MIB-u, morate znati community string za verzije 1 i 2/2c i kredencijale za verziju 3.**\
Postoje **2 tipa community strings**:
- **`public`** uglavnom **samo za čitanje** funkcije
- **`private`** **Čitanje/Pisanje** uopšteno
Napomena da **pisivost OID-a zavisi od korišćenog community stringa**, tako da **čak i** ako otkrijete da se koristi "**public**", mogli biste biti u mogućnosti da **pišete neke vrednosti.** Takođe, može postojati objekata koji su **uvek "Samo za čitanje".**\
Ako pokušate da **pišete** objekat, dobićete **`noSuchName` ili `readOnly` grešku**.
U verzijama 1 i 2/2c, ako koristite **loš** community string, server neće **odgovoriti**. Dakle, ako odgovara, korišćen je **validan community string**.
## Portovi
[Sa Wikipedije](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol):
- SNMP agent prima zahteve na UDP portu **161**.
- Menadžer prima obaveštenja ([Traps](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol#Trap) i [InformRequests](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol#InformRequest)) na portu **162**.
- Kada se koristi sa [Transport Layer Security](https://en.wikipedia.org/wiki/Transport_Layer_Security) ili [Datagram Transport Layer Security](https://en.wikipedia.org/wiki/Datagram_Transport_Layer_Security), zahtevi se primaju na portu **10161** i obaveštenja se šalju na port **10162**.
## Brute-Force Community String (v1 i v2c)
Da biste **pogodili community string**, mogli biste izvršiti dictionary attack. Proverite [ovde različite načine za izvršenje brute-force napada protiv SNMP](../../generic-hacking/brute-force.md#snmp). Često korišćen community string je `public`.
## Enumerating SNMP
Preporučuje se instalacija sledećeg da biste videli šta znači **svaki OID prikupljen** sa uređaja:
```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
```
Ako znate validni community string, možete pristupiti podacima koristeći **SNMPWalk** ili **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
```
Zahvaljujući proširenim upitima (download-mibs), moguće je enumerisati još više informacija o sistemu pomoću sledeće komande:
```bash
snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull
```
**SNMP** ima mnogo informacija o hostu, a stvari koje bi vam mogle biti zanimljive su: **Mrežni interfejsi** (IPv4 i **IPv6** adresa), Korisnička imena, Uptime, Verzija servera/OS-a, i **procesi**
**koji se** izvode (mogu sadržati lozinke)....
### **Opasne postavke**
U oblasti upravljanja mrežom, određene konfiguracije i parametri su ključni za obezbeđivanje sveobuhvatnog nadzora i kontrole.
### Postavke pristupa
Dve glavne postavke omogućavaju pristup **celom OID stablu**, što je ključna komponenta u upravljanju mrežom:
1. **`rwuser noauth`** je postavljen da omogući potpuni pristup OID stablu bez potrebe za autentifikacijom. Ova postavka je jednostavna i omogućava neograničen pristup.
2. Za specifičniju kontrolu, pristup se može odobriti korišćenjem:
- **`rwcommunity`** za **IPv4** adrese, i
- **`rwcommunity6`** za **IPv6** adrese.
Obe komande zahtevaju **community string** i relevantnu IP adresu, nudeći potpuni pristup bez obzira na poreklo zahteva.
### SNMP parametri za Microsoft Windows
Serija **Management Information Base (MIB) vrednosti** se koristi za praćenje različitih aspekata Windows sistema putem SNMP:
- **Sistemski procesi**: Pristupa se putem `1.3.6.1.2.1.25.1.6.0`, ovaj parametar omogućava praćenje aktivnih procesa unutar sistema.
- **Pokrenuti programi**: Vrednost `1.3.6.1.2.1.25.4.2.1.2` je namenjena praćenju trenutno pokrenutih programa.
- **Putanja procesa**: Da bi se odredilo odakle se proces pokreće, koristi se MIB vrednost `1.3.6.1.2.1.25.4.2.1.4`.
- **Skladišne jedinice**: Praćenje skladišnih jedinica olakšava `1.3.6.1.2.1.25.2.3.1.4`.
- **Ime softvera**: Da bi se identifikovao softver instaliran na sistemu, koristi se `1.3.6.1.2.1.25.6.3.1.2`.
- **Korisnički nalozi**: Vrednost `1.3.6.1.4.1.77.1.2.25` omogućava praćenje korisničkih naloga.
- **TCP lokalne portove**: Na kraju, `1.3.6.1.2.1.6.13.1.3` je namenjen za praćenje TCP lokalnih portova, pružajući uvid u aktivne mrežne konekcije.
### Cisco
Pogledajte ovu stranicu ako imate Cisco opremu:
{{#ref}}
cisco-snmp.md
{{#endref}}
## Od SNMP do RCE
Ako imate **string** koji vam omogućava da **pišete vrednosti** unutar SNMP servisa, možda ćete moći da ga zloupotrebite da **izvršite komande**:
{{#ref}}
snmp-rce.md
{{#endref}}
## **Masovni SNMP**
[Braa ](https://github.com/mteg/braa) je masovni SNMP skener. Predviđena upotreba ovog alata je, naravno, pravljenje SNMP upita ali za razliku od snmpwalk iz net-snmp, on može da upita desetine ili stotine hostova istovremeno, i u jednom procesu. Tako, troši vrlo malo sistemskih resursa i skenira VEOMA brzo.
Braa implementira svoj VLASTITI snmp stek, tako da mu nisu potrebne nikakve SNMP biblioteke poput net-snmp.
**Sintaksa:** braa \[Community-string]@\[IP SNMP servera]:\[iso id]
```bash
braa ignite123@192.168.1.125:.1.3.6.*
```
Ovo može izvući mnogo MB informacija koje ne možete obraditi ručno.
Dakle, hajde da potražimo najzanimljivije informacije (sa [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/)):
### **Uređaji**
Proces počinje ekstrakcijom **sysDesc MIB podataka** (1.3.6.1.2.1.1.1.0) iz svake datoteke kako bi se identifikovali uređaji. To se postiže korišćenjem **grep komande**:
```bash
grep ".1.3.6.1.2.1.1.1.0" *.snmp
```
### **Identifikacija Privatnog Stringa**
Ključni korak uključuje identifikaciju **privatnog community stringa** koji koriste organizacije, posebno na Cisco IOS ruterima. Ovaj string omogućava ekstrakciju **running configurations** sa rutera. Identifikacija se često oslanja na analizu SNMP Trap podataka za reč "trap" uz pomoć **grep komande**:
```bash
grep -i "trap" *.snmp
```
### **Korisnička imena/Lozinke**
Logovi pohranjeni unutar MIB tabela se ispituju za **neuspešne pokušaje prijavljivanja**, koji mogu slučajno uključivati lozinke unesene kao korisnička imena. Ključne reči kao što su _fail_, _failed_, ili _login_ se pretražuju kako bi se pronašli vredni podaci:
```bash
grep -i "login\|fail" *.snmp
```
### **Emails**
Na kraju, za ekstrakciju **email adresa** iz podataka, koristi se **grep komanda** sa regularnim izrazom, fokusirajući se na obrasce koji odgovaraju formatima email adresa:
```bash
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp
```
## Modifikovanje SNMP vrednosti
Možete koristiti _**NetScanTools**_ da **modifikujete vrednosti**. Biće vam potrebna **privatna string** da biste to uradili.
## Spoofing
Ako postoji ACL koji dozvoljava samo nekim IP adresama da upitaju SMNP servis, možete spoofovati jednu od ovih adresa unutar UDP paketa i osluškivati saobraćaj.
## Istraživanje SNMP konfiguracionih fajlova
- snmp.conf
- snmpd.conf
- snmp-config.xml
## HackTricks Automatske Komande
```
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.wiki/en/network-services-pentesting/pentesting-smtp/index.html
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
```
{{#include ../../banners/hacktricks-training.md}}