hacktricks/network-services-pentesting/pentesting-snmp/README.md

301 lines
18 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
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_se requiere polaco fluido escrito y hablado_).
{% embed url="https://www.stmcyber.com/careers" %}
## Basic Information
**SNMP - Protocolo Simple de Administración de Red** es un protocolo utilizado para monitorear diferentes dispositivos en la red (como enrutadores, conmutadores, impresoras, IoTs...).
```
PORT STATE SERVICE REASON VERSION
161/udp open snmp udp-response ttl 244 ciscoSystems SNMPv3 server (public)
```
{% hint style="info" %}
SNMP también utiliza el puerto **162/UDP** para **traps**. Estos son datos **paquetes enviados desde el servidor SNMP al cliente sin ser solicitados explícitamente**.
{% endhint %}
### MIB
Para asegurar que el acceso SNMP funcione entre diferentes fabricantes y con diferentes combinaciones de cliente-servidor, se creó la **Base de Información de Gestión (MIB)**. MIB es un **formato independiente para almacenar información del dispositivo**. Un MIB es un **archivo de texto** en el que se enumeran todos los **objetos SNMP** consultables de un dispositivo en una jerarquía de árbol **estandarizada**. Contiene al **menos un `Identificador de Objeto` (`OID`)**, que, además de la **dirección única** necesaria y un **nombre**, también proporciona información sobre el tipo, derechos de acceso y una descripción del respectivo objeto.\
Los archivos MIB están escritos en el formato de texto ASCII basado en `Notación de Sintaxis Abstracta Uno` (`ASN.1`). Los **MIB no contienen datos**, pero explican **dónde encontrar qué información** y cómo se ve, qué valores devuelve para el OID específico, o qué tipo de datos se utiliza.
### OIDs
**Identificadores de Objetos (OIDs)** juegan un papel crucial. Estos identificadores únicos están diseñados para gestionar objetos dentro de una **Base de Información de Gestión (MIB)**.
Los niveles más altos de los IDs de objetos MIB, o OIDs, están asignados a diversas organizaciones de establecimiento de estándares. Es dentro de estos niveles superiores donde se establece el marco para las prácticas y estándares de gestión global.
Además, se otorga a los proveedores la libertad de establecer ramas privadas. Dentro de estas ramas, tienen la **autonomía para incluir objetos gestionados pertinentes a sus propias líneas de productos**. Este sistema asegura que haya un método estructurado y organizado para identificar y gestionar una amplia variedad de objetos a través de diferentes proveedores y estándares.
![](<../../.gitbook/assets/SNMP\_OID\_MIB\_Tree (1).png>)
Puedes **navegar** a través de un **árbol OID** desde la web aquí: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) o **ver qué significa un OID** (como `1.3.6.1.2.1.1`) accediendo a [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1).\
Hay algunos **OID bien conocidos** como los que están dentro de [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1) que hacen referencia a las variables del Protocolo Simple de Gestión de Red (SNMP) definidas en MIB-2. Y desde los **OID pendientes de este** puedes obtener algunos datos interesantes del host (datos del sistema, datos de red, datos de procesos...)
### **Ejemplo de OID**
[**Ejemplo de aquí**](https://www.netadmintools.com/snmp-mib-and-oids/):
**`1 . 3 . 6 . 1 . 4 . 1 . 1452 . 1 . 2 . 5 . 1 . 3. 21 . 1 . 4 . 7`**
Aquí hay un desglose de esta dirección.
* 1 esto se llama el ISO y establece que este es un OID. Por eso todos los OIDs comienzan con "1"
* 3 esto se llama ORG y se utiliza para especificar la organización que fabricó el dispositivo.
* 6 este es el dod o el Departamento de Defensa, que es la organización que estableció primero Internet.
* 1 este es el valor de internet para denotar que todas las comunicaciones ocurrirán a través de Internet.
* 4 este valor determina que este dispositivo es fabricado por una organización privada y no por una gubernamental.
* 1 este valor denota que el dispositivo es fabricado por una empresa o entidad comercial.
Estos primeros seis valores tienden a ser los mismos para todos los dispositivos y te dan la información básica sobre ellos. Esta secuencia de números será la misma para todos los OIDs, excepto cuando el dispositivo es fabricado por el gobierno.
Pasando al siguiente conjunto de números.
* 1452 da el nombre de la organización que fabricó este dispositivo.
* 1 explica el tipo de dispositivo. En este caso, es un reloj despertador.
* 2 determina que este dispositivo es una unidad terminal remota.
El resto de los valores dan información específica sobre el dispositivo.
* 5 denota un punto de alarma discreto.
* 1 punto específico en el dispositivo
* 3 puerto
* 21 dirección del puerto
* 1 visualización para el puerto
* 4 número de punto
* 7 estado del punto
### Versiones de SNMP
Hay 2 versiones importantes de SNMP:
* **SNMPv1**: Principal, sigue siendo la más frecuente, la **autenticación se basa en una cadena** (cadena de comunidad) que viaja en **texto plano** (toda la información viaja en texto plano). **La versión 2 y 2c** también envían el **tráfico en texto plano** y utilizan una **cadena de comunidad como autenticación**.
* **SNMPv3**: Utiliza una mejor forma de **autenticación** y la información viaja **encriptada** (se podría realizar un **ataque de diccionario**, pero sería mucho más difícil encontrar las credenciales correctas que en SNMPv1 y v2).
### Cadenas de Comunidad
Como se mencionó antes, **para acceder a la información guardada en el MIB necesitas conocer la cadena de comunidad en las versiones 1 y 2/2c y las credenciales en la versión 3.**\
Hay **2 tipos de cadenas de comunidad**:
* **`public`** principalmente funciones **solo de lectura**
* **`private`** **Lectura/Escritura** en general
Ten en cuenta que **la capacidad de escritura de un OID depende de la cadena de comunidad utilizada**, así que **incluso** si encuentras que se está utilizando "**public**", podrías ser capaz de **escribir algunos valores.** También, puede **existir** objetos que son **siempre "Solo Lectura".**\
Si intentas **escribir** un objeto se recibe un error **`noSuchName` o `readOnly`**.\*\*.\*\*
En las versiones 1 y 2/2c, si usas una **mala** cadena de comunidad, el servidor no **responderá**. Así que, si responde, se utilizó una **cadena de comunidad válida**.
## Puertos
[De Wikipedia](https://en.wikipedia.org/wiki/Simple\_Network\_Management\_Protocol):
* El agente SNMP recibe solicitudes en el puerto UDP **161**.
* El administrador recibe notificaciones ([Traps](https://en.wikipedia.org/wiki/Simple\_Network\_Management\_Protocol#Trap) y [InformRequests](https://en.wikipedia.org/wiki/Simple\_Network\_Management\_Protocol#InformRequest)) en el puerto **162**.
* Cuando se utiliza con [Seguridad de Capa de Transporte](https://en.wikipedia.org/wiki/Transport\_Layer\_Security) o [Seguridad de Transporte de Datagramas](https://en.wikipedia.org/wiki/Datagram\_Transport\_Layer\_Security), las solicitudes se reciben en el puerto **10161** y las notificaciones se envían al puerto **10162**.
## Fuerza Bruta de la Cadena de Comunidad (v1 y v2c)
Para **adivinar la cadena de comunidad** podrías realizar un ataque de diccionario. Consulta [aquí diferentes formas de realizar un ataque de fuerza bruta contra SNMP](../../generic-methodologies-and-resources/brute-force.md#snmp). Una cadena de comunidad frecuentemente utilizada es `public`.
## Enumerando SNMP
Se recomienda instalar lo siguiente para ver qué significa **cada OID recopilado** del dispositivo:
```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
```
Si conoces una cadena de comunidad válida, puedes acceder a los datos utilizando **SNMPWalk** o **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
```
Gracias a las consultas extendidas (download-mibs), es posible enumerar aún más sobre el sistema con el siguiente comando :
```bash
snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull
```
**SNMP** tiene mucha información sobre el host y cosas que pueden resultar interesantes son: **Interfaces de red** (dirección **IPv4** y **IPv6**), Nombres de usuario, Tiempo de actividad, Versión del servidor/SO, y **procesos**
**en ejecución** (puede contener contraseñas)....
### **Configuraciones Peligrosas**
En el ámbito de la gestión de redes, ciertas configuraciones y parámetros son clave para garantizar una supervisión y control completos.
### Configuraciones de Acceso
Dos configuraciones principales permiten el acceso al **árbol OID completo**, que es un componente crucial en la gestión de redes:
1. **`rwuser noauth`** está configurado para permitir el acceso completo al árbol OID sin necesidad de autenticación. Esta configuración es sencilla y permite un acceso sin restricciones.
2. Para un control más específico, se puede otorgar acceso utilizando:
* **`rwcommunity`** para direcciones **IPv4**, y
* **`rwcommunity6`** para direcciones **IPv6**.
Ambos comandos requieren una **cadena de comunidad** y la dirección IP relevante, ofreciendo acceso completo independientemente del origen de la solicitud.
### Parámetros SNMP para Microsoft Windows
Una serie de **valores de la Base de Información de Gestión (MIB)** se utilizan para monitorear varios aspectos de un sistema Windows a través de SNMP:
* **Procesos del Sistema**: Accedido a través de `1.3.6.1.2.1.25.1.6.0`, este parámetro permite el monitoreo de procesos activos dentro del sistema.
* **Programas en Ejecución**: El valor `1.3.6.1.2.1.25.4.2.1.2` está designado para rastrear programas actualmente en ejecución.
* **Ruta de Procesos**: Para determinar de dónde se está ejecutando un proceso, se utiliza el valor MIB `1.3.6.1.2.1.25.4.2.1.4`.
* **Unidades de Almacenamiento**: El monitoreo de unidades de almacenamiento se facilita mediante `1.3.6.1.2.1.25.2.3.1.4`.
* **Nombre del Software**: Para identificar el software instalado en un sistema, se emplea `1.3.6.1.2.1.25.6.3.1.2`.
* **Cuentas de Usuario**: El valor `1.3.6.1.4.1.77.1.2.25` permite el seguimiento de cuentas de usuario.
* **Puertos Locales TCP**: Finalmente, `1.3.6.1.2.1.6.13.1.3` está designado para monitorear puertos locales TCP, proporcionando información sobre conexiones de red activas.
### Cisco
Echa un vistazo a esta página si tienes equipos Cisco:
{% content-ref url="cisco-snmp.md" %}
[cisco-snmp.md](cisco-snmp.md)
{% endcontent-ref %}
## De SNMP a RCE
Si tienes la **cadena** que te permite **escribir valores** dentro del servicio SNMP, es posible que puedas abusar de ella para **ejecutar comandos**:
{% content-ref url="snmp-rce.md" %}
[snmp-rce.md](snmp-rce.md)
{% endcontent-ref %}
## **SNMP Masivo**
[Braa ](https://github.com/mteg/braa) es un escáner SNMP masivo. El uso previsto de tal herramienta es, por supuesto, realizar consultas SNMP, pero a diferencia de snmpwalk de net-snmp, es capaz de consultar decenas o cientos de hosts simultáneamente, y en un solo proceso. Así, consume muy pocos recursos del sistema y realiza el escaneo MUY rápido.
Braa implementa su PROPIO stack SNMP, por lo que NO necesita ninguna biblioteca SNMP como net-snmp.
**Sintaxis:** braa \[Cadena-de-comunidad]@\[IP del servidor SNMP]:\[id iso]
```bash
braa ignite123@192.168.1.125:.1.3.6.*
```
Esto puede extraer muchos MB de información que no puedes procesar manualmente.
Así que, busquemos la información más interesante (de [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/)):
### **Dispositivos**
El proceso comienza con la extracción de **sysDesc MIB data** (1.3.6.1.2.1.1.1.0) de cada archivo para identificar los dispositivos. Esto se logra mediante el uso de un **grep command**:
```bash
grep ".1.3.6.1.2.1.1.1.0" *.snmp
```
### **Identificar Cadena Privada**
Un paso crucial implica identificar la **cadena de comunidad privada** utilizada por las organizaciones, particularmente en los enrutadores Cisco IOS. Esta cadena permite la extracción de **configuraciones en ejecución** de los enrutadores. La identificación a menudo se basa en analizar los datos de SNMP Trap en busca de la palabra "trap" con un **comando grep**:
```bash
grep -i "trap" *.snmp
```
### **Nombres de usuario/Contraseñas**
Los registros almacenados en las tablas MIB se examinan en busca de **intentos de inicio de sesión fallidos**, que podrían incluir accidentalmente contraseñas ingresadas como nombres de usuario. Se buscan palabras clave como _fail_, _failed_ o _login_ para encontrar datos valiosos:
```bash
grep -i "login\|fail" *.snmp
```
### **Emails**
Finalmente, para extraer **direcciones de correo electrónico** de los datos, se utiliza un **comando grep** con una expresión regular, centrándose en patrones que coinciden con formatos de correo electrónico:
```bash
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp
```
## Modificando valores SNMP
Puedes usar _**NetScanTools**_ para **modificar valores**. Necesitarás conocer la **cadena privada** para hacerlo.
## Suplantación
Si hay una ACL que solo permite que algunas IPs consulten el servicio SMNP, puedes suplantar una de estas direcciones dentro del paquete UDP y espiar el tráfico.
## Examinar archivos de configuración SNMP
* snmp.conf
* snmpd.conf
* snmp-config.xml
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Si estás interesado en una **carrera de hacking** y en hackear lo inhackeable - **¡estamos contratando!** (_se requiere polaco fluido escrito y hablado_).
{% embed url="https://www.stmcyber.com/careers" %}
## HackTricks Comandos Automáticos
```
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
```
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Apoya a HackTricks</summary>
* Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
</details>
{% endhint %}