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

Reading time: 10 minutes

tip

Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Wsparcie HackTricks

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)

note

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

Możesz nawigować przez drzewo OID w sieci tutaj: 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.
Istnieją znane OIDs jak te w 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:

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 OID-y 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 OID-ów, 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ą zdalnego dostępu.

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 w ogóle

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żnych ciągów społeczności.

Porty

Z Wikipedii:

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. 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 rzeczy, które mogą być interesujące, to: 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 MIB (Management Information Base) 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 pochodzi 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 to wykorzystać do wykonywania poleceń:

{{#ref}} snmp-rce.md {{#endref}}

Masowe SNMP

Braa to masowy skaner SNMP. Zamierzonym użyciem 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, w jednym procesie. Dzięki temu 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ś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/):

Urządzenia

Proces zaczyna się od wyodrębnienia sysDesc MIB data (1.3.6.1.2.1.1.1.0) z każdego pliku w celu zidentyfikowania urządzeń. Osiąga się to za pomocą grep command:

bash
grep ".1.3.6.1.2.1.1.1.0" *.snmp

Zidentyfikuj Prywatny Ciąg

Krytycznym krokiem jest zidentyfikowanie prywatnego ciągu społeczności używanego przez organizacje, szczególnie na routerach Cisco IOS. Ten ciąg umożliwia wydobycie aktualnych konfiguracji z routerów. Identyfikacja często opiera się 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

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. Będziesz musiał 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.

Zbadaj pliki konfiguracyjne 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


tip

Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Wsparcie HackTricks