mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-23 05:03:35 +00:00
301 lines
18 KiB
Markdown
301 lines
18 KiB
Markdown
# 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 %}
|