El fin de semana pasado me animé a resolver por primera vez un desafío CTF 😃
Un desafío CTF (Capture The Flag) es una actividad de ciberseguridad en la que los participantes deben resolver una serie de retos técnicos para encontrar una flag oculta, normalmente una cadena de texto que demuestra que el ejercicio ha sido completado con éxito. Estos retos pueden incluir áreas como seguridad web, criptografía, análisis forense, ingeniería inversa u OSINT, y se realizan en entornos controlados diseñados para aprender y practicar habilidades de hacking ético.
El CTF que resolví fue:
Para mi sorpresa, conseguí capturar el flag 😄 y como en ese momento no encontré ningún walkthrough sobre esta VM, decidí documentar todo el proceso aquí: desde la preparación del laboratorio hasta la obtención del archivo final.
Preparación del laboratorio
Entre los prerrequisitos del desafío, aparecía VirtualBox como plataforma recomendada para montar el laboratorio, así que lo descargué y lo instalé para montar mi entorno de "hacking ético".
En VirtualBox, configuré dos máquinas virtuales:
- Una máquina Kali Linux para realizar el análisis.
- La máquina objetivo del CTF.
Ambas quedaron conectadas mediante una red NAT de VirtualBox, creada desde:
Archivo → Preferencias → Red
La red de tipo NAT (Network Address Translation) funciona como una red aislada visible únicamente por VirtualBox, permitiendo que las máquinas ubicadas en ella se comuniquen entre sí sin exponerlas al resto de máquinas de la red.
VirtualBox me propuso inicialmente el segmento 10.0.2.0 y yo le configuré una máscara /28 para acelerar el descubrimiento posterior de la IP objetivo.
Descubrimiento de la máquina objetivo
Tras encender ambas máquinas virtuales, lo primero a hacer era encontrar la IP asignada a la máquina objetivo vía DHCP. Para ello, lancé un escaneo con la herramienta
nmap al segmento de red 10.0.2.0/28 desde la máquina Kali.
La máquina apareció en la dirección "10.0.2.6".
Con la IP identificada lancé un escaneo más exhaustivo para descubrir servicios.
La máquina tenía abiertos los puertos: 21 (FTP), 22 (SSH) y 80 (HTTP).
Enumeración inicial
Lo primero que me llamó la atención fue la presencia del servicio FTP con acceso anónimo habilitado (Anonymous FTP login allowed - FTP Code 230).
Al intentar conectarme por FTP a la VM descubrí algo curioso: Kali no trae instalado el cliente FTP de serie, por lo que tuve que instalarlo manualmente:
sudo apt install ftp
Una vez instalado
ftp, accedí a la máquina y revisé el contenido disponible.
Dentro de la VM encontré un archivo llamado
users.txt.bk. Lo descargué y comprobé que contenía una lista con cinco nombres de usuario.
En este punto podría haber seguido investigando el servidor web del puerto 80, pero decidí continuar el camino tirando de esta pista.
Obtención de acceso
La idea ahora era validar si alguno de los nombres de usuario contenidos en el fichero
users.txt.bk permitía autenticación SSH mediante contraseña.
En lugar de usar herramientas habituales decidí utilizar un script en bash llamado getsshpass.sh, desarrollado por Radovan Brezula y un servidor, el cual automatiza intentos de acceso SSH usando listas de usuarios y de contraseñas.
Descargué el script en la máquina Kali y le asigné permisos de ejecución.
Ejecuté entonces
getsshpass.sh usando como parámetros la lista de usuarios users.txt.bk y la lista de contraseñas rockyou.txt que trae Kali y, en 3 segundos, obtuve una contraseña válida para el usuario anne.
El script comprueba, usuario por usuario, si el usuario puede acceder al sistema vía SSH con password o sólo con publickey. Si solo puede acceder vía SSH con publickey, lo desestima y prueba con el siguiente. Así hasta dar con un usuario que pueda acceder con password. De los usuarios presentes en
users.txt.bk, solo anne tenía configurado poder acceder por SSH usando password.
Escalada de privilegios
Entré al servidor vía SSH con el usuario
anne y su contraseña "princess" y, una vez dentro, revisé la información del usuario mediante el comando:
id
Observé que el usuario
anne pertenecía al grupo sudo, así que revisé los comandos que podía ejecutar este usuario al usar sudo mediante sudo -l.
El usuario
anne podía ejecutar todos (ALL) los comandos como root mediante sudo, por lo que me convertí en root mediante sudo su.
Capture the flag
Ya como
root, capturé el flag leyendo el fichero flag.txt:
Valoración
El propio flag indicaba que existían varios caminos para resolver el reto y, probablemente, seguí una de las rutas más directas para superarlo, pero mi ruta me resultó útil para practicar varias cosas:
- Uso de VirtualBox.
- Enumeración de red.
- Descubrimiento de servicios.
- Uso de FTP anónimo.
- Revisión de permisos sudo.
- Escalada de privilegios.
- ...y el uso de getsshpass.sh 😄
Me pareció interesante el uso del FTP anónimo como punto de entrada, aunque, personalmente, creo que el fichero
users.txt.bk resultaba una pista demasiado evidente. El reto habría ganado profundidad si la información útil hubiese estado distribuida entre varios directorios o mezclada con otros archivos.
Sea como sea, mi primer CTF ha sido una experiencia muy positiva y me ha permitido recorrer una cadena completa de reconocimiento, acceso y escalado.
No hay comentarios:
Publicar un comentario