Post

Dérive aérienne

Dérive aérienne

Here is my solution for the easy networking challenge Dérive aérienne as part of the 2026 edition of the Shutlock CTF held online by the French special intelligence service (DGSI) and EPITA.




A drone entered a restricted area without prior authorization. Hopefully, a network flow was captured during the flight and is provided under drone.pcap.

Overview

All packets are UDP from and towards port 14550. Speedguide1 references this port as being used for MAVLink ground station protocol whose documentation is available at mavlink.io.

Wireshark capture

Decoding packets

I was able to find a LUA plugin on Github at dagar/mavlink_common.lua. After copying the file to the appropriate folder and reloading the plugins (Analyse > Reload Lua Plugins), I noticed 2 distinct packet types :

  • HEARTBEAT
  • GLOBAL_POSITION_INT

This last packet type hold valuable data to describe the position of the drone : Data fields

Visualizing the flight

Based on the latitudes and longitudes sent by the drone, I wrote a basic Python script using Pyplot that runs over a CSV data export from Wireshark :

1
2
3
4
5
6
7
8
import pandas as pd
import matplotlib.pyplot as plt

with open("lat_lon.csv", "r") as fi:
    df = pd.read_csv(fi)

plt.plot(df.get("lon (int32)"), df.get("lat (int32)"))
plt.show()

This produced the following graph representing the flag : Graph

🚩 Flag

1
SHLK{L3_C13L_35T_4_N0U5}
This post is licensed under CC BY 4.0 by the author.