hacktricks/network-services-pentesting/pentesting-snmp
2023-12-24 19:02:16 +00:00
..
cisco-snmp.md f 2023-06-05 20:33:24 +02:00
README.md Translated ['network-services-pentesting/pentesting-snmp/README.md', 'wi 2023-12-24 19:02:16 +00:00
snmp-rce.md f 2023-06-05 20:33:24 +02:00

161,162,10161,10162/udp - Pentesting SNMP

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥


Consejo para bug bounty: regístrate en Intigriti, una plataforma de bug bounty premium creada por hackers para hackers. Únete a nosotros en 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 explícitamente solicitados. {% endhint %}

MIB

Para asegurar que el acceso SNMP funcione a través de 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 todos los objetos SNMP consultables de un dispositivo están listados en una jerarquía de árbol estandarizada. Contiene al menos un Identificador de Objeto (OID), que, además de la necesaria dirección única 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 es, qué valores devuelve para el OID específico o qué tipo de dato se utiliza.

OIDs

OIDs significa Identificadores de Objetos. Los OIDs identifican de manera única a los objetos gestionados en una jerarquía MIB. Esto se puede representar como un árbol, cuyos niveles son asignados por diferentes organizaciones. Los OIDs de objetos MIB de nivel superior pertenecen a diferentes organizaciones estándar. Los fabricantes definen ramas privadas que incluyen objetos gestionados para sus propios productos.

Puedes navegar a través de un árbol OID desde la web aquí: 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. Hay algunos OIDs conocidos como los que se encuentran dentro de 1.3.6.1.2.1 que hacen referencia a las variables definidas por MIB-2 del Simple Network Management Protocol (SNMP). Y de los OIDs pendientes de este puedes obtener algunos datos interesantes del host (datos del sistema, datos de la 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. Por eso 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.
  • 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 por una gubernamental.
  • 1 este valor denota que el dispositivo está hecho 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 está hecho 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 pantalla para el puerto
  • 4 número de punto
  • 7 estado del punto

(Ejemplo tomado de aquí)

Versiones de SNMP

Hay 2 versiones importantes de SNMP:

  • SNMPv1: La 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 cifrada usando (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 de solo lectura
  • private Lectura/Escritura en general

Nota 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. Además, puede haber objetos que son siempre "Solo Lectura".
Si intentas escribir un objeto se recibe un error de noSuchName o readOnly.

En las versiones 1 y 2/2c si intentas usar una cadena de comunidad mala el servidor no responderá. Por lo tanto, si responde, se utilizó una cadena de comunidad válida.

Puertos

Ataque de Fuerza Bruta a la Cadena de Comunidad (v1 y v2c)

Para adivinar la cadena de comunidad, podrías realizar un ataque de diccionario. Consulta aquí diferentes maneras de realizar un ataque de fuerza bruta contra SNMP. Una cadena de comunidad frecuentemente utilizada es public.

Enumeración de SNMP

Se recomienda instalar lo siguiente para ver qué significa cada OID recopilado del dispositivo:

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:

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 consultas extendidas (download-mibs), es posible enumerar aún más sobre el sistema con el siguiente comando:

snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull

SNMP contiene 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 (pueden contener contraseñas)....

Configuraciones Peligrosas

De https://academy.hackthebox.com/module/112/section/1075****

Configuraciones Descripción
rwuser noauth Proporciona acceso al árbol OID completo sin autenticación.
rwcommunity <cadena de comunidad> <dirección IPv4> Proporciona acceso al árbol OID completo independientemente de dónde se envíen las solicitudes.
rwcommunity6 <cadena de comunidad> <dirección IPv6> Mismo acceso que con rwcommunity con la diferencia de usar IPv6.

Parámetros de SNMP de Microsoft Windows

Valor MIB Descripción
1.3.6.1.2.1.25.1.6.0 Procesos del Sistema.
1.3.6.1.2.1.25.4.2.1.2 Programas en Ejecución.
1.3.6.1.2.1.25.4.2.1.4 Ruta de los Procesos.
1.3.6.1.2.1.25.2.3.1.4 Unidades de Almacenamiento.
1.3.6.1.2.1.25.6.3.1.2 Nombre del Software.
1.3.6.1.4.1.77.1.2.25 Cuentas de Usuario.
1.3.6.1.2.1.6.13.1.3 Puertos Locales TCP.

Cisco

Echa un vistazo a esta página si utilizas equipos Cisco:

{% content-ref url="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, podrías abusar de ella para ejecutar comandos:

{% content-ref url="snmp-rce.md" %} snmp-rce.md {% endcontent-ref %}

SNMP Masivo

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 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 ninguna biblioteca 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 una gran cantidad de MB de información que no puedes procesar manualmente.

Entonces, busquemos la información más interesante (de 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 enrutadores Cisco IOS, entonces podría usar esa cadena de comunidad para extraer las configuraciones en ejecución de esos enrutadores. El mejor método para encontrar dichos datos a menudo ha estado relacionado con los datos de SNMP Trap. Entonces, nuevamente, utilizando el siguiente grep podemos analizar rápidamente una gran cantidad de datos MIB en busca de la palabra clave "trap":

grep -i "trap" *.snmp

Nombres de usuario/contraseñas

Otro área de interés son los registros. He descubierto que hay dispositivos que almacenan registros dentro de las tablas MIB. Estos registros también pueden contener intentos fallidos de inicio de sesión. Piensa en la última vez que iniciaste sesión en un dispositivo vía Telnet o SSH e inadvertidamente ingresaste tu contraseña como nombre de usuario. Normalmente busco palabras clave como fail, failed o login y examino esos datos para ver si hay algo valioso.

grep -i "login\|fail" *.snmp

Correos electrónicos

grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp

Modificación de valores SNMP

Puedes usar NetScanTools para modificar valores. Necesitarás conocer la cadena privada para poder hacerlo.

Suplantación

Si hay una ACL que solo permite a algunas IPs consultar el servicio SMNP, puedes suplantar una de estas direcciones dentro del paquete UDP y capturar el tráfico.

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
**Consejo para cazar recompensas**: **regístrate** en **Intigriti**, una plataforma premium de caza de recompensas 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" %}

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