mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
265 lines
20 KiB
Markdown
265 lines
20 KiB
Markdown
# 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, виділені різним організаціям, що встановлюють стандарти. Саме в цих верхніх рівнях встановлюється структура для глобальних практик управління та стандартів.
|
||
|
||
Крім того, постачальникам надається свобода створювати приватні гілки. У межах цих гілок вони мають **автономію включати керовані об'єкти, що стосуються їхніх власних продуктів**. Ця система забезпечує структурований і організований метод для ідентифікації та управління широким спектром об'єктів серед різних постачальників і стандартів.
|
||
|
||
.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}}
|