Move
Máquina de dificultad facil de la plataforma Dockerlabs
Comprobación
Vamos a empezar desplegando la maquina, la cual nos reporta su ip a la hora de correr este contenedor de docker

Por lo que ahora que sabemos la ip, vamos a crearnos un directorio con su nombre y dentro vamos a usar nuestra funcion definida en la zshrc para que se nos creen tres directorios en los que vamos a trabajar

Bueno ahi esta, lo he modificado y le he metido tambien para que se cree el directorio “scripts” por si hay que hacer reversing o algo poder guardarlo ahi y no tener todo desordenado
Genial pues una vez hecho esto vamos a realizarle un ping a la maquina y si todo va bien empezamos con el escaneo

Ahi vemos que funciona todo correctamente, por lo que pasamos a la parte del escaneo
Escaneo de puertos
Pues arrancamos con este escaneo que es el principal que suelo hacer para ver cuales son los puertos de la maquina victima, para repasarlo rapidamente el parametro -sS nos ofrece un escaneo algo mas sigiloso y rapido ya que nose establece un Three Way Handshake, el –min-rate 5000 le dice a nmap que no queremos que se aplique un escaneo que envie paquetes mas lentos a 5000 por segundo, -n para que no nos realice resolucion dns, -Pn para decirle a nmap que la ip que le hemos dado es de una maquina activa y que no tiene que comprobarlo con ***, -vvv para que nos vaya reportando por la consola lo que vaya descubriendo y por ultimo se exporta todo el contenido a un archivo llamado “puertos_” el cual es perfecto para luego aplicarle nuestra herramienta “portsClean.sh”

Ahi tenemos los puestos que estan abiertos y lo bueno de esta herramienta es que nos copia los puertos en la clipboard lo cual nos agiliza el trabajo con respecto al siguiente escaneo que efectuamos, que es algo mas especifico para estos puertos que estan abiertos

Ejecutamos este comando para lanzar unos scripts basicos de reconocimiento que tiene nmap, de esta manera sabremos con certeza que servicios corren para estos puertos y que versiones y por ultimo le metemos el parametro -oN para que todo el output que se refleje en nuestra consola se meta en el archivo “versiones”

Bueno podemos ver un poco que es lo que esta corriendo por detras y vemos dos servicios web uno en el puerto 80 y otro en el puerto 3000 por lo que vamos a realizar ahora dos operaciones, la primera es ver que tecnologias corren para ese servicio y el segundo un pequeño fuzzing con nmap para ver posibles rutas ocultas, tambien podemos ver que el puerto 21 permite el usuario “Anonymous” por lo que una vez terminemos con los puertos web vamos a pasar a ver que es lo que contiene el ftp
Empezamos viendo las tecnologias del servicio web del puerto 80

Bueno realmente no hemos podido ver mucho por lo que vamos a probar con el fuzzer de nmap

Y ahora vamos a ver las tecnologias del servicio web del puerto 3000

Ahi podemos ver que esta corriendo un Grafana parece ser, vamos a aplicarle el fuzzer de nmap

Vale pues parece ser que tampoco hay nada ahi, antes de pasar a ver la web vamos a conectarnos con el usuario “Anonymous” por el puerto 21

Ahi podemos ver el archivo “database.kdbx” que parece ser un archivo creado con KeePass por lo que vamos a traernoslo a nuestra maquina por si nos hace falta mas adelante

Web
Al meternos en la web, vemos lo siguiente

Literalmente no hay nada por lo que vamos a hacerle un fuzzing un poco mas profundo para ver si vemos algo


Podemos ver que hay un archivo “maintenance.html” el cual contiene lo siguiente

Es solamente una ruta con la cual ahora mismo no podemos hacer mucho, por lo que vamos a seguir con el puerto 3000

Pues esto es lo que tenemos un panel de login de Grafana, revisando un poco la web, abajo pone la version

Esta version de Grafana es vulnerable a un path traversal, lo cual nos va a permitir el acceso a archivos locales de la maquina, esto se debe a que la parte de los plugins es la única parte de Grafana donde el servidor entrega los archivos sin pasar por una validación
La carpeta que es vulnerable es “/public/plugins/”, por lo que vamos a interceptar esta solicitud y a explotar la vulnerabilidad en burpsuite

Una vez que tenemos la solicitud en burpsuite vamos a probar si podemos apuntar al archivo “/etc/passwd”


Ahi vemos que nos deja apuntar al archivo /etc/passwd, por lo que ahora vamos a apuntar al archivo “/tmp/pass.txt” que es el que se nos mostraba antes


Eso parece una contraseña, al probarla con el archivo “database.kdbx” podemos ver que nos permite leer el contenido de este

Con esa contraseña vamos a intentar conectarnos con el usuario “freddy” por ssh

PD: La contraseña que habia dentro del archivo .kdbx es la misma que esta almacenada en /tmp/pass.txt por lo que no hace falta abrir el archivo con KeePass
Escalada de privilegios
Bueno antes de escalar privilegios recordaros que en las maquinas de dockerlabs no hay flag
Despues de mirar un poco he visto que podemos ejecutar el script maintenance.py como el usuario root, lo que nos da a entender que en esta maquina solamente esta el usuario “freddy” y “root”

Si lo miramos un poco podemos ver que el script es nuestro por lo que podemos modificar su contenido, por lo que la escalada de privilegios es muy sencilla

El contenido del script sin modificarlo es el siguiente

Por lo que hay muchas maneras de escalar privilegios en esta situacion, yo voy a hacerlo dandole permisos SUID como root a la bash, el bit SUID lo que nos permite es ejecutar un binario con los privilegios del propietario del archivo

Como podemos ver el binario “bash” es de root, por lo que si metemos una orden la cual haga que root le de el bit SUID a bash podremos ejecutarlo como root sin necesidad de tener la contraseña
Esto es lo que he metido en el script en python para que le añada el bit SUID a la bash

Si ahora ejecutamos el script como el usuario root

Ahi podemos ver que el binario que lanza la bash esta en rojo, esto es por que tiene el bit de SUID activado (tambien sale en sus permisos una s)
Por lo que ahora si ejecutamos una bash deberia de lanzarnosla como root

Al no tener flag, este es el final de la maquina