← Regresar a lecciones

Ecos de un llamado - encontrar al agente perdido

El mensaje
Python: tu linterna en la oscuridad
  • Listas y condicionales

A veces, la defensa no consiste en prevenir un ataque. A veces, consiste en encontrar a alguien que ya fue alcanzado por él.

En esta misión, no estás protegiendo un sistema, estás rescatando a alguien que creyó en ti lo suficiente como para dejarte un mensaje, un compañero, un aliado, un agente secuestrado. Per,o no sin antes dejar una traza, un mensaje camuflado dentro de un servidor abandonado. Un mensaje que no pide ayuda… exige compromiso.

Hoy, no basta con entender Python. Hoy debes demostrar que sabes usar la lógica, la persistencia… y la empatía.

El mensaje

El mensaje que te dejaron no ejecuta ninguna función directamente. Pero en su interior hay un mensaje escondido. Una pista escrita por quien sabía que podía desaparecer en cualquier momento:

El país donde estoy tiene 7 letras, está en Europa y contiene la letra S.
Cuando lo descubras, deberás obtener una lista de sus ciudades y utilizarlas para ayudarme.
Estoy contando contigo.

Tu misión consiste en descubrir ese país a partir de las pistas. Luego, generar una lista con sus ciudades y finalmente, utilizar esa lista para intentar acceder al sistema donde dejó las credenciales escondidas.

Este reto pondrá a prueba tu habilidad para:

  • Analizar texto y deducir patrones
  • Manipular listas en Python
  • Generar diccionarios personalizados
  • Automatizar ataques con herramientas reales como Hydra
  • Descifrar información codificada

Más allá de lo técnico, este desafío entrena tu paciencia, tu lógica y tu capacidad para buscar en la dirección correcta cuando las señales son mínimas.

Python: tu linterna en la oscuridad

Antes de usar herramientas externas, deberás aplicar razonamiento lógico usando código.

Listas y condicionales

Aquí un ejemplo de cómo filtrar elementos que cumplen condiciones:

1paises = ["ejemplo1", "ejemplo2", "ejemplo3"] # deberás armar esta lista por tu cuenta 2 3for pais in paises: 4 if len(pais) == 7 and "s" in pais.lower(): 5 print("Posible país:", pais)

Este tipo de filtros son comunes en el análisis forense, OSINT, y también en inteligencia de amenazas. Cuando no sabes exactamente qué estás buscando, limitar el rango de búsqueda es esencial.

Generación del diccionario de ciudades

Una vez tengas el país correcto, tendrás que buscar una lista de todas sus ciudades. Hay varias formas de obtener esta información (eso también es parte del reto). Cuando la tengas, guárdala como un archivo .txt con una ciudad por línea, así:

ciudad1
ciudad2
ciudad3
...

En Python puedes asegurarte de limpiarlas así:

1with open("ciudades.txt", "r") as archivo: 2 ciudades = [linea.strip().lower() for linea in archivo if linea.strip()]

Este diccionario personalizado será la clave para el paso final.

Uso de Hydra

Cuando tengas el país (como nombre de usuario) y la lista de ciudades (como posibles contraseñas), utilizarás Hydra para intentar acceder a un servicio web que simula el sistema del agente.

Ejemplo de comando:

1hydra -l paisdescubierto -P ciudades.txt http-post-form "/validation.py:user=^USER^&pass=^PASS^:F=Credenciales incorrectas"

Importante: Debes ajustar las rutas, parámetros y mensajes de error según el entorno del desafío.
Observa cómo responde el sistema para configurar Hydra correctamente.

Hydra probará todas las combinaciones hasta dar con la correcta.

Decodificando la verdad

Una vez Hydra encuentre las credenciales válidas, el sistema revelará una cadena codificada. Esta cadena estará en base64, un formato común de codificación de datos.

Para leerla:

  1. Copia el texto.
  2. Ve a CyberChef.
  3. Usa la receta From Base64.
  4. Obtendrás la flag.

Hoy no combatiste malware, no desmantelaste una botnet. Hoy salvaste a alguien, a veces, nuestro trabajo no es proteger máquinas, es proteger personas. Porque en medio de tantos datos, sistemas y protocolos, la humanidad siempre debe estar al centro de la ciberdefensa.