# 161,162,10161,10162/udp - Pentesting SNMP
Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
\
**Wskazówka dotycząca bug bounty**: **zarejestruj się** na platformie **Intigriti**, premium **platformie bug bounty stworzonej przez hakerów, dla hakerów**! Dołącz do nas na [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) już dziś i zacznij zarabiać nagrody do **100 000 USD**!
{% embed url="https://go.intigriti.com/hacktricks" %}
## Podstawowe informacje
**SNMP - Simple Network Management Protocol** to protokół używany do monitorowania różnych urządzeń w sieci (takich jak routery, przełączniki, drukarki, urządzenia IoT...).
```
PORT STATE SERVICE REASON VERSION
161/udp open snmp udp-response ttl 244 ciscoSystems SNMPv3 server (public)
```
{% hint style="info" %}
SNMP używa również portu **162/UDP** do **pułapek**. Są to dane **pakietów wysyłanych z serwera SNMP do klienta bez wyraźnego żądania**.
{% endhint %}
### MIB
Aby zapewnić, że dostęp SNMP działa w różnych kombinacjach producentów i klientów-serwerów, utworzono **Management Information Base (MIB)**. MIB to **niezależny format przechowywania informacji o urządzeniu**. MIB to **plik tekstowy**, w którym wszystkie zapytywalne **obiekty SNMP** urządzenia są wymienione w **standaryzowanej** hierarchii drzewa. Zawiera co najmniej jeden `Object Identifier` (`OID`), który oprócz niezbędnego **unikalnego adresu** i **nazwy**, zawiera również informacje o typie, prawach dostępu i opisie danego obiektu.\
Pliki MIB są pisane w opartym na tekście ASCII formacie `Abstract Syntax Notation One` (`ASN.1`). **MIBy nie zawierają danych**, ale wyjaśniają **gdzie znaleźć jakie informacje** i jak to wygląda, zwracając wartości dla określonego OID lub jakiego typu danych używane są.
### OIDs
**Object Identifiers (OIDs)** odgrywają kluczową rolę. Te unikalne identyfikatory są przeznaczone do zarządzania obiektami w **Management Information Base (MIB)**.
Najwyższe poziomy identyfikatorów obiektów MIB, czyli OIDs, są przydzielane różnym organizacjom ustalającym standardy. To na tych najwyższych poziomach ustalane są ramy dla globalnych praktyk zarządzania i standardów.
Ponadto, producentom przyznaje się swobodę tworzenia prywatnych gałęzi. W ramach tych gałęzi mają **autonomię do uwzględniania zarządzanych obiektów związanych z ich własnymi liniami produktów**. Ten system zapewnia strukturalną i zorganizowaną metodę identyfikacji i zarządzania różnymi obiektami w różnych producentach i standardach.
![](../../.gitbook/assets/snmp\_oid\_mib\_tree.png)
Możesz **nawigować** przez **drzewo OID** tutaj: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) lub **zobaczyć, co oznacza OID** (jak `1.3.6.1.2.1.1`) przechodząc do [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1).\
Istnieją pewne **znane OIDs**, takie jak te wewnątrz [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1), które odnoszą się do zmiennych protokołu SNMP zdefiniowanych w MIB-2. A z **OIDów zależnych od tego** można uzyskać pewne interesujące dane hosta (dane systemowe, dane sieciowe, dane procesów...)
### **Przykład OID**
[**Przykład stąd**](https://www.netadmintools.com/snmp-mib-and-oids/):
**`1 . 3 . 6 . 1 . 4 . 1 . 1452 . 1 . 2 . 5 . 1 . 3. 21 . 1 . 4 . 7`**
Oto rozbicie tego adresu.
* 1 - to jest nazywane ISO i ustala, że jest to OID. Dlatego wszystkie OIDs zaczynają się od "1"
* 3 - to jest nazywane ORG i służy do określenia organizacji, która zbudowała urządzenie.
* 6 - to jest dod lub Department of Defense, czyli organizacja, która jako pierwsza ustanowiła Internet.
* 1 - to jest wartość internetu, oznaczająca, że cała komunikacja będzie odbywać się przez Internet.
* 4 - ta wartość określa, że to urządzenie jest produkowane przez prywatną organizację, a nie rządową.
* 1 - ta wartość oznacza, że urządzenie jest produkowane przez przedsiębiorstwo lub jednostkę biznesową.
Te pierwsze sześć wartości są zwykle takie same dla wszystkich urządzeń i dają podstawowe informacje o nich. Ta sekwencja liczb będzie taka sama dla wszystkich OIDs, z wyjątkiem urządzeń produkowanych przez rząd.
Przechodząc do następnego zestawu liczb.
* 1452 - podaje nazwę organizacji, która wyprodukowała to urządzenie.
* 1 - wyjaśnia rodzaj urządzenia. W tym przypadku jest to budzik.
* 2 - określa, że to urządzenie jest zdalną jednostką terminalową.
Reszta wartości podaje konkretne informacje o urządzeniu.
* 5 - oznacza dyskretny punkt alarmowy.
* 1 - konkretny punkt w urządzeniu
* 3 - port
* 21 - adres portu
* 1 - wyświetlacz dla portu
* 4 - numer punktu
* 7 - stan punktu
### Wersje SNMP
Istnieją 2 ważne wersje SNMP:
* **SNMPv1**: Główna wersja, nadal najczęstsza, **uwierzytelnianie oparte jest na ciągu znaków** (community string), który przesyła się w **tekście jawnym** (wszystkie informacje przesyłane są w tekście jawnym). **Wersje 2 i 2c** również przesyłają ruch w tekście jawnym i używają ciągu znaków community jako uwierzytelnienia.
* **SNMPv3**: Używa lepszej formy **uwierzytelniania**, a informacje przesyłane są **szyfrowane** (atak słownikowy może być przeprowadzony, ale znalezienie poprawnych poświadczeń byłoby trudniejsze niż w SNMPv1 i v2).
### Ciągi community
Jak już wspomniano, **aby uzyskać dostęp do informacji zapisanych w MIB, musisz znać ciąg community w wersjach 1 i 2/2c oraz poświadczenia w wersji 3.**\
Istnieją **2 rodzaje ciągów community**:
* **`public`** głównie funkcje **tylko do odczytu**
* **`private`** **Odczyt/Zapis** ogólnie
Należy zauważyć, że **możliwość zapisu OID zależy od użytego ciągu community**, więc **nawet** jeśli okaże się, że używane jest "**publiczne**", możesz mieć możliwość **zapisu niektórych wartości**. Istnieją również obiekty, które są **zawsze "tylko do odczytu"**.\
Jeśli spróbujesz **zapisać** obiekt, otrzymasz błąd **`noSuchName` lub `readOnly`**.
W wersjach 1 i 2/2c, jeśli użyjesz **nieprawidłowego** ciągu community, serwer nie **odpowie**. Więc jeśli otrzymasz odpowiedź, użyto **poprawnego ciągu community**.
## Porty
[Z Wikipedii](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol#:~:text=All%20SNMP%20messages%20are%20transported,port%20161%20in%20the%20agent.):
* Agent SNMP odbiera żądania na porcie UDP **161**.
* Manager odbiera powiadomienia ([Pułapki](https://en.wikipedia.org/wiki/Simple\_Network\_Management\_Protocol#Trap) i [InformRequests](https://en.wikipedia.org/wiki/Simple\_Network\_Management\_Protocol#InformRequest)) na porcie **162**.
* Gdy używane jest [Transport Layer Security](https://en.wikipedia.org/wiki/Transport\_Layer\_Security) lub [Datagram Transport Layer Security](https://en.wikipedia.org/wiki/Datagram\_Transport\_Layer\_Security), żądania są odbierane na porcie **10161**, a powiadomienia są wysyłane na port **10162**.
## Brute-Force ciągu community (v1 i v2c)
Aby **odgadnąć ciąg community**, można przeprowadzić atak słownikowy. Sprawdź [tutaj różne sposoby przeprowadzania ataku brute-force na SNMP](../../generic-methodologies-and-resources/brute-force.md#snmp). Często używanym ciągiem community jest `public`.
## Wyliczanie SNMP
Zaleca się zainstalowanie następujących narzędzi, aby zobaczyć, co oznacza **każdy zebrany OID** z urządzenia:
```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
```
Jeśli znasz prawidłowy ciąg społeczności, możesz uzyskać dostęp do danych za pomocą **SNMPWalk** lub **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
```
Dzięki rozszerzonym zapytaniom (download-mibs) można jeszcze bardziej wyliczać informacje o systemie za pomocą następującej komendy:
```bash
snmpwalk -v X -c public NET-SNMP-EXTEND-MIB::nsExtendOutputFull
```
**SNMP** zawiera wiele informacji o hoście, a interesujące mogą być: **interfejsy sieciowe** (adresy IPv4 i **IPv6**), nazwy użytkowników, czas pracy, wersja serwera/OS oraz **procesy**
**uruchomione** (mogą zawierać hasła)....
### **Niebezpieczne ustawienia**
W dziedzinie zarządzania siecią istnieje kilka konfiguracji i parametrów, które są kluczowe dla zapewnienia wszechstronnego monitorowania i kontroli.
### Ustawienia dostępu
Dwa główne ustawienia umożliwiają dostęp do **pełnego drzewa OID**, które jest kluczowym elementem w zarządzaniu siecią:
1. **`rwuser noauth`** jest ustawione, aby umożliwić pełny dostęp do drzewa OID bez konieczności uwierzytelniania. To ustawienie jest proste i pozwala na nieograniczony dostęp.
2. Dla bardziej szczegółowej kontroli dostępu można przyznać dostęp za pomocą:
- **`rwcommunity`** dla adresów **IPv4**, oraz
- **`rwcommunity6`** dla adresów **IPv6**.
Oba polecenia wymagają **ciągu społecznościowego** i odpowiedniego adresu IP, oferując pełny dostęp niezależnie od pochodzenia żądania.
### Parametry SNMP dla systemu Microsoft Windows
Do monitorowania różnych aspektów systemu Windows za pomocą SNMP wykorzystuje się serię wartości **Management Information Base (MIB)**:
- **Procesy systemowe**: Dostępne za pomocą `1.3.6.1.2.1.25.1.6.0`, ten parametr umożliwia monitorowanie aktywnych procesów w systemie.
- **Uruchomione programy**: Wartość `1.3.6.1.2.1.25.4.2.1.2` jest przeznaczona do śledzenia aktualnie uruchomionych programów.
- **Ścieżka procesów**: Aby określić, z jakiego miejsca uruchamiany jest proces, używa się wartości MIB `1.3.6.1.2.1.25.4.2.1.4`.
- **Jednostki pamięci**: Monitorowanie jednostek pamięci jest ułatwione dzięki `1.3.6.1.2.1.25.2.3.1.4`.
- **Nazwa oprogramowania**: Aby zidentyfikować zainstalowane oprogramowanie na systemie, używa się `1.3.6.1.2.1.25.6.3.1.2`.
- **Konta użytkowników**: Wartość `1.3.6.1.4.1.77.1.2.25` umożliwia śledzenie kont użytkowników.
- **Lokalne porty TCP**: Na koniec, `1.3.6.1.2.1.6.13.1.3` jest przeznaczony do monitorowania lokalnych portów TCP, co pozwala uzyskać informacje o aktywnych połączeniach sieciowych.
### Cisco
Jeśli korzystasz z urządzeń Cisco, zajrzyj na tę stronę:
{% content-ref url="cisco-snmp.md" %}
[cisco-snmp.md](cisco-snmp.md)
{% endcontent-ref %}
## Od SNMP do RCE
Jeśli masz **ciąg**, który umożliwia **zapisywanie wartości** w usłudze SNMP, możesz go wykorzystać do **wykonywania poleceń**:
{% content-ref url="snmp-rce.md" %}
[snmp-rce.md](snmp-rce.md)
{% endcontent-ref %}
## **Masywne SNMP**
[Braa](https://github.com/mteg/braa) to masowy skaner SNMP. Przeznaczeniem tego narzędzia jest oczywiście wykonywanie zapytań SNMP - ale w przeciwieństwie do snmpwalk z net-snmp, jest ono w stanie zapytać dziesiątki lub setki hostów jednocześnie, i to w jednym procesie. Dlatego zużywa bardzo mało zasobów systemowych i skanuje BARDZO szybko.
Braa implementuje WŁASNY stos SNMP, więc nie potrzebuje żadnych bibliotek SNMP, takich jak net-snmp.
**Składnia:** braa \[Ciąg społecznościowy]@\[Adres IP serwera SNMP]:\[iso id]
```bash
braa ignite123@192.168.1.125:.1.3.6.*
```
To może wydobyć dużo MB informacji, które nie da się przetworzyć ręcznie.
Więc, szukajmy najbardziej interesujących informacji (z [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/)):
### **Urządzenia**
Proces rozpoczyna się od wydobycia danych **sysDesc MIB** (1.3.6.1.2.1.1.1.0) z każdego pliku, aby zidentyfikować urządzenia. Dokonuje się tego za pomocą polecenia **grep**:
```bash
grep ".1.3.6.1.2.1.1.1.0" *.snmp
```
### **Zidentyfikuj prywatny ciąg znaków**
Kluczowym krokiem jest zidentyfikowanie **prywatnego ciągu znaków społecznościowego**, używanego przez organizacje, zwłaszcza na routerach Cisco IOS. Ten ciąg znaków umożliwia wydobycie **konfiguracji działającej** z routerów. Identyfikacja często polega na analizie danych SNMP Trap w poszukiwaniu słowa "trap" za pomocą polecenia **grep**:
```bash
grep -i "trap" *.snmp
```
### **Nazwy użytkowników/Hasła**
Rejestry przechowywane w tabelach MIB są analizowane pod kątem **nieudanych prób logowania**, które przypadkowo mogą zawierać hasła wprowadzone jako nazwy użytkowników. Słowa kluczowe takie jak _fail_, _failed_ lub _login_ są wyszukiwane w celu znalezienia cennych danych:
```bash
grep -i "login\|fail" *.snmp
```
### **Emaile**
W końcu, aby wyodrębnić **adresy e-mail** z danych, używane jest polecenie **grep** z wyrażeniem regularnym, skupiające się na wzorcach pasujących do formatów adresów e-mail:
```bash
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp
```
## Modyfikowanie wartości SNMP
Możesz użyć _**NetScanTools**_ do **modyfikowania wartości**. Będziesz musiał znać **prywatny ciąg znaków**, aby to zrobić.
## Spoofing
Jeśli istnieje lista kontrolna dostępu (ACL), która pozwala tylko niektórym adresom IP na zapytanie usługi SNMP, możesz podszyć się pod jeden z tych adresów wewnątrz pakietu UDP i podsłuchać ruch.
## Badanie plików konfiguracyjnych SNMP
* snmp.conf
* snmpd.conf
* snmp-config.xml
## Automatyczne polecenia HackTricks
```
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
```
\
**Wskazówka dotycząca bug bounty**: **Zarejestruj się** na platformie **Intigriti**, premium platformie bug bounty stworzonej przez hakerów dla hakerów! Dołącz do nas już dziś na [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) i zacznij zarabiać nagrody do **100 000 USD**!
{% embed url="https://go.intigriti.com/hacktricks" %}
Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi trikami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.