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

266 lines
18 KiB
Markdown
Raw Normal View History

2023-06-05 18:33:24 +00:00
# 161,162,10161,10162/udp - Pentesting SNMP
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\
**Consejo de bug bounty**: **regístrate** en **Intigriti**, una plataforma premium de **bug bounty creada por hackers, para hackers**. ¡Únete a nosotros en [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoy mismo y comienza a ganar recompensas de hasta **$100,000**!
{% embed url="https://go.intigriti.com/hacktricks" %}
## Información básica
**SNMP - Simple Network Management Protocol** es un protocolo utilizado para monitorear diferentes dispositivos en la red (como routers, switches, 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 **paquetes de datos enviados desde el servidor SNMP al cliente sin ser solicitados explícitamente**.
{% endhint %}
### MIB
Para asegurarse de que el acceso SNMP funcione en diferentes fabricantes y con diferentes combinaciones cliente-servidor, se creó la **Base de Información de Administració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, los derechos de acceso y una descripción del objeto respectivo.\
2023-06-05 18:33:24 +00:00
Los archivos MIB están escritos en el formato de texto ASCII basado en `Abstract Syntax Notation One` (`ASN.1`). Los **MIB no contienen datos**, pero explican **dónde encontrar qué información** y cómo se ve, lo que devuelve valores para el OID específico, o qué tipo de datos se utiliza.
### OIDs
**OIDs** significa **Identificadores de Objeto**. **OIDs identifican de manera única los objetos administrados en una jerarquía MIB**. Esto se puede representar como un árbol, cuyos niveles son asignados por diferentes organizaciones. Los identificadores de objetos MIB de nivel superior (OIDs) pertenecen a diferentes organizaciones estándar.\
**Los proveedores definen ramas privadas que incluyen objetos administrados para sus propios productos.**
![](../../.gitbook/assets/snmp_oid_mib_tree.png)
Puede **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 lo que 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 **OIDs conocidos** como los que se encuentran dentro de [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1) que hacen referencia a variables SNMP definidas por MIB-2. Y a partir de los **OID pendientes de este** se pueden obtener algunos datos interesantes del host (datos del sistema, datos de red, datos de procesos...)
### **Ejemplo de OID**
**`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 ISO y establece que esto es un OID. Es por eso que todos los OIDs comienzan con "1"
* 3: esto se llama ORG y se utiliza para especificar la organización que construyó el dispositivo.
* 6: esto es el dod o el Departamento de Defensa que es la organización que estableció Internet primero.
2023-06-05 18:33:24 +00:00
* 1: este es el valor de Internet para denotar que todas las comunicaciones se realizarán a través de Internet.
* 4: este valor determina que este dispositivo está hecho por una organización privada y no gubernamental.
* 1: este valor denota que el dispositivo está hecho por una empresa o una entidad comercial.
Estos primeros seis valores tienden a ser los mismos para todos los dispositivos y le brindan 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 despertador.
* 2: determina que este dispositivo es una unidad terminal remota.
El resto de los valores proporcionan 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: pantalla para el puerto
* 4: número de punto
* 7: estado del punto
_**(Ejemplo tomado de**_ [_**aquí**_](https://www.netadmintools.com/snmp-mib-and-oids)_**)**_
### 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** envían el **tráfico en texto plano** también y usan una **cadena de comunidad como autenticación**.
2023-06-05 18:33:24 +00:00
* **SNMPv3**: Utiliza una mejor forma de **autenticación** y la información viaja **encriptada** (un **ataque de diccionario** podría realizarse, 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, es necesario 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
Tenga en cuenta que **la capacidad de escritura de un OID depende de la cadena de comunidad utilizada**, por lo que **incluso** si encuentra que se está utilizando "**public**", podría ser capaz de **escribir algunos valores**. Además, **pueden** existir objetos que sean **siempre "Solo Lectura".**\
Si intenta **escribir** un objeto, se recibe un **error `noSuchName` o `readOnly`**.
En las versiones 1 y 2/2c, si usa una cadena de comunidad **incorrecta**, el servidor no **responderá**. Entonces, si responde, se usó una cadena de comunidad **válida**.
## Puertos
* 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) e [InformRequests](https://en.wikipedia.org/wiki/Simple\_Network\_Management\_Protocol#InformRequest)) en el puerto **162**.
* Cuando se usa con [Transport Layer Security](https://en.wikipedia.org/wiki/Transport\_Layer\_Security) o [Datagram Transport Layer Security](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 cadena de comunidad (v1 y v2c)
Para **adivinar la cadena de comunidad**, se puede realizar un ataque de diccionario. Consulte [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`.
## Enumeración SNMP
Se recomienda instalar lo siguiente para ver lo que 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 información sobre el sistema con el siguiente comando:
2023-06-05 18:33:24 +00:00
```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 como: **Interfaces de red** (direcciones IPv4 e **IPv6**), nombres de usuario, tiempo de actividad, versión del servidor/SO y **procesos** en ejecución (que pueden contener contraseñas)...
### **Configuraciones peligrosas**
**De** [**https://academy.hackthebox.com/module/112/section/1075**](https://academy.hackthebox.com/module/112/section/1075)\*\*\*\*
| **Configuraciones** | **Descripción** |
| ------------------------------------------------ | ------------------------------------------------------------------------------------------------- |
| `rwuser noauth` | Proporciona acceso al árbol completo de OID sin autenticación. |
| `rwcommunity <cadena de comunidad> <dirección IPv4>` | Proporciona acceso al árbol completo de OID independientemente de dónde se hayan enviado las solicitudes. |
| `rwcommunity6 <cadena de comunidad> <dirección IPv6>` | Mismo acceso que con `rwcommunity` con la diferencia de usar IPv6. |
2023-06-05 18:33:24 +00:00
### 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 masivo de SNMP. El uso previsto de esta herramienta es, por supuesto, hacer consultas SNMP, pero a diferencia de snmpwalk de net-snmp, es capaz de hacer consultas a docenas o cientos de hosts simultáneamente y en un solo proceso. Por lo tanto, consume muy pocos recursos del sistema y realiza el escaneo MUY rápido.
Braa implementa su propia pila SNMP, por lo que NO necesita bibliotecas SNMP como net-snmp.
**Sintaxis:** braa \[cadena de comunidad]@\[IP del servidor SNMP]:\[id iso]
```
braa ignite123@192.168.1.125:.1.3.6.*
```
Esto puede extraer muchos MB de información que no se pueden procesar manualmente.
Entonces, 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
Una de las primeras cosas que hago es extraer los datos MIB sysDesc .1.3.6.1.2.1.1.1.0 de cada archivo para determinar de qué dispositivos he recopilado información. Esto se puede hacer fácilmente utilizando el siguiente comando grep:
```
grep ".1.3.6.1.2.1.1.1.0" *.snmp
```
### Identificar cadena privada
Como ejemplo, si puedo identificar la cadena de comunidad privada utilizada por una organización en sus routers Cisco IOS, entonces posiblemente podría usar esa cadena de comunidad para extraer las configuraciones en ejecución de esos routers. El mejor método para encontrar dichos datos a menudo ha estado relacionado con los datos de trampa SNMP. Entonces, nuevamente, usando el siguiente grep, podemos analizar rápidamente una gran cantidad de datos MIB buscando la palabra clave "trampa":
2023-06-05 18:33:24 +00:00
```bash
grep -i "trap" *.snmp
```
### Nombres de usuario/contraseñas
Otra área de interés son los registros, he descubierto que hay algunos dispositivos que almacenan registros dentro de las tablas MIB. Estos registros también pueden contener intentos fallidos de inicio de sesión. Piense en la última vez que inició sesión en un dispositivo a través de Telnet o SSH e ingresó inadvertidamente su contraseña como nombre de usuario. Normalmente busco palabras clave como _fail_, _failed_ o _login_ y examino esos datos para ver si hay algo de valor.
```bash
grep -i "login\|fail" *.snmp
```
### Correos Electrónicos
```bash
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp
```
## Modificando valores SNMP
2023-06-05 18:33:24 +00:00
Puedes usar _**NetScanTools**_ para **modificar valores**. Necesitarás conocer la **cadena privada** para hacerlo.
2023-06-05 18:33:24 +00:00
## Spoofing
Si hay una ACL que solo permite que algunas IPs consulten el servicio SMNP, puedes falsificar una de estas direcciones dentro del paquete UDP y espiar el tráfico.
2023-06-05 18:33:24 +00:00
## Examinar archivos de configuración SNMP
* snmp.conf
* snmpd.conf
* snmp-config.xml
## Comandos automáticos de 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.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
```
<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\
**Consejo de recompensa por errores**: ¡**Regístrese** en **Intigriti**, una plataforma premium de recompensas por errores creada por hackers, para hackers! ¡Únase a nosotros en [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoy mismo y comience a ganar recompensas de hasta **$100,000**!
2023-06-05 18:33:24 +00:00
{% embed url="https://go.intigriti.com/hacktricks" %}
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* ¿Trabaja en una **empresa de ciberseguridad**? ¿Quiere ver su **empresa anunciada en HackTricks**? ¿O quiere tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulte los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtenga la [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* **Únase al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígame en** **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparta sus trucos de hacking enviando PR al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>