🟢Capture the Flag - Talent Arena 2026
En esta ocasión vamos a hacer el writeup del hackatón Capture the Flag del Talent Arena 2026

Introducción - Flag 1
Active Phishing Campaign — "SpainPost Express"
1. SITUATION
An organized fraud ring is operating a large-scale SMS phishing campaign targeting mobile users across Europe. Victims receive fraudulent text messages impersonating a postal delivery service. The messages direct victims to a payment portal that harvests financial credentials.
Law enforcement has intercepted the following SMS sample from a compromised device:
2. YOUR MISSION
You are part of a cybersecurity task force assigned to dismantle this operation. Your objectives:
Investigate the phishing infrastructure
Identify the threat actors and their tools
Gain access to their operational server
Collect evidence of their criminal activity
There are 5 flags hidden throughout the investigation. Each flag follows the format:
3. RULES OF ENGAGEMENT
Only the target URL provided above is in scope Your assigned target instance IP will be provided via mail No attacks against CTF infrastructure, other teams, or external systems All standard tools and techniques are permitted Internet access is available for tool downloads and research
4. EVIDENCE COLLECTION
Submit each flag to the CTF scoreboard as you find it.
5. OPERATIONAL NOTES
GOOD LUCK. THE CLOCK IS TICKING.
— Cyber Crimes Unit, Talent Arena 2026
Enumeración
Añadimos la IP al /etc/hosts
Escaneo de Puertos
Encontramos puertos comunes (22 y 80) abiertos, y el dominio vinculado de AWS, que también añadiremos al /etc/hosts. Nos centraremos en el servicio web.
Acceso Web
Accedemos a la web y observamos que es una web de phising para robar datos bancarios de los usuarios que acceden a esta web.

La única funcionalidad de la web es trackear un número de seguimiento (que está bloqueado porque dicen que faltan de pagar unas tasas) y abajo del todo nos encontramos el botón para acceder a la página de pago /payment.html

Prueba de envío de datos
Probaremos a enviar datos fake para ver cómo se comporta la web e intentar descubrir cómo funciona internamente:

Al capturar la petición con BurpSuite vemos que los datos se envían en formato JSON y nos devuelve el número de tracking original y el status igualmente en formato JSON.

Al hacer el Forward vemos que la petición se envía correctamente.

Podríamos probar alguna técnica para manipular la petición con BurpSuite pero antes vamos a enumerar más la web
Fuzzing de Directorios
Encontramos un GIT expuesto, por lo que procederemos a dumpearlo en local.
Git Dumper
La estructura de archivos es la siguiente:
Credential Hunting
En la siguiente ruta encontramos un archivo llamado master que contiene usuarios y 3 commits de GitHub:
Tenemos 2 usuarios y 3 commits.
Análisis de commits
Info del último commit
Análisis de los archivos
bot.py
Bingo! Obtenemos el BOT_TOKEN
notifyer.py
Hemos obtenido:
Testeo del bot
Al hacer el curl nos devuelve true, lo que nos indica que el bot está activo y es accesible, por lo que lo buscamos en telegram y efectivamente existe:

En la URL vemos el ID del bot, que efectivamente coindice con el inicio del BOT_TOKEN:
Obtener info del bot
El resultado del comando es correcto: "result": [] significa que no hay actualizaciones pendientes para el bot. Esto indica que hasta ahora nadie ha interactuado con él (no se han enviado mensajes de notificación) o que ya se han leído y borrado.
Ahora podemos provocar nosotros mismos que el bot envíe un mensaje.
Basándonos en el código actual de notifier.py (que vimos en el commit, aunque ahora use variables de entorno), el mensaje se construye así:
El campo name se inserta directamente en el mensaje. Si logramos que name sea el resultado de leer un archivo, ese contenido viajará al chat del atacante. Nosotros no vemos ese chat, pero podemos leerlo usando el token del bot, como ya intentamos con getUpdates.
Explotación
Al hacer la siguiente llamada:
Recibimos una clave SSH en el Bot de Telegram:

Guardamos la key e intentamos acceder:
ssh2john nos confirma lo que sospechábamos: la clave no tiene passphrase. El problema es otro: el usuario operator no existe en el servidor o su clave pública no está autorizada.
Análisis del error SSH
El error:
Nos indica que:
La clave privada es válida
El servidor acepta autenticación por clave pública
Pero la clave pública correspondiente no está autorizada para el usuario
operator
En los commits vimos dos usuarios relevantes:
darkfish92xxpanteraxx
Y en el log de Git aparece repetidamente darkfish92@proton.me.
Es muy probable que el usuario real del sistema coincida con el alias del desarrollador.
Acceso SSH
Probamos con el usuario descubierto en Git:
Y esta vez:
💥 Acceso concedido y leemos la flag 1!
Última actualización