CTF Tokenaso Intermediate

Instalación

Cuando obtenemos el .zip nos lo pasamos al entorno en el que vamos a empezar a hackear la maquina y haremos lo siguiente.

unzip tokenaso.zip

Nos lo descomprimira y despues montamos la maquina de la siguiente forma.

bash auto_run.sh tokenaso.tar

Info:

██████╗ ██╗    ██╗███╗   ██╗██████╗ ██████╗ ██╗
██╔══██╗██║    ██║████╗  ██║╚════██╗██╔══██╗██║
██████╔╝██║ █╗ ██║██╔██╗ ██║ █████╔╝██║  ██║██║
██╔═══╝ ██║███╗██║██║╚██╗██║ ╚═══██╗██║  ██║╚═╝
██║     ╚███╔███╔╝██║ ╚████║██████╔╝██████╔╝██╗
╚═╝      ╚══╝╚══╝ ╚═╝  ╚═══╝╚═════╝ ╚═════╝ ╚═╝

          ==                           
         @+:@ @##@                     
          @++:-----+@ @@#+:----:+#     
           #-+-----:+:---------:       
            *::-----++-----::::#       
             ::------+:--------:       
             #-+------+:-::-----#@     
              *::+=@@#++-------::@     
              @+=     @++::+#@@@#*#    
               #-@                     
                *+#++@                 
               +-:::+-@                
               :-:+:::+                
              @+::*::::                
             *::++-::*                 
          =:--:-:++ @-#                
      #*:---:--++@   @@                
      @::-:--++*                       
       @::-:++#                        
         *++*                          

 :: Plataforma de máquinas vulnerables ::
 :: Desarrollado por Pwn3d! y Dockerlabs - creado por @d1se0 ::

 █▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█
 █           FLAG{Pwn3d!_is_awesome!}            █
 █▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█


[✔] bc ya está instalado.

[✔] Docker ya está instalado
[!] Limpiando previos contenedores e imágenes
[✔] Cargando la máquina virtual      
[✔] Activando máquina virtual      

[✔] Máquina activa. Dirección IP: 172.17.0.2
[!] Presiona Ctrl+C para limpiar y salir

Por lo que cuando terminemos de hackearla, le damos a Ctrl+C y nos eliminara la maquina para que no se queden archivos basura.

Escaneo de puertos

Info:

Veremos que hay un puerto 80 abierto alojando una pagina web, vamos a entrar dentro a ver que vemos.

Info:

Veremos una pagina en la que nos da unas credenciales de primeras, pero en el segundo usuario que es el que nos interesa escalar no sabemos su contraseña, por lo que vamos a iniciar sesion con el usuario diseo y veremos lo siguiente:

Vemos que tenemos un rol normal de usuario estandar, pero nos llama la atencion que tiene un sistema de TOKENs, cambios de contraseña y bandeja de correo, si intentamos cambiar la contraseña se va a generar una URL a nuestra bandeja de correo con un TOKEN valido basado en tiempo durante 10 minutos.

Justo aqui esta la vulnerabilidad, que el TOKEN esta basado en tiempo, por lo que si realizamos un Race Condition con la peticion capturada y enviamos 2 peticiones al mismo tiempo para enviarla uno al usuario victim y otro a nosotros tendremos la posibilidad de generar el mismo TOKEN para los dos usuarios, pudiendo cambiar la contraseña del usuario victim.

Explotación de TOKEN basado en tiempo

Primero vamos abrir BurpSuite capturaremos la peticion de cambio de contraseña, viendo algo asi:

Enviaremos esta misma peticion 3 veces al Repeater con Ctrl+R, teniendo las 3 en el Repeater vamos agrupar 2 de ellas en un grupo de peticiones para ponerlas en Paralelo viendose algo asi:

Ahora en la tercera peticion vamos a vaciar los campos de csrf y de PHPSESSIONID para obligar al servidor que nos genere una nueva sesion y utilizarla como victim.

Si enviamos esto veremos lo siguiente:

