mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
266 lines
14 KiB
Markdown
266 lines
14 KiB
Markdown
# 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.
|
||
|
||
.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}}
|