Foto de Blai Peidro
Hola

Soy Blai Peidro

Senior Infrastructure Engineer

  • Stack Linux · Bash · Python · Ansible
  • Intereses Automatización · IA · Network
  • Idiomas Español · Català · English
  • Ubicación Barcelona, España
  • Web https://www.blai.blog

CTF: BSides Vancouver: 2018 (Workshop)

Walkthrough de BSides Vancouver: 2018 (Workshop) de VulnHub.

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