Wargames DockerLabs (Easy)
Contexto de la maquina
Trayectoria Wargames

Descripción general
La máquina Wargames es un entorno vulnerable basado en Linux (Debian), inspirado temáticamente en la película WarGames (1983). Presenta una combinación de servicios clásicos (FTP, SSH, HTTP) junto con un servicio interactivo personalizado que simula el sistema WOPR, accesible a través del puerto 5000.
El objetivo del laboratorio es evaluar la capacidad del atacante para identificar interfaces no convencionales, abusar de lógicas de aplicación inseguras, explotar prompt injection en sistemas conversacionales, comprometer credenciales y realizar ingeniería inversa de binarios SUID para escalar privilegios hasta root.
La dificultad global de la máquina puede considerarse media, ya que combina enumeración, creatividad en la interacción y análisis binario.
Objetivo de la máquina
Comprometer completamente el sistema obteniendo acceso root, siguiendo una cadena de ataque progresiva:
Enumeración de servicios expuestos
Abuso de lógica insegura en el servicio WOPR
Obtención de credenciales mediante Prompt Injection
Acceso remoto por SSH
Escalada de privilegios mediante binario SUID vulnerable
Vulnerabilidades identificadas




Instalación
Cuando obtenemos el .zip nos lo pasamos al entorno en el que vamos a empezar a hackear la maquina y haremos lo siguiente.
Nos lo descomprimira y despues montamos la maquina de la siguiente forma.
Info:
Por lo que cuando terminemos de hackearla, le damos a Ctrl+C y nos eliminara la maquina para que no se queden archivos basura.
Escaneo de puertos
Comenzamos realizando un escaneo completo de todos los puertos abiertos en la máquina objetivo:
Una vez identificados los puertos abiertos, lanzamos un escaneo más exhaustivo para detectar servicios y versiones:
Resultado del escaneo:
A partir del escaneo observamos varios servicios interesantes:
Un servidor FTP en el puerto
21Un servidor SSH en el puerto
22Una página web en el puerto
80Un servicio en el puerto
5000, que tiene toda la pinta de ser un servidor Flask en Python
Si accedemos al puerto 80, veremos una página web muy sencilla y sin información relevante:
Resultado:


A continuación, probamos a acceder al puerto 5000 desde el navegador:
Resultado:

La página tarda en cargar, ya que por detrás se están realizando varias peticiones. Como resultado, visualizamos una especie de conversación a medio camino, como si se tratara de una interfaz interactiva en la que pudiéramos responder.
Tras investigar un poco más, vemos que la máquina se llama Wargames y que, en el reporte de nmap, el puerto 5000 muestra la siguiente información:
El nombre Joshua es una referencia directa a la película Wargames, lo cual nos da una pista clara del enfoque de la máquina.

Dado que no parece una web tradicional, sino un servicio interactivo, decidimos conectarnos directamente mediante netcat:
Interacción inicial:
Ahora sí podemos interactuar con el servicio. Probamos el comando help:
Esto coincide con lo observado previamente en el escaneo de nmap. Si listamos los juegos disponibles, obtenemos:
Es evidente que todo el contenido está inspirado en la película Wargames. Al ejecutar algunos de estos juegos, el servicio responde con frases y referencias adicionales.
Tras un tiempo investigando este servicio, se nos ocurre realizar un poco de fuzzing sobre la web del puerto 80.
Gobuster
Ejecutamos gobuster para enumerar rutas ocultas en el servidor web:
Resultado:
Encontramos una ruta especialmente interesante: README.txt. Vamos a revisarla.
Escalate user joshua
Accedemos al archivo descubierto:
Contenido:
Este archivo nos da bastante contexto sobre el funcionamiento del servicio del puerto 5000. Se menciona explícitamente un comando oculto llamado SHELL, así como un override con nombre en clave GODMODE.
Si probamos directamente estos términos en el servicio del puerto 5000, no obtendremos resultados inmediatos. Tras varios intentos, y teniendo en cuenta que el servicio funciona como un chatbot, decidimos probar un Prompt Injection para forzar la activación de un modo de depuración.
Introducimos el siguiente payload:
El servicio responde con lo siguiente:
Aquí obtenemos lo que parecen ser credenciales de acceso por SSH. La contraseña se presenta en forma de hash, por lo que procedemos a crackearla.

URL = Hash Decrypt Page

Tras unos segundos, el hash se resuelve correctamente y obtenemos la contraseña.
SSH
Nos conectamos al sistema utilizando las credenciales obtenidas:
Introducimos como contraseña 1983@1983 y accedemos al sistema:
Con esto confirmamos que hemos accedido correctamente como el usuario joshua.
Escalate Privileges

Una vez dentro, enumeramos los binarios con permisos SUID para identificar posibles vectores de escalada de privilegios:
Resultado:
Destaca especialmente el siguiente binario:
Si lo ejecutamos directamente, obtenemos:
Resultado:
Dado que el binario no muestra ayuda ni argumentos evidentes, decidimos analizarlo mediante Ghidra para entender su funcionamiento interno.
Análisis del binario con Ghidra
Primero, transferimos el binario a nuestra máquina atacante levantando un servidor HTTP con python3:
Desde la máquina atacante, descargamos el binario:
Una vez descargado, abrimos Ghidra, creamos un proyecto de prueba e importamos el binario. Tras completar el análisis, observamos el siguiente resultado:

Al analizar la función main, vemos claramente que, si se ejecuta el binario con el parámetro --wopr, se obtiene una shell. Dado que el binario tiene permisos SUID, la shell se ejecutará directamente como root.
Ejecutamos el binario con el parámetro descubierto:
Resultado final:
Con esto obtenemos acceso como root, dando por finalizada la máquina.
flag.txt
Last updated