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}}
|
||
|
||
|
||
## Podstawowe informacje
|
||
|
||
**SNMP - Prosty protokół zarządzania siecią** to protokół używany do monitorowania różnych urządzeń w sieci (takich jak routery, przełączniki, drukarki, IoT...).
|
||
```
|
||
PORT STATE SERVICE REASON VERSION
|
||
161/udp open snmp udp-response ttl 244 ciscoSystems SNMPv3 server (public)
|
||
```
|
||
> [!TIP]
|
||
> SNMP używa również portu **162/UDP** do **pułapek**. Są to dane **pakiety wysyłane z serwera SNMP do klienta bez wyraźnego żądania**.
|
||
|
||
### MIB
|
||
|
||
Aby zapewnić, że dostęp do SNMP działa w różnych producentów i z różnymi kombinacjami klient-serwer, stworzono **Management Information Base (MIB)**. MIB to **niezależny format przechowywania informacji o urządzeniach**. MIB to plik **tekstowy**, w którym wszystkie zapytania **obiekty SNMP** urządzenia są wymienione w **standaryzowanej** hierarchii drzewiastej. Zawiera co **najmniej jeden `Object Identifier` (`OID`)**, który, oprócz niezbędnego **unikalnego adresu** i **nazwa**, dostarcza również informacji o typie, prawach dostępu i opisie danego obiektu.\
|
||
Pliki MIB są napisane w formacie tekstowym ASCII w `Abstract Syntax Notation One` (`ASN.1`). **MIB-y nie zawierają danych**, ale wyjaśniają **gdzie znaleźć jakie informacje** i jak one wyglądają, jakie wartości zwracają dla konkretnego OID, lub jaki typ danych jest używany.
|
||
|
||
### OIDs
|
||
|
||
**Object Identifiers (OIDs)** odgrywają kluczową rolę. Te unikalne identyfikatory są zaprojektowane 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 w tych najwyższych poziomach ustalany jest framework dla globalnych praktyk i standardów zarządzania.
|
||
|
||
Ponadto, dostawcy mają swobodę tworzenia prywatnych gałęzi. W ramach tych gałęzi mają **autonomię do włączania zarządzanych obiektów związanych z ich własnymi liniami produktów**. Ten system zapewnia, że istnieje uporządkowana i zorganizowana metoda identyfikacji i zarządzania szeroką gamą obiektów w różnych dostawcach i standardach.
|
||
|
||
.png>)
|
||
|
||
Możesz **nawigować** przez **drzewo OID** w 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** (jak `1.3.6.1.2.1.1`) uzyskując dostęp 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ą **znane OIDs** jak te w [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1), które odnoszą się do zmiennych Simple Network Management Protocol (SNMP) zdefiniowanych w MIB-2. A z **OID-ów zależnych od tego** możesz uzyskać interesujące dane o hoście (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 analiza tego adresu.
|
||
|
||
- 1 – nazywa się to ISO i ustala, że jest to OID. Dlatego wszystkie OIDs zaczynają się od „1”
|
||
- 3 – nazywa się 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, aby oznaczyć, że wszystkie komunikacje będą 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 podmiot gospodarczy.
|
||
|
||
Te pierwsze sześć wartości zazwyczaj są 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 sytuacji, 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 jednostką terminalową zdalną.
|
||
|
||
Pozostałe wartości podają szczegółowe informacje o urządzeniu.
|
||
|
||
- 5 – oznacza punkt alarmowy dyskretny.
|
||
- 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ęściej używana, **uwierzytelnianie opiera się na ciągu** (ciąg społeczności), który podróżuje w **czystym tekście** (wszystkie informacje podróżują w czystym tekście). **Wersja 2 i 2c** również wysyłają **ruch w czystym tekście** i używają **ciągu społeczności jako uwierzytelnienia**.
|
||
- **SNMPv3**: Używa lepszej formy **uwierzytelniania** i informacje podróżują **szyfrowane** (można przeprowadzić **atak słownikowy**, ale byłoby znacznie trudniej znaleźć poprawne dane uwierzytelniające niż w SNMPv1 i v2).
|
||
|
||
### Ciągi społeczności
|
||
|
||
Jak wspomniano wcześniej, **aby uzyskać dostęp do informacji zapisanych w MIB, musisz znać ciąg społeczności w wersjach 1 i 2/2c oraz dane uwierzytelniające w wersji 3.**\
|
||
Istnieją **2 typy 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żywanego ciągu społeczności**, więc **nawet** jeśli znajdziesz, że używany jest „**public**”, możesz być w stanie **zapisać niektóre wartości.** Mogą również istnieć 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 **złego** ciągu społeczności, serwer nie **odpowie**. Więc, jeśli odpowiada, użyto **ważnego ciągu 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żywany jest z [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**.
|
||
|
||
## Atak Brute-Force na Ciąg Społeczności (v1 i v2c)
|
||
|
||
Aby **zgadnąć ciąg społeczności**, możesz przeprowadzić atak słownikowy. Sprawdź [tutaj różne sposoby przeprowadzenia ataku brute-force przeciwko SNMP](../../generic-hacking/brute-force.md#snmp). Często używanym ciągiem społeczności jest `public`.
|
||
|
||
## Enumeracja 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 ważny 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żliwe jest uzyskanie jeszcze więcej informacji o systemie za pomocą następującego polecenia:
|
||
```bash
|
||
snmpwalk -v X -c public <IP> 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 działania, wersja serwera/OS oraz **procesy**
|
||
|
||
**działające** (mogą zawierać hasła)....
|
||
|
||
### **Niebezpieczne ustawienia**
|
||
|
||
W dziedzinie zarządzania siecią, niektóre 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**, które jest kluczowym elementem w zarządzaniu siecią:
|
||
|
||
1. **`rwuser noauth`** jest ustawione, aby zezwolić na pełny dostęp do drzewa OID bez potrzeby uwierzytelniania. To ustawienie jest proste i pozwala na nieograniczony dostęp.
|
||
2. Dla bardziej szczegółowej kontroli, dostęp można przyznać za pomocą:
|
||
- **`rwcommunity`** dla adresów **IPv4**, oraz
|
||
- **`rwcommunity6`** dla adresów **IPv6**.
|
||
|
||
Obie komendy wymagają **ciągu społeczności** oraz odpowiedniego adresu IP, oferując pełny dostęp niezależnie od pochodzenia żądania.
|
||
|
||
### Parametry SNMP dla Microsoft Windows
|
||
|
||
Seria **wartości Management Information Base (MIB)** jest wykorzystywana do monitorowania różnych aspektów systemu Windows za pomocą SNMP:
|
||
|
||
- **Procesy systemowe**: Dostępne przez `1.3.6.1.2.1.25.1.6.0`, ten parametr pozwala na monitorowanie aktywnych procesów w systemie.
|
||
- **Działające programy**: Wartość `1.3.6.1.2.1.25.4.2.1.2` jest przeznaczona do śledzenia aktualnie działających programów.
|
||
- **Ścieżka procesów**: Aby określić, skąd 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 ułatwia `1.3.6.1.2.1.25.2.3.1.4`.
|
||
- **Nazwa oprogramowania**: Aby zidentyfikować zainstalowane oprogramowanie w systemie, stosuje 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` pozwala na śledzenie kont użytkowników.
|
||
- **Lokalne porty TCP**: Na koniec, `1.3.6.1.2.1.6.13.1.3` jest przeznaczone do monitorowania lokalnych portów TCP, dostarczając informacji o aktywnych połączeniach sieciowych.
|
||
|
||
### Cisco
|
||
|
||
Zobacz tę stronę, jeśli masz sprzęt Cisco:
|
||
|
||
|
||
{{#ref}}
|
||
cisco-snmp.md
|
||
{{#endref}}
|
||
|
||
## Od SNMP do RCE
|
||
|
||
Jeśli masz **ciąg**, który pozwala na **zapisywanie wartości** w usłudze SNMP, możesz być w stanie go nadużyć, aby **wykonać polecenia**:
|
||
|
||
|
||
{{#ref}}
|
||
snmp-rce.md
|
||
{{#endref}}
|
||
|
||
## **Masowe SNMP**
|
||
|
||
[Braa](https://github.com/mteg/braa) to masowy skaner SNMP. Zamierzonym zastosowaniem tego 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, w jednym procesie. Dzięki temu zużywa bardzo mało zasobów systemowych i wykonuje skanowanie 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ści]@\ [IP serwera SNMP]:\[iso id]
|
||
```bash
|
||
braa ignite123@192.168.1.125:.1.3.6.*
|
||
```
|
||
To może wyodrębnić wiele MB informacji, których nie możesz przetworzyć ręcznie.
|
||
|
||
Zatem poszukajmy 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 zaczyna się od wyodrębnienia **danych MIB sysDesc** (1.3.6.1.2.1.1.1.0) z każdego pliku w celu zidentyfikowania urządzeń. Osiąga się to za pomocą **polecenia grep**:
|
||
```bash
|
||
grep ".1.3.6.1.2.1.1.1.0" *.snmp
|
||
```
|
||
### **Zidentyfikuj Prywatny Ciąg**
|
||
|
||
A crucial step involves identifying the **private community string** used by organizations, particularly on Cisco IOS routers. This string enables the extraction of **running configurations** from routers. The identification often relies on analyzing SNMP Trap data for the word "trap" with a **grep command**:
|
||
```bash
|
||
grep -i "trap" *.snmp
|
||
```
|
||
### **Nazwy użytkowników/Hasła**
|
||
|
||
Logi przechowywane w tabelach MIB są badane 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**
|
||
|
||
Na koniec, aby wyodrębnić **adresy e-mail** z danych, używa się **polecenia grep** z wyrażeniem regularnym, koncentrując się na wzorcach, które pasują 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 **modyfikacji wartości**. Musisz znać **prywatny ciąg**, aby to zrobić.
|
||
|
||
## Fałszowanie
|
||
|
||
Jeśli istnieje ACL, który pozwala tylko niektórym adresom IP na zapytania do usługi SMNP, możesz sfałszować jeden z tych adresów wewnątrz pakietu UDP i podsłuchiwać ruch.
|
||
|
||
## Sprawdzenie 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.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}}
|