WriteUp ECW2018 – Drone Wars (steps 1-3 et les deux hints)
Ce challenge était disponible lors du ECW 2018, un CTF organisé par Airbus et Thalès en Octobre 2018.
Catégorie: Forensics-Steganographie-Guessing
Points: Pas assez
Enoncé: Un drone non autorisé a survolé une base secrète. L’un des techniciens a récupéré des communications étranges avant que le drone soit abattu, à vous de retrouver (guess) ce qui à été transmis.
Step 1: Le protocole SSTV, vous connaissez ?
La première partie de ce challenge se basait sur un échantillon audio très agréable à l’oreille (Baissez le son si vous voulez l’écouter):
A partir d’ici, il faut réussir a deviner l’encodage de ce sample audio. Après moultes recherches, il s’agirait d’un échange de données avec l’encoding “SSTV”, ou Télévision à Balayage Lent. Globalement, c’est des images fixes “transformées” en son et transmises par radio…
Il nous “suffit” donc de trouver un logiciel, gratuit, performant, et adapté à la retransmission de ces échanges.
Vient donc RX-SSTV pour Windows. C’est gratuit, simple et ça marche bien ! On utilise VB-Cable pour permettre de passer le son d’un lecteur audio vers le logiciel, et magie ! une image apparaît !
flag1:ECW{da553166e44a3151dfe422c34f693fe6}
Hint 1, ou comment donner des points gratuits
Pour ce premier Hint sur Drone_Wars, il suffit d’utiliser la même méthode que pour le #1 et c’est flag…
flag: ECW{Shellcodes}
Step 2, Du reverse ? ça serait mal me connaître….
La step 2 n’était disponible uniquement si on avait flag Step 1, étant donné qu’elle se trouvait dans un QRCode trouvé dans l’image du flag de la Step 1.
Base64: 6xVeMcAx2zHJs0WwKjEEDkE5y3X4/+bo5v///xvqG/Eb4xv4mi6ZK8Emc5gAPueqG+pqG/HnqsLF1dXVbwBpfVFLHhtPT05LGxNOThlJABlMThJITxIbGEgdEkxMHBsASE9IVyA=
Il y avait plusieurs manières de résoudre ce challenge. La première était de Reverse le base64 qui était en réalité du shellcode. Mais vu que le reverse et moi c’est pas le grand amour, on va le faire à ma méthode. Si vous voulez voir du reverse, allez voir le site de l’ami Switch, il expliquera ça mieux que moi.
Ma méthode se base sur une chance improbable, c’est certain. Lorsque je suis confronté à des données que je ne comprend pas de prime abord, je tente des trucs. Je fais notamment un césar sur 256 et un xor sur 256… Et là coup de chance !
Voici mon petit script fais à l’arrache mais qui fonctionne:
On peut directement pipe la sortie du script avec un grep pour sortir le flag:
Et là c’est le drame ! J’avais oublié qu’il fallait guess… du coup j’ai fait plus simple, j’ai utilisé une courte regex pour sortir juste des accolades:
Ah ! le voilà le bougre ! évidemment ils ont mis un caractère entre “E” et “CW” ! Pourquoi faire simple…. La clé était de faire un xor de chaque caractère avec “42”.
Flag: ECW{a41eeda19dd3c3fd8be812b78ff61beb}
PS: Je tiens à préciser que je suis parti sur plusieurs pistes avant de me rendre compte que j’avais le flag sous les yeux depuis le début. Je vous la fait juste courte, pas besoin de s’étaler encore plus sur ce challenge.
Hint 2, Un peu de Stéganographie pour me faire plaisir !
Un petit fichier est à notre disposition, il s’agit d’une photo d’un drone:
Une fois encore, je vais vous passer les détails vu que le challenge en soit n’est ni intéressant, ni sympa à réaliser.
Après utilisation de tous les outils que je connais pour traiter les JPG (Aperisolve.fr, lsb online, stegsolve etc.), j’en suis venu a la conclusion que je devais guess un password avec StegHide. Pour rappel StegHide est un outil permettant de cacher des fichiers/textes à l’intérieur d’autres fichiers, généralement des images/sons.
Donc, on se retrouve une heure après, 50 passwords différents testés et là, éclair de génie, je teste le password “ECW” et hop on a un fichier qui s’extrait. wouhouuu…
Le contenu du fichier, c’est clairement du morse
..-. .. .-.. . / … — ..- .-. -.-. . / -….- # / –. ..-. … -.- / -.. . — — -.. / -….- # / .–. .- -.-. -.- . – / -.. . -.-. — -.. . .-. / -….- # / ..-. .. .-.. . / … .. -. -.-
Soit en décodé:
FILE SOURCE – GFSK DEMOD – PACKET DECODER – FILE SINK
Flag: “FILE SOURCE – GFSK DEMOD – PACKET DECODER – FILE SINK” (Oui c’est moche comme flag)
Last Step, la partie avec le moins de guess ? hummm…
Pour cette partie, on doit réussir à interpréter le fichier Capture.bin fournit en début de challenge (Capture). Ce fichier est vraiment moche, et honnêtement, sans le hint précédent, c’est impossible a flag…
Résolution:
Après quelques recherches, il paraît clair que le logiciel a utiliser est GNU-Radio. Ce logiciel est très pratique si vous faites du traitement de signaux, modulations démodulations etc. Ici, on va l’utiliser pour charger le fichier Capture.bin, faire une démodulation GFSK, décoder les paquets en sortie de démodulation puis sortir un fichier de résultat. Voici le schéma sur le logiciel:
Voila, on lance GNU radio et un fichier de résultat comprenant un peut plus de 100.000 lignes apparaît. Les lignes sont toutes constituées de la manière suivante:
MATRICE210;speed:10;alt:120;long:-1.746883965;lat:47.988895206
Les coordonnées semblent toutes très proches les unes des autres, c’est pourquoi ma déduction logique fût de directement tenter de mettre tous ces points sur une carte. Je trouve enfin un site internet utilisant OpenStreet Map, qui n’est pas limité en nombre de points comme Google maps qui ne permet dans sa version gratuite de ne déposer “que” 200 points.
Je vous épargne les screens moches du résultat, il faut maintenant lire le flag qui est écrit avec un effet mirroir.
Last flag: ECW{c59d28ff8478fea52082011c9016821d}
Voilà pour ces challenges. Mes impressions pour ce CTF sont assez mitigées. Premièrement le guessing était beaucoup trop présent. Un peu ok mais à ce niveau c’est trop. J’ai quand même appris pas mal de choses, notamment sur la partie Web qui m’a tenu en haleine tout le long.
La bise.
Commentaires
Ha oué en effet ils ont forcés sur le guessing. J’aurai jamais eu ta patience 😂 gg
Franchement il m’a saoulé leur ctf… Ctf étudiant, a croire que les étudiants ont pas assez de skill du coup ils savent que guess
C’était un peu ça en effet @LORDROKE 😂