Smashing

MΓ‘quina Smashing de la plataforma DockerLabs

Autor: Darksblack

Dificultad: Dificil

Smashing

Reconocimiento

Comenzaremos haciendo un escaneo de nmap para descubrir los puertos abiertos de la mΓ‘quina:

-p-: Para indicarle a nmap que abarque el rango de 65535 puertos en total.

--open: Para indicar que solo queremos que nos muestre los puertos abiertos.

--min-rate 5000: Para indicarle a nmap que queremos tramitar paquetes no menores a 5000 paquetes por segundo.

-sS: Para aplicar un escaneo de tipo SYN Stealth scan.

-sC: Para aplicar unos scripts bΓ‘sicos de reconocimiento.

-sV: Para poder identificar la versiΓ³n de los servicios que encontremos abiertos.

-vvv: Esto para que a medida que va encontrando los puertos nos lo imprima por el terminal.

-oN: Para exportar el escaneo en formato nmap (osea como se nos imprime por consola).

Podemos ver 2 puertos abiertos:

β€’ Puerto 22: OpenSSH 9.2p1 Debian

β€’ Puerto 80: Werkzeug 2.2.2 Python 3.11.2

como la versiΓ³n de OpenSSH es superior a la 7.7 no podemos enumerar usuarios ni hacer nada interesante, por lo que continuaremos al puerto 80.

Puerto 80

En el puerto 80 podemos ver un dominio, por lo que lo agregamos al archivo /etc/hosts:

Una vez agregado, podemos entrar a la web y vemos una que es bastante simple, con una temΓ‘tica de empresa de ciberseguridad. Si revisamos el cΓ³digo fuente, podemos ver algo interesante en la lΓ­nea 115:

viendo esto, podemos saber que hay una api, solo que ahora necesitamos encontrar endpoints, y para esto usaremos feroxbuster:

-n: Para que no haga fuzzing de manera recursiva al encontrar un directorio.

--no-state: Para que no nos deje un archivo de log.

-t 200: Para aplicar 200 hilos.

como podemos ver, tenemos un endpoint de "login", por lo que haremos una peticiΓ³n con curl para ver que hace:

nos sale un mensaje de "Method Not Allowed", esto significa que la peticiΓ³n que espera ese endpoint no es GET, por lo que puede ser POST:

ahora si funciona, pero espera un Content-Type en json:

ponemos "username" y "password" porque al ser un login probablemente pida esos datos:

ahora que sabemos como autenticarnos, vamos a realizar un script que haga fuerza bruta a la contraseΓ±a:

lo ejecutamos:

y encontramos las credenciales:

de todo esto, solo vemos una cosa interesante, y son los subdominios:

de todos estos (luego de probar todos :( ), los ΓΊnicos que son vΓ‘lidos son los siguientes:

pero el ΓΊnico que nos interesa es el segundo, ya que nos permite descargar una nota y un binario. La nota tiene 2 cosas interesantes:

1β€’ EnumeraciΓ³n de usuarios: flipsy & darksblack

2β€’ Leak de informaciΓ³n: El binario guarda una contraseΓ±a para el usuario flipsy.

Sabiendo esto, pasaremos a hacer ingenierΓ­a inversa.

IntrusiΓ³n

IngenierΓ­a inversa

En este punto, la idea de la mΓ‘quina es explotar un buffer overflow, el problema es que este es bastante complicado, ya que tiene canarios, pie y nx. Viendo que es bastante difΓ­cil, se puede hacer ingenierΓ­a inversa para hacer que el binario haga lo que queramos, pero no puedo mostrar el proceso ya que estarΓ­a arruinando la manera intencionada de la mΓ‘quina xD, pero si dejarΓ© el binario modificado para descargar:

22KB
Abrir

Lo ejecutamos y vemos lo siguiente:

Pwned

pasamos ese texto por CyberChef y vemos la contraseΓ±a Chocolate.1704 por lo que nos conectamos por ssh con el usuario "flipsy".

Escalada De Privilegios

Flipsy

Si ejecutamos sudo -l veremos que podemos ejecutar exim como el usuario darksblack, por lo que creamos una shell en /tmp y luego la ejecutamos con exim:

escuchamos por el puerto 7070:

y luego ejecutamos la shell:

Darksblack

Al ejecutar id, podremos ver que nos encontramos en el grupo "cyber", por lo que buscaremos archivos que pertenezcan al grupo:

tenemos un script de python, el cual al leerlo contiene un texto muy grande en base64, el cual leeremos en nuestra mΓ‘quina con el siguiente comando:

luego de eso, revisamos el script resultante, y veremos que es otro cΓ³digo en python, pero de un servidor que corre de manera local por el puerto 25000, y nos permite ejecutar "ls" y "whoami" pero solo si nos autenticamos con la clave que nos dan mas arriba. Sabiendo esto, y viendo que la mΓ‘quina tiene curl instalado, hacemos una peticiΓ³n con la autenticaciΓ³n que nos pide y vemos que somos root:

viendo esto, intentamos hacer un bypass con un ";" y vemos que funciona:

por lo que ahora solo ejecutamos un comando que nos haga escalar a root:

y ya seremos root.

Root

Root

Gracias por leer ;)

Última actualización