← Back to Lessons

Echoes of a Call - Finding the Lost Agent

The Message
Python: Your Flashlight in the Dark
  • Lists and Conditionals

Sometimes, defense isn't about preventing an attack. Sometimes, it's about finding someone who has already been hit by one.

In this mission, you're not protecting a system; you're rescuing someone who trusted you enough to leave you a message—a companion, an ally, a kidnapped agent. But not without leaving a trace, a message camouflaged inside an abandoned server. A message that doesn't ask for help... it demands commitment.

Today, understanding Python isn't enough. Today you must show you know how to use logic, persistence... and empathy.

The Message

The message left for you doesn't execute any function directly. But inside, there's a hidden message. A clue written by someone who knew they could disappear at any moment:

The country where I am has 7 letters, is in Europe, and contains the letter S.
When you discover it, you must get a list of its cities and use them to help me.
I'm counting on you.

Your mission is to discover that country from the clues. Then, generate a list of its cities and finally, use that list to try to access the system where the credentials are hidden.

This challenge will test your ability to:

  • Analyze text and deduce patterns
  • Manipulate lists in Python
  • Generate custom dictionaries
  • Automate attacks with real tools like Hydra
  • Decode encoded information

Beyond the technical, this challenge trains your patience, logic, and ability to search in the right direction when signals are minimal.

Python: Your Flashlight in the Dark

Before using external tools, you'll need to apply logical reasoning with code.

Lists and Conditionals

Here's an example of how to filter elements that meet certain conditions:

1countries = ["example1", "example2", "example3"] # you'll need to build this list yourself 2 3for country in countries: 4 if len(country) == 7 and "s" in country.lower(): 5 print("Possible country:", country)

These kinds of filters are common in forensic analysis, OSINT, and threat intelligence. When you don't know exactly what you're looking for, narrowing the search range is essential.

Generating the City Dictionary

Once you have the correct country, you'll need to find a list of all its cities. There are several ways to get this information (that's part of the challenge too). When you have it, save it as a .txt file with one city per line, like this:

city1
city2
city3
...

In Python, you can clean them up like this:

1with open("cities.txt", "r") as file: 2 cities = [line.strip().lower() for line in file if line.strip()]

This custom dictionary will be the key for the final step.

Using Hydra

When you have the country (as the username) and the list of cities (as possible passwords), you'll use Hydra to try to access a web service that simulates the agent's system.

Example command:

1hydra -l discoveredcountry -P cities.txt http-post-form "/validation.py:user=^USER^&pass=^PASS^:F=Incorrect credentials"

Important: You must adjust the paths, parameters, and error messages according to the challenge environment.
Observe how the system responds to configure Hydra correctly.

Hydra will try all combinations until it finds the correct one.

Decoding the Truth

Once Hydra finds the valid credentials, the system will reveal an encoded string. This string will be in base64, a common data encoding format.

To read it:

  1. Copy the text.
  2. Go to CyberChef.
  3. Use the From Base64 recipe.
  4. You'll get the flag.

Today you didn't fight malware, you didn't dismantle a botnet. Today you saved someone. Sometimes, our job isn't to protect machines—it's to protect people. Because among so much data, systems, and protocols, humanity must always be at the center of cyber defense.