Vulnhub VulnerableDocker Easy mode

24 October 2017

Down By The Docker(Easy mode)

URL de la máquina: https://www.vulnhub.com/entry/vulnerable-docker-1,208/
Descripción: Down By The Docker Ever fantasized about playing with docker misconfigurations, privilege escalation, etc. within a container?

Download this VM, pull out your pentest hats and get started

We have 2 Modes:

  • HARD: This would require you to combine your docker skills as well as your pen-testing skills to achieve host compromise.
  • EASY: Relatively easier path, knowing docker would be enough to compromise the machine and gain root on the host machines.

We have planted 3 flag files across the various machines / systems that are available to you. Your mission if you choose to accept would be as following:

Identify all the flags (2 in total: flag_1 and flag_3) (flag_2 was inadvertently left out)

Gain id=0 shell access on the host machine.

Solución

Tal y como indica el enunciado hay que buscar 2 flags y conseguir root en la máquina, ya que una de ellas no se incluyo debido a un error.

Lo primero que hacemos, como en todas las máquinas es realizar un escaneo de puertos para comprobar que servicios hay corriendo en la máquina.

_config.yml

Vemos que hay 3 puertos abiertos, el 22 (ssh) , el 2375 (unknown) y el 8000 (Apache)

Vamos a empezar por el Apache, como siempre.Ponemos la ip:puerto en el navegador y la primera imagen que vemos nos indica que se trata de un Wordpress.

_config.yml

Dado que se trata de un wordpress, vamos a hacer uso de la herramienta wpscan para comprobar si contiene vulnerabilidades por la que podamos ganar acceso. Para ellos ejecutamos el siguiente comando

./wpscan.rb –url http://192.168.1.36:8000/

Nos muestra varia información sobre un posible SQLInjection, un XSS con autenticación, etc pero nada útil. Por lo que vamos a comprobar si podemos enumerar usuarios.

./wpscan.rb –url http://192.168.1.36:8000/ –enumerate u

Y obtenemos el usuario bob _config.yml

Dado que tenemos el nombre de usuario vamos a intentar hacer bruteforce al login con el diccionario rockyout.txt para ver si tenemos suerte

./wpscan.rb –url http://192.168.1.36:8000/ –wordlist /usr/share/wordlist/rockyou.txt –username bob

Y efectivamente conseguimos encontrar la contraseña para el usuario bob, en este caso Password1

_config.yml

Nos conectamos al wordpress y dando una vuelta por los distintos Pages, themes y Post, nos encontramos con la primera flag que se encuentra en un borrador de los Post. _config.yml

Subimos una reverse shell susituyendo uno de los ficheros 404 de los themes y nos conectamos a nuestra máquina host, pero trás un rato buscando ficheros con el bit suid activo o alguna forma de escalar privilegios abandonamos ese camino.

Volvemos a mirar el escaneo de puerto que habíamos hecho al principio y observamos que en el puerto 2375 no se ha podido comprobar que servicio está corriendo en él por lo que hacemos una pequeña búsqueda en google.

Dado que el título de la máquina es “Vulnerable Docker” buscamos por “Docker port 2375” y el primer enlace de google nos lleva a: https://docs.docker.com/engine/reference/commandline/dockerd/

Donde la información importante es:

If you need to access the Docker daemon remotely, you need to enable the tcp Socket. Beware that the default setup provides un-encrypted and un-authenticated direct access to the Docker daemon - and should be secured either using the built in HTTPS encrypted socket, or by putting a secure web proxy in front of it. You can listen on port 2375 on all network interfaces with -H tcp://0.0.0.0:2375, or on a particular network interface using its IP address: -H tcp://192.168.59.103:2375. It is conventional to use port 2375 for un-encrypted, and port 2376 for encrypted communication with the daemon.

Lo que significa que hay un socket de docker escuchando en ese puerto, lo que nos permitirá ejecutar comandos docker. Hacemos la prueba para listar los containers que están activos como podemos ver en la siguiente imagen:

_config.yml

Y efectivamente funciona, por lo que vamos a ejecutar una imagen alpine lo que nos dará accesso root a la máquina. Para ello ejecutaremos el siguiente comando:

docker -H tcp://192.168.1.36:2375 run -itv /:/host alpine /bin/sh

Y como comprobamos en la siguiente imagen, somos root: _config.yml

Lo único que queda ya es buscar la otra flag que indicaba el enunciado, en este caso con nombre “flag_3”. La primera pista nos indicaba que estaba en los ficheros por lo que con un comando find la encontramos: _config.yml

Ya hemos conseguido el objetivo de la máquina que era obtener las dos flags y ser usuario root. En la siguiente entrada resolveremos la máquina en el modo hard.


← Vulnhub HackFest Orcus