SECorNOTsec DockerLabs (Intermediate)
Contexto de la maquina
Trayectoria SECorNOTsec

Descripción
La máquina presenta una aplicación web desarrollada en Python (Werkzeug) que implementa un sistema de autenticación basado en cookies cifradas. A través de una mala gestión criptográfica y filtración de información sensible, es posible escalar privilegios dentro de la aplicación, ejecutar comandos en el sistema y posteriormente escalar privilegios hasta root.
Objetivo del reto
Obtener acceso administrativo en la aplicación web.
Conseguir ejecución remota de comandos.
Escalar privilegios hasta root.
Tipo de máquina
Linux
Web (Flask/Werkzeug)
Escalada local
Habilidades y técnicas evaluadas
Enumeración web
Fuzzing de directorios
Criptografía aplicada (AES-CBC)
Manipulación de cookies
Bypass de WAF
Command Injection
Escalada de privilegios con
sudoAbuso de
LD_PRELOAD
Análisis de vulnerabilidades






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
Info:
Observamos que únicamente hay un puerto expuesto (5000/tcp) que aloja un servicio web basado en Werkzeug.
Accedemos al servicio:
Respuesta:

Se presenta una aplicación web que incluye una consola de diagnóstico, aunque no podemos interactuar con ella debido a que el usuario actual tiene rol guest.
Análisis del lado cliente
Inspeccionando el código fuente de la página, encontramos el siguiente comentario:
Este detalle es especialmente relevante, ya que apunta a un uso incorrecto de criptografía (IV estático), lo que potencialmente puede afectar al mecanismo de cifrado de las cookies.
En este punto, planteamos la hipótesis de que la cookie de sesión podría estar cifrada de forma insegura. No obstante, continuamos con la enumeración antes de profundizar en este vector.
Enumeración web (Gobuster)

Procedemos a realizar fuzzing de directorios y archivos:
Nota: Un número elevado de threads o múltiples extensiones simultáneas pueden provocar inestabilidad en el servicio, llegando incluso a tumbarlo temporalmente. Se recomienda probar extensiones de forma progresiva.
Respuesta:
Destaca especialmente el archivo env.bak, ya que este tipo de ficheros suele contener información sensible del entorno de la aplicación.
Obtención de información sensible
Accedemos al archivo:
Respuesta:
Este valor corresponde, con alta probabilidad, a la clave secreta utilizada por la aplicación para cifrar o firmar las cookies de sesión (user_session). Esto implica que podemos analizar y potencialmente manipular dichas cookies.
Creación de cookie con privilegios de administrador

Gracias a que disponemos de la SECRET_KEY, podemos proceder a descifrar la cookie de sesión para entender su estructura interna.
Para ello, obtenemos la cookie desde el navegador (DevTools → Storage → Cookies). En esta sección identificamos la cookie user_session y copiamos su valor, que utilizaremos en nuestros scripts.
Decodificación de la cookie
Creamos un script en python3 para automatizar el proceso de descifrado:
decode.py
Ejecutamos el script:
Info:
Esto confirma que la cookie contiene un campo booleano is_admin, el cual determina el nivel de privilegios del usuario.
Generación de cookie con privilegios elevados

Conociendo la estructura interna, podemos generar una nueva cookie válida modificando el valor de is_admin a true.
Para ello, creamos un segundo script:
createCookie.py
Ejecutamos el script:
Info:
Finalmente, sustituimos el valor de la cookie user_session en el navegador (DevTools → Storage → Cookies) por la nueva cookie generada.
Con esto, conseguimos escalar privilegios a administrador, lo que nos permitirá acceder a funcionalidades restringidas de la aplicación.

Escalate user firstatack

Una vez que hemos sustituido la cookie por la versión modificada con privilegios elevados, recargamos la página. Como resultado, observamos que ahora tenemos acceso a la consola de diagnóstico:

Aunque visualmente seguimos apareciendo como guest, en la práctica ya disponemos de acceso funcional a la consola, lo que nos permite interactuar con el backend.
Identificación de Command Injection
El siguiente paso es probar si la consola es vulnerable a command injection. Inicialmente, intentamos técnicas clásicas utilizando ;, pero comprobamos que existe un mecanismo de filtrado (WAF) que bloquea este tipo de operadores.
Tras varias pruebas, identificamos que el operador & sí permite concatenar comandos, lo que nos da una vía de explotación.
Prueba de concepto
Payload utilizado:
Al ejecutarlo, obtenemos:

Esto confirma que la inyección de comandos es viable.
Análisis del WAF
Para entender mejor las restricciones, revisamos el código fuente de la aplicación (app.py):
Observamos que:
Se bloquean operadores comunes de ejecución (
;,&&,|, etc.)También se filtran nombres de binarios típicos usados para explotación (
bash,python,nc, etc.)
Esto implica que debemos evadir el filtro mediante técnicas de ofuscación.
Bypass del WAF
Para evitar la detección, utilizamos una técnica sencilla de evasión basada en fragmentación de cadenas, por ejemplo:
De esta forma, evitamos que el WAF detecte la palabra clave bash, pero el sistema la interpreta correctamente. Obtención de Reverse Shell
Primero, nos ponemos en escucha en nuestra máquina atacante:
A continuación, inyectamos los siguientes comandos en la consola:
Al volver a nuestra escucha, obtenemos una conexión entrante:
Confirmamos que hemos obtenido acceso como el usuario firstatack.
Sanitización de shell (TTY)
Para trabajar de forma más cómoda, procedemos a estabilizar la shell:
Escalate user chocolate

Si hacemos sudo -l veremos lo siguiente:
Interpretación
Observamos que el usuario firstatack puede ejecutar el binario /usr/bin/find como el usuario chocolate sin necesidad de contraseña (NOPASSWD).
Dado que find permite la ejecución de comandos mediante la opción -exec, podemos abusar de esta funcionalidad para obtener una shell como dicho usuario.
Explotación
Ejecutamos:
Respuesta:
Con esto, conseguimos escalar privilegios al usuario chocolate.
Escalate Privileges

Si ejecutamos sudo -l veremos lo siguiente:
Interpretación
Aquí encontramos un vector de escalada muy interesante:
Podemos ejecutar
/usr/local/bin/syscheckcomo rootNo se requiere contraseña (NOPASSWD)
Se permite el uso de
SETENV, lo que implica que podemos definir variables de entorno arbitrarias
Esto abre la puerta a técnicas como LD_PRELOAD hijacking.
LD_PRELOAD Abuse
La variable de entorno LD_PRELOAD permite forzar la carga de librerías compartidas antes que las del sistema. Si podemos inyectar una librería maliciosa, conseguiremos ejecución de código como el usuario que ejecuta el binario (en este caso, root).
Preparación del payload
Creamos una librería compartida maliciosa en C:
Explicación
-fPIC→ genera código independiente de posición (necesario para librerías)-shared→ crea una librería compartida (.so)__attribute__((constructor))→ ejecuta automáticamente la función al cargar la librería
Explotación
Ejecutamos el binario vulnerable forzando la carga de nuestra librería:
Respuesta:
Hemos conseguido ejecución como root, completando la escalada de privilegios.
Last updated