161,162,10161,10162/udp - Pentesting SNMP

Nauka hakowania AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Jeśli interesuje Cię kariera w dziedzinie hakowania i hakowanie niemożliwych do zhakowania - rekrutujemy! (wymagana biegła znajomość języka polskiego w mowie i piśmie).

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, urządzenia IoT...).

PORT    STATE SERVICE REASON                 VERSION
161/udp open  snmp    udp-response ttl 244   ciscoSystems SNMPv3 server (public)

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.

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 zapytywalne 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 Abstrakcyjnej Notacji Składni Jedynki (ASN.1). MIBy nie zawierają danych, ale wyjaśniają gdzie znaleźć jakie informacje i jak to wygląda, zwracając 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.

Ponadto, dostawcom przyznaje się swobodę tworzenia prywatnych gałęzi. W ramach tych gałęzi mają autonomię do dodawania zarządzanych obiektów istotnych dla swoich linii produktów. Ten system zapewnia, że istnieje strukturalna i zorganizowana metoda identyfikowania i zarządzania szeroką gamą obiektów różnych dostawców i standardów.

Możesz nawigować przez drzewo OID z poziomu strony internetowej tutaj: 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. Istnieją znane OIDs takie jak te wewnątrz 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:

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 zostało zbudowane przez organizację prywatną, a nie rządową.

  • 1 – ta wartość oznacza, że urządzenie zostało zbudowane 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 sytuacji, gdy urządzenie zostało zbudowane przez rząd.

Przechodząc do następnego zestawu liczb.

  • 1452 – podaje nazwę organizacji, która wyprodukowała to urządzenie.

  • 1 – określa 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ść zapisywania OID zależy od użytego ciągu społeczności, więc nawet jeśli odkryjesz, że używany jest ciąg "public", możesz być w stanie zapisać niektóre wartości. Istnieją również obiekty, które zawsze są "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:

Atak Brute-Force 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 brute-force przeciwko 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:

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:

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ą poniższej komendy:

snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull

SNMP ma wiele informacji na temat hosta, 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 kluczowym 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ć, skąd uruchamiany jest proces, używana 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: Aby zidentyfikować oprogramowanie zainstalowane 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.

  • Porty lokalne 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:

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ń:

Masywny SNMP

Braa to masowy skaner SNMP. Zamierzonym zastosowaniem 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]:[id iso]

braa ignite123@192.168.1.125:.1.3.6.*

To może wydobyć wiele 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/):

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:

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:

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:

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:

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

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).

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

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Last updated