# 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" braa @:.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 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}}