# 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. ![](<../../images/SNMP_OID_MIB_Tree (1).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" braa @:.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 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}}