Willow
Para lograr obtener o comprometer el servidor en esta sala tendremos que enfrentarnos a una serie de conceptos, las cuales son: enumeración de nfs, explotación de claves RSA, cracking del id_rsa y escalada de privilegios, para luego realizar estenografía para obtener las flags.

Link willow
Created by MuirlandOracle
Enumeración
Iniciamos enumerando los puertos de la maquina con la herramienta de nmap
Una vez encontrado los puertos abiertos, procedemos a enumerar cada uno de los servicios que se ejecutan en estos.
Puerto 80
Visitando el sitio web nos encontraremos con lo siguiente

Enumerando la web no se encontró nada mas que la pagina que se muestra anteriormente. Procederemos a enumerar otro servicio.
Explotación
Puerto 2049
Para enumerar el servicio que se ejecuta en el 2096 tendremos que hacer uso de showmount
Enumerando encontramos lo siguiente:

Tenemos accedo o se puede hacer una montura en nuestro sistema del directorio /var/failsafe de la maquina victima. Procederemos a realizar la montura con mount
Ahora encotramos una rsa_keys

El contenido del archivo rsa_key es:
Ahora teniendo esta información sumada con del sitio web, procederemos a pasarla por cyberChef

Teniendo asi:

RSA key
Ahora, realizaremos un script para la decodificación (descifrado) de un mensaje cifrado utilizando el algoritmo de cifrado RSA. Aquí está el propósito y una descripción más detallada:
Aquí se importa el módulo argparse, que se utiliza para analizar los argumentos de la línea de comandos.
Se crea un objeto ArgumentParser llamado parser con una descripción asociada. Este objeto manejará los argumentos de la línea de comandos.
Se definen tres argumentos que el script espera recibir desde la línea de comandos:
"file": La ruta al archivo que contiene el texto cifrado."d": La clave privada para el algoritmo RSA."n": El módulo utilizado en el algoritmo RSA.
El método parse_args() analiza los argumentos de la línea de comandos y devuelve un objeto que contiene los valores proporcionados para los argumentos definidos anteriormente.
Se abre el archivo especificado en el argumento "file", se lee su contenido y se convierte cada número en una lista de enteros. El archivo debe contener números separados por espacios.
Para cada número en la lista data, realiza la operación de descifrado RSA y la imprime como carácter. La operación de descifrado RSA es i ** args.d % args.n. Después, chr(...) convierte el resultado en su carácter ASCII correspondiente.
El argumento end="" en la función print evita que se imprima un carácter de nueva línea después de cada carácter descifrado, asegurando que la salida sea continua.
Podemos observar que el id_rsa esta protegida con contraseña, por lo que procederemos a a obtener el hash ssh2john para luego crackearla con john.
Ahora teniendo la contraseña de la id_rsa podremos logearnos por ssh, pero antes debemos de dar permisos con el siguiente comando: chmod 600 id_rsa
Al ingresar o tratar de ingresar nos sale un mensaje e sign_and_send_public... que esto se da por algún error del lado del servidor. Sign_and_send_pubkey: no mutual signature supported

Por lo que se debe realizar de la siguiente forma:
Lo cual nos dejara ingresar como el usuario willow.
Escalada de privilegios
Usuario : willow

La diferencia está en la restricción de tipos de clave aceptados en el primer comando. Al agregar -o PubkeyAcceptedKeyTypes=+ssh-rsa, estás indicando explícitamente que solo se deben aceptar claves ssh-rsa. En el segundo comando, no estás especificando ninguna restricción adicional, por lo que se utilizarán los algoritmos de clave predeterminados aceptados por tu cliente SSH.
Si estás encontrando problemas de autenticación o recibes mensajes de error relacionados con la firma de la clave, a veces es necesario ser más explícito sobre qué algoritmo de clave estás dispuesto a aceptar o usar. La primera forma de invocar ssh con -o PubkeyAcceptedKeyTypes=+ssh-rsa es un intento de hacer esto.
Enumerando el sistema encontraremos que podemos ejecutar el /bin/mount /dev/* de manera privilegiada:

Antes de ejecutar el comando, nos dirigimos al directorio /dev en donde encontramos algo que nos llama la atención que es hidden_backup.

"b" se refiere a un dispositivo de bloques, lo que significa que hidden_backup es un archivo especial que representa un dispositivo de bloques, como un disco duro o una partición.
Por lo que procederemos a realizar una montura de hidden_backup
Teniendo así unas credenciales que son:

Usuario : root

:P
Last updated