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.zipNos lo descomprimira y despues montamos la maquina de la siguiente forma.
bash auto_deploy.sh verdejo.tarInfo:
## .
## ## ## ==
## ## ## ## ===
/""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~
\______ 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 eliminarlaPor 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, comoopen,exec, yeval.Al acceder a
__builtins__.open, obtienes acceso directo a la funciónopen()de Python, que permite leer o escribir archivos.
open("/etc/passwd").read()
El archivo
/etc/passwdcontiene 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:
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)
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__.
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