flagWargames DockerLabs (Easy)

Contexto de la maquina

Trayectoria Wargames

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:

  1. Enumeración de servicios expuestos

  2. Abuso de lógica insegura en el servicio WOPR

  3. Obtención de credenciales mediante Prompt Injection

  4. Acceso remoto por SSH

  5. Escalada de privilegios mediante binario SUID vulnerable

Vulnerabilidades identificadas

Vuln Server Expuesto
Vuln Prompt Injection
Vuln Contraseña debil "hash"
Vuln SUID explotable

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 21

  • Un servidor SSH en el puerto 22

  • Una página web en el puerto 80

  • Un 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:

Vista Pagina web
Info vuln Server expuesto

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

Resultado:

Vista ChatBot Pagina

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.

Info vuln prompt injection

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.

Info vuln contraseña debil "hash"

URL = Hash Decrypt Pagearrow-up-right

Evidencia de hash crackeado

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

Info vuln SUID explotable

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:

Vista de ingenieria inversa (Godmode)

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