hacktricks/network-services-pentesting/pentesting-snmp/README.md

301 lines
16 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
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
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** 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)
```
{% hint style="info" %}
SNMP takođe koristi port **162/UDP** za **trape**. Ovo su podaci **paketi poslati sa SNMP servera klijentu bez eksplicitnog zahteva**.
{% endhint %}
### 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 čuvanje informacija o uređaju**. MIB je **tekstualna** datoteka u kojoj su svi upitni **SNMP objekti** uređaja navedeni u **standardizovanoj** hijerarhiji stabla. Sadrži najmanje 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 datoteke su napisane u `Abstract Syntax Notation One` (`ASN.1`) baziranom ASCII tekstualnom 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, dodeljeni su 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 linije proizvoda**. Ovaj sistem osigurava da postoji strukturiran i organizovan način za identifikaciju i upravljanje širokim spektrom objekata među različitim proizvođačima i standardima.
![](<../../.gitbook/assets/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 zavise od ovog** možete dobiti neke zanimljive podatke o hostu (sistemski podaci, podaci o mreži, podaci o procesima...)
### **Primer OID-a**
[**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 običnom tekstu). **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** (moguće je izvršiti **napad rečnikom**, 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 ([Trape](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 napad rečnikom. Proverite [ovde različite načine za izvršenje brute-force napada protiv SNMP](../../generic-methodologies-and-resources/brute-force.md#snmp). Često korišćen community string je `public`.
## Enumeracija 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
```
Hvala proširenim upitima (download-mibs), moguće je enumerisati još više o sistemu sa sledećom komandom:
```bash
snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull
```
**SNMP** ima mnogo informacija o hostu, a stvari koje bi mogle biti zanimljive su: **Mrežni interfejsi** (IPv4 i **IPv6** adresa), Korisnička imena, Uptime, Verzija servera/OS-a, i **procesi**
**koji se izvršavaju** (mogu sadržati lozinke)....
### **Opasne postavke**
U oblasti upravljanja mrežom, određene konfiguracije i parametri su ključni za osiguranje sveobuhvatnog nadgledanja 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 dozvoli 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 nadgledanje 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 nadgledanje aktivnih procesa unutar sistema.
* **Aktivni programi**: Vrednost `1.3.6.1.2.1.25.4.2.1.2` je namenjena praćenju trenutno aktivnih programa.
* **Putanja procesa**: Da bi se odredilo odakle se proces izvršava, koristi se MIB vrednost `1.3.6.1.2.1.25.4.2.1.4`.
* **Skladišne jedinice**: Nadgledanje skladišnih jedinica olakšano je putem `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 nadgledanje TCP lokalnih portova, pružajući uvid u aktivne mrežne veze.
### Cisco
Pogledajte ovu stranicu ako imate Cisco opremu:
{% content-ref url="cisco-snmp.md" %}
[cisco-snmp.md](cisco-snmp.md)
{% endcontent-ref %}
## 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**:
{% content-ref url="snmp-rce.md" %}
[snmp-rce.md](snmp-rce.md)
{% endcontent-ref %}
## **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, sposoban je da upita desetine ili stotine hostova istovremeno, i u jednom procesu. Tako, troši vrlo malo sistemskih resursa i skeniranje obavlja 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 da izvuče 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 command**:
```bash
grep -i "trap" *.snmp
```
### **Korisnička imena/Lozinke**
Zapisi 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.
## Lažiranje
Ako postoji ACL koji dozvoljava samo nekim IP adresama da upitaju SNMP servis, možete lažirati jednu od ovih adresa unutar UDP paketa i prisluškivati saobraćaj.
## Istraživanje SNMP konfiguracionih fajlova
* snmp.conf
* snmpd.conf
* snmp-config.xml
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Ako ste zainteresovani za **karijeru u hakovanju** i da hakujete nehakovano - **zapošljavamo!** (_potrebno je tečno pisano i govorno poljski_).
{% embed url="https://www.stmcyber.com/careers" %}
## 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.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" %}
Učite i vežbajte AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Podržite HackTricks</summary>
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Podelite hakerske trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
</details>
{% endhint %}