Vemos generados el PHPSESSIONID y el csrf, estos valores los intercambiaremos en la peticion numero 2 de esta forma:

Peticion 2

Ahora en la peticion numero 1 vamos a modificar el username por el de victim de esta forma:

Peticion 1

Teniendo todo esto completado y la peticion en paralelo, vamos a enviarlas, una vez enviadas volveremos a nuestra bandeja de entrada de correo simulado y tendremos que ver solamente un correo que es el que hemos enviado.

Vamos a pinchar en la URL y esto nos llevara a algo asi:

Pero si el TOKEN se ha duplicado de forma correcta podremos cambiar el parametro username por victim en vez de diseo, dandole a ENTER tendremos que ver esto:

Veremos que ha funcionado y podremos cambiar la contraseña a dicho usuario, una vez cambiada la contraseña, vamos a volver al login e iniciaremos sesion con victim.

Vemos que ha funcionado, ahora seremos admin, pero si investigamos un poco mas a fondo veremos que en nuestra seccion de Cookies tenemos esto:

Escalate user admin

Se nos ha generado un admin_token que esta codificado en Base64, por lo que vamos a decodificarlo de esta forma:

Info:

Vemos lo que parece ser una contraseña, podemos intuir que puede ser de algun usuario por SSH pero no sabemos ningun usuario, vamos a crear una mini lista para porbar con varios que podrian ser.

users.txt

Hydra

Ahora vamos a lanzar un ataque de hydra.

Info:

Veremos que ha funcionado con el usuario admin, por lo que vamos a conectarnos por SSH.

SSH

Metemos como contraseña P@ssw0rd!User4dm1n2025!#-...

Con esto veremos que estaremos dentro.

Escalate Privileges

Si listamos la carpeta actual en la que estamos veremos una carpeta oculta llamada .mail que contiene lo siguiente:

Vemos que hay un archivo llamado mail.txt que dice lo siguiente:

mail.txt

Esto nos da a entender que el archivo cifrado de password.enc esta cifrado por RSA, pero tambien vemos una clave publica llamada public.key si la leemos...

public.key

Vemos que es cortita por lo que podremos probar a romper el cifrado RSA mediante esta clave publica.

Romper cifrado RSA

Primero vamos a obtener los valores de n y de e que son importantes, para ellos nos montaremos un pequeño script en python3.

Pero antes nos pasaremos los 2 archivos mediante un servidor de python3 a la maquina atacante, hecho eso podremos proseguir con todo lo demas.

getE.py

getN.py

Ahora vamos a ejecutarlo de esta forma:

Info:

Ahora sabiendo estos valores tendremos que factorizar el numero del valor n para poder sacar los valores de p y q, esto es posible ya que el numero es pequeño (Clave publica corta).

URL = Pagina factorizar numeros

Ahora si nos metemos en esa pagina y en la query pegamos el numero del valor n veremos que nos saca los dos valores de forma correcta.

Ahora tendremos que buscar en internet el algoritmo para generar nuestra clave privada y poder decodificar el archivo, este algoritmo para calcular todo es una funcion modular multiplicativa inversa que es necesaria para todo esto, la encontraremos en esta pagina.

URL = Funcion modular multiplicativa inversa

Nos tendremos que copiar esa pequeña funcion y ahora vamos a montarnos el script final para generar nuestra clave privada de esta forma:

generateRSA.py

Ahora vamos ejecutarlo de esta forma:

Info:

Vemos que nos genera bien la clave, por lo que vamos a utilizar openssl para poder decodificar ese password.enc pero antes lo guardaremos todo esto en un archivo llamado private.key.

Ahora vamos teniendo todo esto vamos a decodificarlo de esta forma:

Info:

Vemos que ha funcionado, por lo que probaremos esta contraseña con el usuario root a ver si funciona.

Metemos como contraseña P@ssw0rd!2025...

Con esto veremos que ya seremos root, por lo que habremos terminado la maquina.

Last updated