Lo primero será hacer el reconocimiento de siempre con nmap y también podemos utilizar netdiscover para ver que redes tenemos dentro de nuestra interfaz de red, por tanto ejecutamos el netdiscover eth0 ya que es la interfaz de red que se está utilizando:
Si hacemos el escaneo con nmap vemos que tiene abierto el puerto 80:
Ahora el reporte de whatweb:
Y esta es la web:
Vamos a hacer fuzzing con dirb y vemos que nos encuentra algunos directorios:
Si ponemos cualquiera de estas urls nos salen unos avisos extraños que nos redirigen a la ventana principal de vuelta:
Pero si en la url escribimos algo aleatorio, es decir, una ruta que no existe, vemos que nos carga otra página y que en la parte de abajo se ve impresa la URL que hemos puesto:
Por tanto probamos si es vulnerable a SSTI; y vemos que tras poner un 2*2 nos sale un 4, por tanto sí es vulnerable:
Ahora si vamos a la web de payloadsallthethings podemos obtener el código para explotar el SSTI:
Lo probamos pero con este no funciona, aunque sí con este otro:
request.application._globals_._builtins_._import_os_.popen_id_.read
Entonces ahora obtenemos la reverse shell:
Una vez que estamos dentro podemos leer el fichero app.py y encontramos la primera flag, así como otras contraseñas y la librería que se está utilizando (sqlcipher):
Aunque vemos que viene el base64, por lo que debemos decodificarla:
Ahora, dentro del directorio static, vemos que hay un fichero con extensión .db, que es una base de datos:
Ahora, para leer este tipo de archivos, ya que intuimos que se trata de sqlite, ya que si se está utilizando flask podemos pensar que la base de datos también es una librería de python, por tanto para abrir este archivo utilizamos sqlcipher de esta forma y poniendo la otra contraseña que vimos antes; y ya podemos ver las tablas de la base de datos sqlite:
Y ahora vemos el contenido de la tabla users, donde hay usuarios con sus contraseñas:
Lo decodificamos ya que viene en base64 y obtenemos la flag 3, aunque todavía nos falta la 2:
Por tanto ahora vamos a probar en entrar con estos usuarios dentro del panel de login de la web:
Y ya estamos logueados:
Y aquí vemos otra flag en formato base64:
La decodificamos y obtenemos la flag 2:
Ahora, aprovechando que estamos dentro de la máquina, podemos mirar los puertos internos de la máquina; y para ello podemos crearlo con python utilizando este código (personalizando la parte de nuestra IP):
Lo ejecutamos en la máquina víctima y nos encuentra el puerto 443 y 57255: