265 lines
20 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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" <target>
braa <community string>@<IP>:.1.3.6.* #Bruteforce specific OID
```
Дякуючи розширеним запитам (download-mibs), можливо перерахувати ще більше інформації про систему за допомогою наступної команди:
```bash
snmpwalk -v X -c public <IP> 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}}