Shibboleth

Dificultad: Medium - OS: Linux

Enumeración de puertos/servicios TCP y UDP

┌──(root㉿kali)-[/home/kali/Documents/HTB]
└─# nmap -sCV --open -T4 -v -n 10.10.11.124

PORT   STATE SERVICE VERSION
80/tcp open  http    Apache httpd 2.4.41
|_http-title: Did not follow redirect to http://shibboleth.htb/
|_http-server-header: Apache/2.4.41 (Ubuntu)
| http-methods: 
|_  Supported Methods: GET HEAD POST OPTIONS
Service Info: Host: shibboleth.htb
┌──(root㉿kali)-[/home/kali/Documents/HTB/SHIBBOLETH]
└─# nmap -sCVU --open -T4 -v -n 10.10.11.124

PORT      STATE         SERVICE     VERSION
42/udp    open|filtered nameserver
623/udp   open          asf-rmcp
1043/udp  open|filtered boinc
1046/udp  open|filtered wfremotertm
3130/udp  open|filtered squid-ipc
3659/udp  open|filtered apple-sasl
📌Parámetros
  • sCVU:

    • -sCEjecuta scripts de detección predeterminados → Usa los scripts de nmap ubicados en /usr/share/nmap/scripts/, los cuales buscan información adicional en los puertos abiertos.

    • -sVDetección de versiones → Intenta identificar el software y su versión en los puertos abiertos.

    • -sU → Escanea puertos UDP

  • -nNo resuelve nombres de dominio (reduce el tiempo del escaneo).

  • --openMuestra solo puertos abiertos → Filtra la salida para no mostrar puertos cerrados o filtrados.

  • -T4Ajusta la velocidad del escaneo → T4 es un nivel "agresivo" que acelera el escaneo, útil en redes rápidas.

  • -vModo verbose → Muestra más detalles sobre el progreso del escaneo.

📌 ¿Qué es el puerto 623/UDP?
  • Puerto 623/UDP es el puerto estándar utilizado por el protocolo ASF-RMCP, que forma parte del conjunto de tecnologías asociadas a IPMI (Intelligent Platform Management Interface).

  • Este puerto está normalmente abierto en servidores que tienen capacidades de gestión remota a nivel de hardware, típicamente mediante un BMC (Baseboard Management Controller).

  • ASF (Alert Standard Format) es un estándar desarrollado por la Distributed Management Task Force (DMTF) para permitir la gestión remota de hardware, incluso cuando el sistema operativo está apagado o inoperativo.

  • RMCP (Remote Management and Control Protocol) es parte de este estándar y se comunica sobre el puerto UDP 623.

¿Qué es IPMI y cómo se relaciona con este protocolo?

IPMI (Intelligent Platform Management Interface) es un estándar que permite:

  • Supervisar el estado del sistema (temperaturas, voltajes, ventiladores, etc.)

  • Encender/apagar/reiniciar servidores de forma remota.

  • Ver logs de eventos de hardware.

  • Conectarse a la consola remota (tipo KVM sobre IP).

👉 IPMI usa RMCP como parte de su mecanismo de transporte para enviar mensajes entre el administrador y el BMC (Baseboard Management Controller).

Agregamos el dominio a nuestro /etc/hosts

Enumeración Web

En la página web no hay nada relevante, pero si fuzzeamos subdominios con ffuf vamos a encontrar algunas cosas interesantes:

📌Desglose del comando
  • -u http://dominio.com: Dominio al que se hacen las peticiones. Aunque el fuzzing se hace sobre la cabecera, se necesita una URL base.

  • -H 'Host: FUZZ.dominio.com': Aquí se usa el encabezado HTTP Host, que es donde se hace el fuzzing para encontrar subdominios. FUZZ será reemplazado por palabras de la wordlist.

  • -w /usr/share/wordlists/SecLists/Discovery/DNS/subdomains-top1million-5000.txt: Diccionario de subdominios, en este caso con los 5000 más comunes.

  • -fw 18: Filtro por longitud de palabras en la respuesta. En este caso, si una respuesta tiene exactamente 18 palabras, se ignora, porque seguramente es una página genérica como "dominio no encontrado" o "error 404".

Agregamos el subdominio y nos vamos a encontrar con un panel de login de Zabbix.

Si no conoces esta herramienta de monitoreo te recomiendo leer el siguiente artículo:

Zabbix: Plataforma de Monitoreo Abierto para Infraestructuras Críticas

Como no tenemos las credenciales para entrar al dashboard de Zabbix vamos a aprovechar que está el puerto 623 abierto para buscar algún hash IPMI con el siguiente módulo de msfconsole. Este módulo de Metasploit se utiliza para extraer hashes de autenticación de un servicio IPMI expuesto en un host.

use auxiliary/scanner/ipmi/ipmi_dumphashes → seleccionamos el módulo. Este módulo escanea una IP y se comunica con el BMC (Baseboard Management Controller) del sistema, el cual se comunica por UDP puerto 623 usando el protocolo RMCP/IPMI. set rhosts 10.10.11.124 → seteamos la ip del target

Cracking Hash

Conseguimos un hash para crackear con hashcat, antes debemos guardarlo en un archivo.txt:

