Rolarola DockerLabs (Intermediate)

Contexto de la maquina

Trayectoria Rolarola

Trayectoria Rolarola en el contexto de la máquina

Descripción general

La máquina Rolarola es un entorno vulnerable de tipo Linux, desplegado mediante contenedores, diseñado para poner en práctica técnicas de explotación web, ejecución remota de comandos (RCE), movimiento lateral, deserialización insegura en Python y escalada de privilegios hasta root.

El escenario simula una aplicación web aparentemente sencilla, pero con múltiples fallos de seguridad encadenables que permiten comprometer completamente el sistema. La explotación requiere tanto análisis manual como comprensión del código fuente y abuso de configuraciones inseguras del sistema operativo.

El nivel de dificultad de la máquina puede considerarse medio, ya que combina vulnerabilidades comunes con técnicas más avanzadas como la explotación de pickle y el abuso de binarios permitidos por sudo.

Objetivo de la máquina

El objetivo principal es obtener acceso root a la máquina mediante el encadenamiento de varias vulnerabilidades, siguiendo una progresión lógica:

  1. Acceso inicial vía aplicación web

  2. Ejecución remota de comandos como usuario apache

  3. Escalada a usuario intermedio (matsi)

  4. Escalada final de privilegios a root

Vulnerabilidades identificadas

A continuación se enumeran las vulnerabilidades explotadas durante el compromiso de la máquina, junto con su identificación y criticidad.

Vulnerabilidad RCE
Vulnerabilidad ".git" expuesto
Vulnerabilidad pickle deserialization (python)
Vulnerabilidad permisos "sudo"

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 puertos abiertos:

A continuación, lanzamos un escaneo más detallado sobre los puertos encontrados:

Resultado del escaneo:

Observamos que únicamente está abierto el puerto 80, donde normalmente se aloja una página web. El reporte indica que se trata de un servidor Apache.

Accedemos a la web desde el navegador:

Vista inicial de la web:

Muestra de la web inicial

Se trata de una web bastante sencilla. Sin embargo, resulta curioso que permite introducir un nombre y muestra el siguiente mensaje:

Este mensaje nos da una pista clara de que el input del usuario se está almacenando en alguna parte del servidor. Por ello, vamos a probar un Command Injection simple para comprobar si es vulnerable.

Escalate user apache

Criticidad RCE Vuln.

Vulnerabilidad RCE por Command Injection

Probamos el siguiente payload en el campo Nombre:

Al enviar este payload, observamos lo siguiente:

Resultado RCE (Sin ser visualizado)

Aparentemente solo muestra test, lo cual puede ser una buena señal, ya que el segundo comando podría estar siendo interpretado internamente. Si pulsamos el botón No tocar, en lugar de ver test veremos el resultado del segundo comando (whoami):

Resultado RCE ejecutado

Esto confirma que el comando se está ejecutando por detrás con el usuario apache. Para confirmarlo aún más, probamos un ls simple:

Tras enviar el payload y pulsar No tocar, obtenemos:

Resultado RCE (Confirmación)

Vemos que funciona correctamente, por lo que procedemos a explotar el RCE para obtener una reverse shell.

Obtención de reverse shell

Primero, codificamos la reverse shell en base64 para mejorar la fiabilidad del payload:

Resultado:

Ahora usamos este payload para decodificarlo y ejecutarlo directamente en el servidor:

Antes de enviarlo, nos ponemos a la escucha en nuestra máquina atacante:

Tras enviar el payload y pulsar el botón correspondiente, volvemos a la escucha y observamos:

La reverse shell ha funcionado correctamente. Ahora procedemos a sanitizar la shell.

Sanitización de shell (TTY)

Escalate user matsi

Criticidad ".git" expuesto Vuln.

Tras enumerar el sistema durante un rato, encontramos un directorio .git en /opt:

Podemos acceder al directorio .git, pero para analizarlo con más comodidad lo vamos a transferir a nuestra máquina atacante. Para ello, lo comprimimos y codificamos en base64:

Output (recortado):

En la máquina atacante, reconstruimos el repositorio de la siguiente forma:

Al listar el contenido, vemos:

Todo se ha extraído correctamente, por lo que podemos analizar el repositorio con mayor detalle.

Vulnerabilidad pickle deserialization

Criticidad pickle deserialization Vuln.

Listamos los archivos versionados en el repositorio:

Resultado:

El archivo app.py resulta especialmente interesante. Vamos a inspeccionar el contenido del HEAD:

Código relevante:

Analizando el código, observamos que es vulnerable a pickle deserialization, concretamente en el siguiente fragmento:

Antes de explotar la vulnerabilidad, comprobamos que el servicio esté activo en la máquina víctima:

Resultado:


Informacion sobre la Vulnerabilidad pickle deserialization

La deserialización insegura con pickle en Python permite ejecución remota de código (RCE) al deserializar datos no confiables. Pickle reconstruye objetos serializados, incluyendo la ejecución de métodos especiales como __reduce__().

Mecanismo de la Vulnerabilidad

Cuando pickle.loads(data) procesa datos maliciosos, el payload define una clase con el método __reduce__() que retorna una tupla (callable, args). Al deserializar, Python ejecuta callable(*args).

Ejemplo de Exploit

Condiciones para la Explotación

  1. Aplicación usa pickle.loads() o pickle.load()

  2. Deserializa datos de entrada del usuario sin validación

  3. No hay lista blanca de clases permitidas

Boceto de referencia

Estructura del ataque (Boceto)

Explotación de pickle deserialization

Creamos un pequeño script en python3 para obtener una reverse shell:

Nos ponemos a la escucha:

Ejecutamos el exploit:

Resultado:

En la escucha:

Ya somos el usuario matsi. Procedemos a sanitizar la shell.

Sanitización de shell (TTY)

Escalate Privileges

Criticidad privilegios "sudo" Vuln.

Ejecutamos sudo -l y observamos lo siguiente:

Podemos ejecutar wget como root, lo cual es crítico. Aprovechamos esta mala configuración para escalar privilegios:

Resultado final:

Con esto, obtenemos acceso como root y damos por finalizada la máquina.

Last updated