Rolarola DockerLabs (Intermediate)
Contexto de la maquina
Trayectoria Rolarola

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:
Acceso inicial vía aplicación web
Ejecución remota de comandos como usuario
apacheEscalada a usuario intermedio (
matsi)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.




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:

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

Vulnerabilidad RCE por Command Injection
Probamos el siguiente payload en el campo Nombre:
Al enviar este payload, observamos lo siguiente:

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):

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:

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

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

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
Aplicación usa
pickle.loads()opickle.load()Deserializa datos de entrada del usuario sin validación
No hay lista blanca de clases permitidas
Boceto de referencia

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

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