Las credenciales son Administrator:ilovepumkinpie1 Ahora si podemos ingresar al dashboard de Zabbix

Movimiento lateral (Zabbix ➝ ipmi-svc)

Para la reverse shell nos vamos a guiar del siguiente articulo https://blog.zabbix.com/zabbix-remote-commands/7500/

Básicamente lo que hay que hacer es ir a Configuration > Hosts > Items > Create item y alli usar el elemento system.run[ ] para agregar el comando que mandara la conexión a nuestro equipo atacante

Solamente seteamos el valor Name y Key. En Key vamos a agregar este comando (en ip_atacante ponen la ip de su equipo y en port_listener el puerto de escucha que van a usar con netcat):

Usamos Add para añadir el item y levantamos el listener en kali (la conexión entrante va a tardar unos minutos):

Para que no se corte la conexión vamos a usar este comando que nos da una sesión más estable e interactiva:

  • python3 -c: Ejecuta un comando corto directamente desde la línea de comandos con Python 3.

  • "import pty; pty.spawn('/bin/bash')": Este pequeño script de Python hace lo siguiente:

    • import pty: importa el módulo pty de Python, que permite manipular pseudo-terminales.

    • pty.spawn('/bin/bash'): crea un pseudo-terminal interactivo para ejecutar /bin/bash.

Otra opción para obtener una shell más completa es con los siguientes comandos (esta opción tiene más lag):

1-.script /dev/null -c bash 2-.Pulsamos CTRL+Z 3-.stty raw -echo; fg 4-.reset xterm 5-.export TERM=xterm SHELL=bash 6-.stty rows 14 columns 135

El paso siguiente es buscar más usuarios en el sistema y para ello vamos a utilizar dos comandos claves en la etapa de recoleccion de informacion:

📌Comandos

Este comando lista las entradas del archivo /etc/passwd que contienen "sh" en cualquier parte de la línea.

🔍 Este puede coincidir con:

  • /bin/bash

  • /usr/sbin/nologin

  • /usr/bin/esh

  • y otras cosas que contengan "sh", aunque no sean shells válidas.

Este es más preciso. Busca líneas que terminan con "sh", lo cual generalmente indica usuarios con shell válida.

Encontramos al usuario ipmi-svc y reutilizamos la contraseña de Zabbix para entrar a su sesión: ilovepumkinpie1

Ahora podemos chequear, por ejemplo, cuáles son las conexiones de red activas y los puertos en escucha

Parametros de netstat:

  • -t: muestra conexiones TCP

  • -u: muestra conexiones UDP (opcional)

  • -n: muestra direcciones IP y puertos en formato numérico (sin resolución DNS)

  • -l: muestra solo sockets en escucha (listening)

  • -p: muestra el PID y el nombre del proceso que está usando el socket

Está el puerto 3306 abierto en localhost, esto quiere decir que hay una base de datos interna donde podríamos encontrar más usuarios y credenciales. Como se trata de una máquina que usa Zabbix lo más lógico es que en el archivo zabbix_server.conf encontremos las credenciales para ingresar a la base de datos:

Efectivamente están allí las credenciales, esto es algo que siempre se puede encontrar por defecto si el servidor fue instalado y configurado por default, para ver esto en detalle podes leer el siguiente artículo:

Zabbix Server Installer

Escalada de Privilegios (MySQL Exploitation) CVE-2021-27928

Notamos que, al chequear la versión del mysql, este posee una vulnerabilidad ya registrada: CVE-2021-27928

📌CVE-2021-27928

CVE-2021-27928 es una vulnerabilidad que afecta a MariaDB, relacionada con la forma en que se puede establecer la configuración del parámetro global:

¿Qué hace esta vulnerabilidad?

Permite a un usuario no privilegiado, que solo tiene acceso a la base de datos (por ejemplo, el usuario zabbix), cargar una librería compartida maliciosa (.so) en el motor de la base de datos usando Galera (wsrep).

Ésa librería puede contener código arbitrario que se ejecuta con permisos del proceso del servidor MySQL/MariaDB.

¿Por qué es grave?

Porque rompe la seguridad del modelo de privilegios: un usuario que no tiene permisos para ejecutar código en el sistema, ahora puede hacerlo usando solo SQL, lo que normalmente no debería pasar.

¿Por que wsrep_provider?

wsrep_provider es una variable global de MariaDB que indica la librería que implementa el soporte para replicación Galera.

Pero si se puede cambiar libremente, también puede usarse para cargar una librería que no tenga nada que ver con Galera, sino que solo tenga código malicioso, como un payload.

Para explotar esta vulnerabilidad y obtener una nueva reverse shell desde mysql vamos a seguir estos pasos:

1) Seteamos un Payload con la extensión .so en msfvenom con nuestra IP y el puerto que estará en escucha:

2) Levantamos un servidor desde el directorio donde se encuentra el payload

3) Descargamos el payload desde el equipo objetivo (chequear que nos encontramos en el directorio del usuario ipmi-svc)

Nos ponemos en escucha con netcat desde el equipo kali y, en el equipo objetivo ingresamos a la base de datos con las credenciales zabbix:bloooarskybluh y activamos el payload con el comando vulnerable: SET GLOBAL wsrep_provider="";

Y asi logramos capturar la sesión de root:

Last updated