¿Qué tal? ¿Quieres un CTF? ¿Acaso dijiste "no"? 🤨

Aun así, aquí tienes un CTF.
Agradecemos a d4t4s3c por la creación de este CTF y como no olvidar a la comunidad de Vulnyx.
Descripción de la maquina.
| Sistema Operativo | Linux 🐧 |
| Dificultad | Difícil |
| Lanzamiento | 13/02/2024 |
| Creador | d4t4s3c |
| Primer Usuario | punt4n0 |
| Primer Root | punt4n0 |
Enumeración
Empecemos con nuestro nmap.

Bueno, vamos a continuar con la exploración del puerto 80.


Ah buenooo, continuemos con un fuzzing de directorios y archivos...
gobuster dir -u http://192.168.1.72/ -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -x php,html,js,css,txt -t 50

note.txt?

La nota, hace mención de un puerto interno (9999) que contiene una llave privada para el usuario Peter, esto dicho por Mark.
Con esto sabemos que tenemos dos usuarios, vamos a realizar fuerza bruta al servicio SSH con el usuario mark ya que para el usuario peter nos esta indicando que requiere de una llave privada... Aunque lo podemos verificar:

Y en efecto, para conectarse con el usuario peter requerimos una llave.
Fuerza bruta SSH
Realizamos fuerza bruta contra el usuario mark, el cual admite una contraseña para autenticarse.
hydra -P /usr/share/wordlists/seclists/Passwords/xato-net-10-million-passwords-100000.txt -l mark ssh://192.168.1.72 -t 10


Excelente, tenemos unas credenciales, vamos a conectarnos...

Perooo, solo obtenemos un banner de advertencia, que no es utilidad y aparte no podemos realizar ninguna acción.

Recordemos que en el archivo note.txt mencionaba el puerto 9999 abierto internamente. Así que podemos hacer un Port Forwarding del puerto, por medio de un tunnel SSH.
Port Forwarding
ssh -L 9999:127.0.0.1:9999 mark@192.168.1.72
Con esto, podemos ver el contenido del puerto interno 9999 desde nuestro localhost.

Vamos a realizar un fuzzing de directorios y archivos, debido a que supuestamente se aloja una llave privada, vamos a incluir algunas exenciones comunes para las llaves SSH.
.pub
.ppk
.pem
.key
gobuster dir -u http://127.0.0.1:9999/ -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -x html,css,js,php,txt,pub,ppk,pem,key -t 100
No obtuve ningún resultado, así que cambie de diccionario (después de enterarme que no estaba el valor "id_rsa")

Así que busque otro diccionario...

Y ahí la tenemos, intentemos nuevamente.

Los archivos .ppk son creados por el programa PuTTYgen (generador de claves SSH).
Muy bien, ya tenemos una llave privada, pero al parecer tenemos que pasarla a un formato de lo contrario no nos serviria (mencionado en nota.txt).
PuTTYgen > OpenSSH
Para poder pasar de un formato a otro vamos a requerir el paquete putty-tools.
#installation
sudo apt install -y putty-tools
#formatting
puttygen id_rsa.ppk -O private-openssh -o id_rsa

Y aquí lo tenemos, vamos a probarla.


Escalada de privilegios
Realice una exploración con el usuario peter en el sistema, pero no resulte con nada.
Pero observando los usuarios del sistema, recordé que tenemos la contraseña del usuario mark.

Así que pase al usuario mark en busca de algo que nos permita escalar privilegios.
Y si, enumerando los permisos sudo me tope con esto.

Podemos ejecutar el binario puttygen como root, por lo tanto, lo que podemos hacer es generar un par de llaves SSH para el usuario root y con algunas funciones extras del binario podernos conectar por SSH.
- Creamos la llave privada en formato OpenSSH
puttygen -t rsa -o id_rsa -O private-openssh

- Con la llave privada y ejecutando el binario como
root, generamos la llave publica y la almacenamos en/root/.ssh/authorized_keys
sudo -u root /usr/bin/puttygen id_rsa -o /root/.ssh/authorized_keys -O public-openssh

Y con esto hemos concluido la maquina.

Nos vemos querido lector!!

Referencias

