# 161,162,10161,10162/udp - Pentesting SNMP {{#include ../../banners/hacktricks-training.md}} ## Основна інформація **SNMP - Simple Network Management Protocol** є протоколом, що використовується для моніторингу різних пристроїв у мережі (таких як маршрутизатори, комутатори, принтери, IoT...). ``` PORT STATE SERVICE REASON VERSION 161/udp open snmp udp-response ttl 244 ciscoSystems SNMPv3 server (public) ``` > [!NOTE] > SNMP також використовує порт **162/UDP** для **трапів**. Це дані **пакети, надіслані з SNMP сервера до клієнта без явного запиту**. ### MIB Щоб забезпечити роботу доступу SNMP між виробниками та з різними комбінаціями клієнт-сервер, була створена **База управлінської інформації (MIB)**. MIB є **незалежним форматом для зберігання інформації про пристрої**. MIB - це **текстовий** файл, в якому всі запитувані **об'єкти SNMP** пристрою перераховані в **стандартизованій** ієрархії дерева. Він містить принаймні один `Object Identifier` (`OID`), який, крім необхідної **унікальної адреси** та **імені**, також надає інформацію про тип, права доступу та опис відповідного об'єкта.\ Файли MIB написані в `Abstract Syntax Notation One` (`ASN.1`) у форматі ASCII тексту. **MIB не містять даних**, але пояснюють **де знайти яку інформацію** і як вона виглядає, які значення повертаються для конкретного OID або який тип даних використовується. ### OIDs **Ідентифікатори об'єктів (OIDs)** відіграють важливу роль. Ці унікальні ідентифікатори призначені для управління об'єктами в **Базі управлінської інформації (MIB)**. Найвищі рівні ідентифікаторів об'єктів MIB, або OIDs, виділені різним організаціям, що встановлюють стандарти. Саме в цих верхніх рівнях встановлюється структура для глобальних практик управління та стандартів. Крім того, постачальникам надається свобода створювати приватні гілки. У межах цих гілок вони мають **автономію включати керовані об'єкти, що стосуються їхніх власних продуктів**. Ця система забезпечує структурований і організований метод для ідентифікації та управління широким спектром об'єктів серед різних постачальників і стандартів. ![](<../../images/SNMP_OID_MIB_Tree (1).png>) Ви можете **перейти** через **дерево OID** з вебу тут: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) або **подивитися, що означає OID** (наприклад, `1.3.6.1.2.1.1`), звернувшись до [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1).\ Є деякі **відомі OIDs**, такі як ті, що знаходяться всередині [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1), які посилаються на змінні, визначені MIB-2 для простого протоколу управління мережею (SNMP). І з **OID, що очікують від цього**, ви можете отримати цікаві дані про хост (дані системи, дані мережі, дані процесів...) ### **Приклад OID** [**Приклад звідси**](https://www.netadmintools.com/snmp-mib-and-oids/): **`1 . 3 . 6 . 1 . 4 . 1 . 1452 . 1 . 2 . 5 . 1 . 3. 21 . 1 . 4 . 7`** Ось розбивка цієї адреси. - 1 – це називається ISO, і це встановлює, що це OID. Саме тому всі OID починаються з "1". - 3 – це називається ORG, і використовується для вказівки організації, яка створила пристрій. - 6 – це dod або Міністерство оборони, яке є організацією, що першою встановила Інтернет. - 1 – це значення Інтернету, яке позначає, що всі комунікації відбуватимуться через Інтернет. - 4 – це значення визначає, що цей пристрій виготовлений приватною організацією, а не урядовою. - 1 – це значення позначає, що пристрій виготовлений підприємством або бізнес-структурою. Ці перші шість значень, як правило, однакові для всіх пристроїв і надають основну інформацію про них. Ця послідовність чисел буде однаковою для всіх OID, за винятком випадків, коли пристрій виготовлено урядом. Продовжуючи до наступного набору чисел. - 1452 – вказує на назву організації, яка виготовила цей пристрій. - 1 – пояснює тип пристрою. У цьому випадку це будильник. - 2 – визначає, що цей пристрій є віддаленим терміналом. Інші значення надають специфічну інформацію про пристрій. - 5 – позначає дискретну точку тривоги. - 1 – конкретна точка в пристрої. - 3 – порт. - 21 – адреса порту. - 1 – дисплей для порту. - 4 – номер точки. - 7 – стан точки. ### Версії SNMP Існує 2 важливі версії SNMP: - **SNMPv1**: Основна, вона все ще найпоширеніша, **автентифікація базується на рядку** (рядок спільноти), який передається в **звичайному тексті** (вся інформація передається в звичайному тексті). **Версії 2 і 2c** також передають **трафік у звичайному тексті** і використовують **рядок спільноти як автентифікацію**. - **SNMPv3**: Використовує кращу **форму автентифікації**, і інформація передається **зашифрованою** (може бути виконано **атака методом підбору**, але знайти правильні дані буде набагато важче, ніж у SNMPv1 і v2). ### Рядки спільноти Як вже згадувалося, **для доступу до інформації, збереженої в MIB, вам потрібно знати рядок спільноти у версіях 1 і 2/2c та облікові дані у версії 3.**\ Існує **2 типи рядків спільноти**: - **`public`** в основному **тільки для читання** функцій. - **`private`** **Читання/Запис** в загальному. Зверніть увагу, що **можливість запису OID залежить від використаного рядка спільноти**, тому **навіть** якщо ви виявите, що використовується "**public**", ви можете мати можливість **записувати деякі значення.** Також можуть існувати об'єкти, які **завжди "тільки для читання".**\ Якщо ви намагаєтеся **записати** об'єкт, ви отримаєте **помилку `noSuchName` або `readOnly`**. У версіях 1 і 2/2c, якщо ви використовуєте **поганий** рядок спільноти, сервер не **відповість**. Тож, якщо він відповідає, то **використовувався дійсний рядок спільноти**. ## Порти [З Вікіпедії](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol): - SNMP агент отримує запити на UDP порт **161**. - Менеджер отримує сповіщення ([Traps](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol#Trap) та [InformRequests](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol#InformRequest)) на порт **162**. - Коли використовується з [Transport Layer Security](https://en.wikipedia.org/wiki/Transport_Layer_Security) або [Datagram Transport Layer Security](https://en.wikipedia.org/wiki/Datagram_Transport_Layer_Security), запити отримуються на порт **10161**, а сповіщення надсилаються на порт **10162**. ## Брутфорс рядка спільноти (v1 і v2c) Щоб **вгадати рядок спільноти**, ви можете виконати атаку методом підбору. Перевірте [тут різні способи виконання брутфорс-атаки проти SNMP](../../generic-hacking/brute-force.md#snmp). Часто використовуваний рядок спільноти - `public`. ## Перерахування SNMP Рекомендується встановити наступне, щоб побачити, що означає **кожен OID, зібраний** з пристрою: ```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 ``` Якщо ви знаєте дійсний рядок спільноти, ви можете отримати доступ до даних за допомогою **SNMPWalk** або **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 ``` Дякуючи розширеним запитам (download-mibs), можливо перерахувати ще більше інформації про систему за допомогою наступної команди: ```bash snmpwalk -v X -c public NET-SNMP-EXTEND-MIB::nsExtendOutputFull ``` **SNMP** має багато інформації про хост, і речі, які можуть вас зацікавити, це: **мережеві інтерфейси** (IPv4 та **IPv6** адреси), імена користувачів, час роботи, версія сервера/ОС та **процеси** **які працюють** (можуть містити паролі).... ### **Небезпечні налаштування** У сфері управління мережею певні конфігурації та параметри є ключовими для забезпечення всебічного моніторингу та контролю. ### Налаштування доступу Два основні налаштування дозволяють доступ до **повного OID дерева**, що є важливим компонентом в управлінні мережею: 1. **`rwuser noauth`** встановлено для надання повного доступу до OID дерева без необхідності аутентифікації. Це налаштування є простим і дозволяє необмежений доступ. 2. Для більш специфічного контролю доступ може бути наданий за допомогою: - **`rwcommunity`** для **IPv4** адрес, та - **`rwcommunity6`** для **IPv6** адрес. Обидві команди вимагають **рядок спільноти** та відповідну IP-адресу, пропонуючи повний доступ незалежно від походження запиту. ### Параметри SNMP для Microsoft Windows Серія **значень бази управлінської інформації (MIB)** використовується для моніторингу різних аспектів системи Windows через SNMP: - **Системні процеси**: Доступно через `1.3.6.1.2.1.25.1.6.0`, цей параметр дозволяє моніторити активні процеси в системі. - **Запущені програми**: Значення `1.3.6.1.2.1.25.4.2.1.2` призначене для відстеження програм, які наразі працюють. - **Шлях до процесів**: Щоб визначити, звідки запускається процес, використовується значення MIB `1.3.6.1.2.1.25.4.2.1.4`. - **Одиниці зберігання**: Моніторинг одиниць зберігання здійснюється за допомогою `1.3.6.1.2.1.25.2.3.1.4`. - **Назва програмного забезпечення**: Для ідентифікації програмного забезпечення, встановленого на системі, використовується `1.3.6.1.2.1.25.6.3.1.2`. - **Облікові записи користувачів**: Значення `1.3.6.1.4.1.77.1.2.25` дозволяє відстежувати облікові записи користувачів. - **Локальні порти TCP**: Нарешті, `1.3.6.1.2.1.6.13.1.3` призначене для моніторингу локальних портів TCP, надаючи інформацію про активні мережеві з'єднання. ### Cisco Перегляньте цю сторінку, якщо у вас є обладнання Cisco: {{#ref}} cisco-snmp.md {{#endref}} ## Від SNMP до RCE Якщо у вас є **рядок**, який дозволяє вам **записувати значення** всередині служби SNMP, ви можете зловживати цим для **виконання команд**: {{#ref}} snmp-rce.md {{#endref}} ## **Масове SNMP** [Braa ](https://github.com/mteg/braa) є масовим сканером SNMP. Передбачуване використання такого інструменту, звичайно, полягає в здійсненні запитів SNMP – але на відміну від snmpwalk з net-snmp, він здатний запитувати десятки або сотні хостів одночасно, і в одному процесі. Таким чином, він споживає дуже мало системних ресурсів і виконує сканування ДУЖЕ швидко. Braa реалізує свій ВЛАСНИЙ стек snmp, тому йому НЕ потрібні жодні бібліотеки SNMP, такі як net-snmp. **Синтаксис:** braa \[Community-string]@\[IP of SNMP server]:\[iso id] ```bash braa ignite123@192.168.1.125:.1.3.6.* ``` Це може витягнути багато МБ інформації, яку ви не можете обробити вручну. Отже, давайте шукати найцікавішу інформацію (з [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/)): ### **Пристрої** Процес починається з витягування **sysDesc MIB data** (1.3.6.1.2.1.1.1.0) з кожного файлу для ідентифікації пристроїв. Це здійснюється за допомогою **grep command**: ```bash grep ".1.3.6.1.2.1.1.1.0" *.snmp ``` ### **Визначити приватний рядок** Ключовим кроком є визначення **приватного рядка спільноти**, що використовується організаціями, особливо на маршрутизаторах Cisco IOS. Цей рядок дозволяє витягувати **поточні конфігурації** з маршрутизаторів. Визначення часто базується на аналізі даних SNMP Trap на наявність слова "trap" за допомогою **grep команди**: ```bash grep -i "trap" *.snmp ``` ### **Імена користувачів/Паролі** Logs stored within MIB tables are examined for **failed logon attempts**, which might accidentally include passwords entered as usernames. Keywords such as _fail_, _failed_, or _login_ are searched to find valuable data: ```bash grep -i "login\|fail" *.snmp ``` ### **Emails** Нарешті, для витягування **адрес електронної пошти** з даних використовується **grep команда** з регулярним виразом, зосереджуючись на шаблонах, які відповідають форматам електронної пошти: ```bash grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp ``` ## Модифікація значень SNMP Ви можете використовувати _**NetScanTools**_ для **модифікації значень**. Вам потрібно знати **приватний рядок**, щоб це зробити. ## Спуфінг Якщо є ACL, який дозволяє лише деяким IP запитувати службу SMNP, ви можете спуфити одну з цих адрес у UDP-пакеті та прослухати трафік. ## Перевірка конфігураційних файлів SNMP - snmp.conf - snmpd.conf - snmp-config.xml ## Автоматичні команди 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}}