Verdejo DockerLabs (Easy)

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.

unzip verdejo.zip

Nos lo descomprimira y despues montamos la maquina de la siguiente forma.

bash auto_deploy.sh verdejo.tar

Info:

                            ##        .         
                      ## ## ##       ==         
                   ## ## ## ##      ===         
               /""""""""""""""""\___/ ===       
          ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~
               \______ o          __/           
                 \    \        __/            
                  \____\______/               
                                          
  ___  ____ ____ _  _ ____ ____ _    ____ ___  ____ 
  |  \ |  | |    |_/  |___ |__/ |    |__| |__] [__  
  |__/ |__| |___ | \_ |___ |  \ |___ |  | |__] ___] 
                                         
                                     

Estamos desplegando la máquina vulnerable, espere un momento.

Máquina desplegada, su dirección IP es --> 172.17.0.2

Presiona Ctrl+C cuando termines con la máquina para eliminarla

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:

Vemos que si entramos a la pagina, veremos una pagina de apache2 normal y si realizamos un poco de fuzzing no veremos mucho mas, por lo que vamos a probar a meternos en el seiguiente puerto 8089 a ver que encontramos:

Vemos una pagina normal en la que vemos un campo para poder meter un texto, si metemos cualquier texto y le damos a ENTER, nos va aparecer un Hola mas el texto insertado, pero si nos fijamso en la URL vemos que tiene un parametro llamado ?user= junto con el texto nuestro, por lo que vamos a probar a realizar un XSS para ver si fuera vulnerable.

Como resultado vemos que funciona y se nos pone el Hola en color rojo y de tamaño grande.

Pero si probamos a realizar un SSTI veremos que tambien funciona:

Info:

1. ¿Qué es SSTI (Server-Side Template Injection)?

  • SSTI ocurre cuando una aplicación web permite al usuario inyectar código malicioso en una plantilla que se procesa en el servidor.

  • Los motores de plantillas como Jinja2 (en Python), Twig (en PHP) o Freemarker (en Java) procesan expresiones dinámicas en el lado del servidor.

  • Si los datos del usuario no son correctamente sanitizados, pueden inyectar código arbitrario en el servidor.


2. Análisis del Payload

get_flashed_messages

En Flask, get_flashed_messages es una función usada para obtener mensajes almacenados en el sistema de "flash messages". En este contexto, el payload utiliza su atributo __globals__.

__globals__

En Python, __globals__ es un atributo que referencia el espacio de nombres global de la función. Esto incluye variables, funciones y objetos globales del entorno donde fue definida.

__builtins__

  • Dentro del espacio de nombres global, __builtins__ da acceso a las funciones y clases nativas de Python, como open, exec, y eval.

  • Al acceder a __builtins__.open, obtienes acceso directo a la función open() de Python, que permite leer o escribir archivos.

open("/etc/passwd").read()

  • El archivo /etc/passwd contiene información sobre los usuarios del sistema en sistemas basados en Unix/Linux.

  • Este comando intenta abrir y leer el contenido de /etc/passwd.


3. ¿Cuándo funciona este payload?

Este payload funcionará si se cumplen las siguientes condiciones:

  1. Vulnerabilidad SSTI:

    • La aplicación utiliza un motor de plantillas como Jinja2 y permite al usuario inyectar expresiones dinámicas.

    • Ejemplo: si un parámetro de usuario se pasa directamente a una plantilla sin ser sanitizado:

      python

      CopiarEditar

      @app.route("/vulnerable") def vulnerable(): user_input = request.args.get("input") return render_template_string(user_input)

  2. Acceso a __globals__:

    • En Jinja2, al procesar plantillas, las funciones y variables globales del entorno están disponibles.

    • Esto incluye acceso a __globals__ y __builtins__.

  3. Permisos adecuados:

    • El proceso de la aplicación web debe tener permisos para leer el archivo /etc/passwd.

Vemos que si funciona por lo que haremos lo siguiente:

Vamos crearnos una reverse shell de la siguiente forma:

Antes de ejecutarlo nos pondremos a la escucha:

Estando a la escucha, ejecutaremos lo de la pagina web y si volvemos a la escucha veremos lo siguiente:

Sanitización de shell (TTY)

Escalate Privileges

Si hacemos sudo -l veremos lo siguiente:

Vemos que podemos ejecutar el binario base64 como el usuario root, por lo que haremos lo siguiente.

Info:

Vemos que funciono, por lo que nos conectaremos por ssh mediante su clave privada.

Lo guardamos y establecemos los permisos adecuados para dicho archivo.

Nos pedira la contraseña, por lo que le haremos fuerza bruta:

Info:

Y veremos que nos saco la contraseña, por lo que volveremos a ejecutar el comando.

Metemos como contraseña honda1.

Info:

Y con esto entrariamos directamente a la maquina como el usuario root, por lo que ya habriamos terminado la maquina.

Last updated