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

299 lines
17 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 - Testowanie penetracyjne SNMP
<details>
<summary><strong>Zacznij od zera i zostań ekspertem od hakowania AWS dzięki</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCYJNY**](https://github.com/sponsors/carlospolop)!
* Kup [**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) na GitHubie.
</details>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Jeśli interesuje Cię **kariera w hakerstwie** i hakowanie niemożliwego - **rekrutujemy!** (_wymagana biegła znajomość języka polskiego w mowie i piśmie_).
{% embed url="https://www.stmcyber.com/careers" %}
## 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 **pakiety danych wysyłane z serwera SNMP do klienta bez wyraźnego żądania**.
{% endhint %}
### MIB
Aby zapewnić, że dostęp SNMP działa między producentami i różnymi kombinacjami klient-serwer, została stworzona **Baza Informacji Zarządzania (MIB)**. MIB to **niezależny format przechowywania informacji o urządzeniu**. MIB to **plik tekstowy**, w którym wszystkie **obiekty SNMP** urządzenia są wymienione w **standaryzowanej** hierarchii drzewa. Zawiera co najmniej jeden `Identyfikator Obiektu` (`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ą napisane w formacie tekstowym ASCII opartym na `Notacji Składni Abstrakcyjnej Jedynki` (`ASN.1`). **MIB nie zawierają danych**, ale wyjaśniają **gdzie znaleźć jakie informacje** i jak one wyglądają, zwracają wartości dla konkretnego OID, lub jaki typ danych jest używany.
### OID
**Identyfikatory Obiektów (OID)** odgrywają kluczową rolę. Te unikalne identyfikatory są przeznaczone do zarządzania obiektami w ramach **Bazy Informacji Zarządzania (MIB)**.
Najwyższe poziomy identyfikatorów obiektów MIB, czyli OID, są przydzielane różnym organizacjom ustalającym standardy. To właśnie na tych najwyższych poziomach ustanawiany jest szkielet globalnych praktyk zarządzania i standardów.
Dodatkowo, dostawcom przyznaje się swobodę tworzenia prywatnych gałęzi. W ramach tych gałęzi mają **autonomię do dodawania zarządzanych obiektów związanych z ich własnymi liniami produktów**. Ten system zapewnia, że istnieje strukturalna i zorganizowana metoda identyfikowania i zarządzania szerokim zakresem obiektów różnych dostawców i standardów.
![](<../../.gitbook/assets/SNMP\_OID\_MIB\_Tree (1).png>)
Możesz **przejrzeć** drzewo **OID** z poziomu sieci 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** (np. `1.3.6.1.2.1.1`) przechodząc pod [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ą **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 zdefiniowanych zmiennych protokołu SNMP w MIB-2. Z **OIDów zależnych od tego** można uzyskać interesujące dane hosta (dane systemowe, sieciowe, procesy...)
### **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 ISO i oznacza, że jest to OID. Dlatego wszystkie OIDy zaczynają się od "1"
* 3 to ORG i służy do określenia organizacji, która zbudowała urządzenie.
* 6 to dod lub Departament Obrony, który jest organizacją, która jako pierwsza ustanowiła Internet.
* 1 to 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 organizację prywatną, 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ą zazwyczaj takie same dla wszystkich urządzeń i dają podstawowe informacje o nich. Ta sekwencja liczb będzie taka sama dla wszystkich OIDów, z wyjątkiem gdy urządzenie jest produkowane przez rząd.
Przechodząc do następnego zestawu liczb.
* 1452 podaje nazwę organizacji, która wyprodukowała to urządzenie.
* 1 wyjaśnia typ urządzenia. W tym przypadku jest to budzik.
* 2 określa, że to urządzenie jest zdalną jednostką terminalową.
Pozostałe wartości podają 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, nadal najczęstsza, **uwierzytelnienie oparte jest na ciągu znaków** (ciąg społeczności) przesyłanym w **tekście jawnym** (wszystkie informacje przesyłane są w tekście jawnym). **Wersja 2 i 2c** również przesyłają **ruch w tekście jawnym** i używają **ciągu społeczności jako uwierzytelnienia**.
* **SNMPv3**: Używa lepszego **sposobu uwierzytelniania** i informacje przesyłane są **zaszyfrowane** (atak słownikowy może być przeprowadzony, ale znalezienie poprawnych danych uwierzytelniających byłoby znacznie trudniejsze niż w SNMPv1 i v2).
### Ciągi Społeczności
Jak wspomniano wcześniej, **aby uzyskać dostęp do informacji zapisanych w MIB, należy znać ciąg społeczności w wersjach 1 i 2/2c oraz dane uwierzytelniające w wersji 3.**\
Istnieją **2 rodzaje ciągów społeczności**:
* **`public`** głównie **funkcje tylko do odczytu**
* **`private`** **Odczyt/Zapis** ogólnie
Zauważ, że **możliwość zapisu OID zależy od użytego ciągu społeczności**, więc **nawet** jeśli odkryjesz, że używany jest "**public**", możesz być w stanie **zapisać niektóre 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 społeczności, serwer nie **odpowie**. Dlatego jeśli otrzymasz odpowiedź, został użyty **prawidłowy ciąg społeczności**.
## Porty
[Z Wikipedii](https://en.wikipedia.org/wiki/Simple\_Network\_Management\_Protocol):
* Agent SNMP odbiera żądania na porcie UDP **161**.
* Menedżer 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 [Warstwa Bezpieczeństwa Transportu](https://en.wikipedia.org/wiki/Transport\_Layer\_Security) lub [Datagramowa Warstwa Bezpieczeństwa Transportu](https://en.wikipedia.org/wiki/Datagram\_Transport\_Layer\_Security), żądania są odbierane na porcie **10161**, a powiadomienia są wysyłane na port **10162**.
## Atak Siłowy na Ciąg Społeczności (v1 i v2c)
Aby **odgadnąć ciąg społeczności**, można przeprowadzić atak słownikowy. Sprawdź [tutaj różne sposoby przeprowadzenia ataku siłowego na SNMP](../../generic-methodologies-and-resources/brute-force.md#snmp). Często używanym ciągiem społeczności jest `public`.
## Wyliczanie SNMP
Zaleca się zainstalowanie następującego, 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 poprawny 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" <target>
braa <community string>@<IP>:.1.3.6.* #Bruteforce specific OID
```
Dzięki rozszerzonym zapytaniom (download-mibs) można jeszcze bardziej wyliczyć informacje o systemie za pomocą następującej komendy:
```bash
snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull
```
**SNMP** zawiera wiele informacji o hostingu, a rzeczy, które mogą Cię zainteresować to: **Interfejsy sieciowe** (adresy IPv4 i **IPv6**), Nazwy użytkowników, Czas pracy, Wersja serwera/systemu operacyjnego oraz **procesy**
**uruchomione** (mogą zawierać hasła)....
### **Niebezpieczne ustawienia**
W dziedzinie zarządzania siecią pewne konfiguracje i parametry są kluczowe dla zapewnienia kompleksowego monitorowania i kontroli.
### Ustawienia dostępu
Dwa główne ustawienia umożliwiają dostęp do **pełnego drzewa OID**, co jest istotnym elementem w zarządzaniu siecią:
1. **`rwuser noauth`** jest ustawione w celu umożliwienia pełnego dostępu do drzewa OID bez konieczności uwierzytelniania. To ustawienie jest proste i pozwala na nieograniczony dostęp.
2. Dla bardziej szczegółowej kontroli dostęp może być udzielony 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
Seria wartości **Bazy Informacji Zarządzania (MIB)** jest wykorzystywana do monitorowania różnych aspektów systemu Windows za pomocą SNMP:
* **Procesy systemowe**: Dostępne za pomocą `1.3.6.1.2.1.25.1.6.0`, ten parametr pozwala na 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 którego miejsca uruchamiany jest proces, wykorzystywana jest wartość MIB `1.3.6.1.2.1.25.4.2.1.4`.
* **Jednostki pamięci**: Monitorowanie jednostek pamięci jest ułatwione przez `1.3.6.1.2.1.25.2.3.1.4`.
* **Nazwa oprogramowania**: Do zidentyfikowania zainstalowanego oprogramowania na systemie używane jest `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` pozwala na śledzenie kont użytkowników.
* **Lokalne porty TCP**: Wreszcie, `1.3.6.1.2.1.6.13.1.3` jest przeznaczony do monitorowania lokalnych portów TCP, dostarczając informacji o aktywnych połączeniach sieciowych.
### Cisco
Zajrzyj na tę stronę, jeśli korzystasz z urządzeń Cisco:
{% 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 pozwala Ci **zapisywać 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 %}
## **Masywny SNMP**
[Braa ](https://github.com/mteg/braa)to masowy skaner SNMP. Intencją użycia takiego narzędzia jest oczywiście wykonywanie zapytań SNMP ale w przeciwieństwie do snmpwalk z net-snmp, jest 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 SWÓJ stos SNMP, więc NIE potrzebuje żadnych bibliotek SNMP, takich jak net-snmp.
**Składnia:** braa \[Ciąg społecznościowy]@\[IP serwera SNMP]:\[iso id]
```bash
braa ignite123@192.168.1.125:.1.3.6.*
```
To może wydobyć dużo MB informacji, których nie można 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ści**, używanego przez organizacje, w szczególności na routerach Cisco IOS. Ten ciąg umożliwia wydobycie **konfiguracji działającej** z routerów. Identyfikacja często polega na analizie danych pułapki SNMP pod kątem słowa "trap" za pomocą polecenia **grep**:
```bash
grep -i "trap" *.snmp
```
### **Nazwy użytkowników/Hasła**
Logi przechowywane w tabelach MIB są analizowane pod kątem **nieudanych prób logowania**, które mogą przypadkowo 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**
Wreszcie, aby wydobyć **adresy e-mail** z danych, używane jest polecenie **grep** z wyrażeniem regularnym, skupiając się na wzorcach pasujących do formató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ć.
## Podszycanie się
Jeśli istnieje lista ACL, która zezwala tylko niektórym adresom IP na zapytanie usługi SMNP, możesz podszyć się pod jeden z tych adresów wewnątrz pakietu UDP i podsłuchać ruch.
## Sprawdzanie plików konfiguracyjnych SNMP
* snmp.conf
* snmpd.conf
* snmp-config.xml
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Jeśli interesuje Cię **kariera w dziedzinie hakowania** i hakowanie tego, co nie do złamania - **rekrutujemy!** (_wymagana biegła znajomość języka polskiego w mowie i piśmie_).
{% embed url="https://www.stmcyber.com/careers" %}
## 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
```
<details>
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Kup [**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.
</details>