Hexa OSINT CTF - Write-up - CadricielMalveillant

Logo de l'Hexa CTF

Rédigé par Neticien et Maltemo

Introduction

Welcome 10 pts

Dans la première épreuve, on apprend qu’un groupe de personnes fomentent un plan sombre et macchiavélique. Ce groupe s’appelle Manipar.

Ce groupe dispose d’un blog exposé sur la Toile, on nous charge de trouver ce blog.

Commençons notre recherche à l’aide du moteur de recherche Google, du plus large au plus ciblé :

Manipar
"Manipar"
"Manipar" blog
"Manipar" skyblog
"Manipar" blogspot
intitle:Manipar
intitle:Manipar blog

Les résultats de ces recherches ne convenant pas, et par manque de patience, l’indice gratuit est utilisé afin de gagner du temps :

Insérer l’indice lorsque l’on pourra le récupérer.

Effectivement, l’idée d’utiliser le domaine de premier niveau (Top Level Domain) .blog ne m’était pas venu à l’idée.

Le lien menant au blog du groupe Manipar est récupéré, ainsi que le drapeau pour valider l’épreuve à partir du site web http://manipar.blog/

Capture d'écran de la page d'accueil de manipar.blog

Drapeau
Flag{Welcome_to_the_CTF}

Méthode alternative
Avec du recul, la solution aurait pu être trouvé facilement en utilisant le site DotDB.

Ce site permet de chercher des noms de domaines de sites enregistrés, en se basant sur un mot clé.

Money money money 100 pts

Le site propose deux grandes sections:

La section About présente un gros indice.

Our collective advocates freedom of expression, through massive information sharing. We also maintain a blog in which we follow the daily activity of leaks. On this site, you can follow our blog where our member will post many topics.

And above all, know that we love robots very much.

Le mot robot fait référence au fichier standard intitulé robots.txt (ou aux robots butineurs de Toile), présent à la racine des sites internet. Ce fichier est utilisé pour indiquer aux butineurs (crawlers) des moteurs de recherche quelles parties du site peuvent être indexées ou non.

http://manipar.blog/robots.txt

User-agent: *
Disallow: /wp-admin/
Disallow: bank.manipar.blog
Allow: /wp-admin/admin-ajax.php

On obtient alors plusieurs informations:

Commençons par le sous domaine, qui semble s’apparenter au nom de l’épreuve.

https://bank.manipar.blog/

For every transaction, please use this : 
0x630D6640eB3cAad3f43dB7abe6657AC478074Bd0 Cryptoka. 
Flag{Cryptoka_the_4cc0untant}

Drapeau
Flag{Cryptoka_the_4cc0untant}

Cette épreuve dévérrouille l’ensemble des épreuves de la section The Accountant.

Post 100 pts

Parmi les articles, un attire notre attention par son titre : “They talk about us”.

Une image d’un article de journal y est présentée. En s’attardant sur son contenu, on découvre le pseudonyme du blogueur : Chainburst.

Morceau de journal traitant du groupe Manipar

Drapeau
Flag{Chainburst}

Cette épreuve dévérrouille l’ensemble des épreuves de la section The Blogger.

Resources 100 pts

Pour cette épreuve, on se ressert de l’information récupérée plus tôt dans l’épreuve Money money money, en particulier le fait que le blog utilise WordPress.

En effet, cet outil dispose d’un schema de répertoire bien définit car spécifique à cette application. Ainsi, on retrouvera souvent les interfaces de connexions des administrateurs dans le fichier wp-login ou wp-admin.

Dans notre cas, nous cherchons une image, qui sera sûrement rangé dans le répertoire des ressources, appelé wp-content/uploads/.

Dans le cas où l’outil pour créer le site web est moins connu, une méthode générique permet de récupérer cette information :

http://manipar.blog/ => racine du site

wp-content/uploads/2021/10/ => répertoires, à comparer avec votre système de fichier

wallhaven-zxq6lw_1920x1080-1024x576.png => resource, en l’occurence une image

En accédant au répertoire wp-content à travers ce lien, on découvre que l’ensemble des fichiers et répertoires sont listés.

Ce comportement est un défaut de configuration du serveur web et est une faille de sécurité appelée “Directory Listing” en anglais.

En effet, un serveur correctement paramétré n’affichera aucune information lorsqu’un utilisateur réalisera une requête sur un répertoire.

Capture d'écran du direcory listing sur le site manipar.blog

En exploitant ce défaut de configuration, on obtient plusieurs fichiers sortant du lot:

Le contenu du fichier TODO.txt sera utilisé dans les épreuves suivantes, nous nous attarderons sur l’image :
Photo d'un parking sous terrain prise depuis une voiture, le drapeau est affiché en haut de l'image en rouge

En effet, celle-ci contient le drapeau que nous cherchons pour continuer notre aventure :

Drapeau
Flag{DonGru_1s_0n_h1s_w4y}

Cette épreuve dévérrouille l’ensemble des épreuves de la section The Wanderer.

The Blogger

Cette section détaillera l’ensemble des étapes pour rassembler des informations sur le membre de Manipar surnommé Le Blogueur.

Hello world 200 pts

La première étape consiste à pivoter depuis le pseudonyme d’un utilisateur vers d’autres comptes créés sur d’autres plateformes, dans notre cas nous cherchons les réseaux sociaux.

Pour cela, nous allons utiliser un site qui va nous simplifier la tâche : https://whatsmyname.app/

Cette application va nous permettre de rechercher dans une longue liste de site web si un utilisateur correspondant à notre recherche existe.
Résultat de la recherche du site whatsmyname sur le pseudonyme ChainBurst

On s’orientera alors vers le réseau social TikTok qui semble prometteur :
https://www.tiktok.com/@Chainburst?lang=en

Une des vidéos postées révèle le drapeau, tout en bas de l’écran :
Capture d'écran d'une vidéo du compte TikTok de Chainburst, le drapeau est affiché tout en bas

Drapeau
Flag{Chainburst_1s_0n_T1kt0k}

Leviosaaa 300 pts

On reçoit un enregistrement sonore à décoder.
À la première écoute, on se rend compte que l’enregistrement semble être une voix accéléré puis ralentie.

En accélérant le son sur l’outil gratuit et opensource Audacity par trois, on arrive à entendre :

Do not forget the document to be sold. 
Have a good day Emmaaaa

Puis sur la fin, on ralentit approximativement la vitesse d’écoute par moitié :

I know sorry, aah don’t forget about the flag: ema is Chainburst

Grâce à cette étape, on apprend le prénom de Chainburst : Ema.
Il semblerait donc qu’Ema soit une femme.

Drapeau
Flag{ema_is_Chainburst}

Biggest fan 200 pts

En fouillant parmis les vidéos, on trouve :
https://www.tiktok.com/@chainburst/video/7029285424556297478?lang=en&is_copy_url=1&is_from_webapp=v1

Le plus grand fan de Manipar nous livre une information cruciale dans ce commentaire, le nom de famille de Chainburst : Peetars.

I don't know if UFO exists but I am following your movement with attention and I hope that I will be able to join your team Ms. Peetars !

Ainsi, on sait maintenant que Chainburst s’appelle Ema Peetars.

Cependant, cette information n’est pas tout de suite utile, car notre objectif est de trouver plus d’informations sur ce fameux fan surnommé sunrisefire sur TikTok.

https://www.tiktok.com/@sunrisefire?lang=en

Son profil indique un second pseudonyme : sunrisef1rework.

L’outil WhatsmMyName vu précédemment n’est cette fois-ci pas utile, car il ne renvoie aucun résultat pertinent.

En utilisant le moteur de recherche google sur le pseudonyme en question, un compte Reddit apparaît alors :
https://www.reddit.com/user/SunriseF1rework/

La photo de couverture derrière la photo de profil contient une image intéressante, un bout de drapeau y est inscrit.
Photo de bannière avec fond noir donnant une partie du drapeau

3cr3t_h4

En cherchant sur Twitter, on découvre qu’un utilisateur avec un pseudonyme similaire existe :
https://twitter.com/SunriseF1rework

Un de ses tweets donne une autre partie du drapeau :

flag{M4nip4r_s

Un autre tweet montre une capture d’écran dans laquelle on voit apparaître plusieurs applications de réseaux sociaux : Reddit, Twitter et SoundCloud.

Bingo, la plateforme d’écoute de musique n’était pas encore connu dans notre enquête !

Au cas où on aurait raté cette information, un autre tweet peut nous mettre sur la piste :

It's almost time to go on a trip ! In a hurry to listen to my little playlist made up of new artists !

Voici le lien du compte de SunriseF1rework sur SoundCloud, choqué déçu de ne pas y trouver la fameuse playlist mais au moins le drapeau est là dans sa description de compte :
https://soundcloud.com/user-44108001
Profil soundcloud de l'utilisateur sunrisef1rework

ckt1v1t1s}

En mettant bout à bout les trois bouts de drapeau, on obtient :

Drapeau
Flag{M4nip4r_s3cr3t_h4ckt1v1t1s}

Rename 300 pts

Nous cherchons maintenant à trouver d’autres comptes d’Ema Peetars, aka Chainburst.

Grâce à la découverte de son nom complet, nous pouvons pivoter sur plusieurs plateformes sociales utilisant l’identité des personnes comme identifiants :

En cherchant rapidement sur Facebook, on découvre le profil de la blogueuse.

Profil Facebook d'Ema Peetars, aka Chainburst

Depuis son profil, dans la section « À propos » et la sous-catégorie « Informations générales et coordonnées », on peut obtenir plusieurs informations capitales pour la suite de l’investigation :

La section « Détails sur Ema » détaille la citation préférée d’Ema, qui n’est d’autre que le drapeau :

Drapeau
Flag{m3t4_1s_N3w_F4c3b00k}

Rolling in the deep 200 pts

Explorons maintenant la piste de l’adresse Gmail.

La première initiative était de trouver l’ensemble des comptes créés à partir de cette adresse email à l’aide de l’outil Holehe.

Cependant, les résultats sont décevants, annonçant que seul le compte google existe.

On se concentre alors sur le compte Google, qui peut nous apporter de nombreuses informations supplémentaires étant donné la quantité de services proposés par Google (map, calendrier, photos, etc.).

Pour cela, nous utilisons l’outil en ligne proposé par l’entreprise Epios qui nous permet de récupérer les informations suivantes :

Email : emapeetars@gmail.com
Name : Ema P
GoogleID : 116256632717489575864
Last Update : 2021-11-27 00:34:37
Maps https://www.google.com/maps/contrib/116256632717489575864
Calendar : https://calendar.google.com/calendar/htmlembed?src=emapeetars@gmail.com

Le lien vers le calendrier semble cassé, nous laissons donc cette piste de côté pour le moment.

Cependant, le compte Google Map d’Ema nous apprend de nouvelles informations. Elle se trouvait aux Catacombes Saint Paul de Malte, où elle a laissé un commentaire à propos de l’endroit.

On trouve alors dans ce commentaire le drapeau.

Capture d'écran du commentaire d'Ema à propos des catacombes Saint Paul

Drapeau
Flag{Chainburst_w4s_1n_C4t4c0mbs}

Where are you? 200 pts

L’épreuve suivante nous a donné beaucoup de fil à retordre pour différenters raisons.

L’épreuve nous demandait de trouver le prochain compte d’Ema, en se basant sur les endroits qu’elle avait visité.

Un indice indiquait qu’Ema utilisait beaucoup de « # » croisillons (hastag pour nos collègues albions). Cette indice pouvait laisser le doute entre l’utilisation du réseau social Instagram et Twitter qui sont tous deux très portés sur le mot croisillon.

Son compte facebook regorgeait de photographies de lieux qu’Ema avait visité, ma première piste était d’identifier l’ensemble de ces destinations.

Pour cela, nous nous sommes servi de notre culture générale, des commentaires des photos et du moteur de recherche google reverse image.

Lieux identifiés :

Nous nous sommes alors servi des filtres de recherches avancées de Twitter pour investiguer les différents lieux cité précédemment.

Nous avons aussi réduit nos recherches dans le temps, autour des dates de publications des autres messages sur les différents profils d’Ema.

Les filtres until: et since: permettent de filtrer dans le temps les recherches.
Le filtre geocode permet de préciser latitude,longitude,radius.
Source sur laquelle nous nous sommes basée.

Plusieurs pistes ont été alors explorées. Chaque poste Facebook parlant de voyage se terminait par l’émote planète.

Nous avons alors cherché des tweets datant de la période de temps qui nous intéressait, avec les destinations citées précédemment, utilisant l’émote terre.

Une autre piste était le fait que le thème de la liberté était souvent repris dans les messages des différents comptes d’Ema. Nous avons aussi cherché avec ce critère.

Malheureusement, ces deux pistes se sont avérées mauvaises.

Nous nous sommes alors concentrés sur la dernière position connue de Chainburst, c’est à dire les catacombes de Saint Paul à Malte.

Toujours rien, malgré nos recherches acharnées. Nous avons alors décidé d’utiliser un indice car nous arrivions en fin d’événement, afin de débloquer notre progression.

Hint: Did you know that it is possible to locate Tweets ?

Cette indice nous confirmes donc que nous sommes sur la bonne piste, mais que ratons nous ?

Neticien a finalement par trouver l’astuce : les lieux répertoriés par FourSquare.

En effet, lorsque vous indiquez que votre tweet a été publié dans un lieu reconnu par Foursquare, Twitter va associer votre tweet au lieu présent dans l’API de Foursquare.

En trouvant un tweet publié par des touristes ayant récemment visité les Catacombes, on trouve alors un lien vers le lieu.

Depuis ce filtre de recherche, on trouve alors le tweet d’un utilisateur appelé FreeHandcuff, un pseudonyme proche de notre hypothèse précédente sur le sujet de liberté abordé régulièrement par Ema.

En remontant sur son profil, on découvre alors dans sa description de compte le drapeau :

Drapeau
Flag{g3o_tw33t_1s_fun}

Men in black 300 pts

L’énoncé nous indique que nous avons raté des informations sur le compte Twitter de Chainburst.

Après une minutieuse analyse de l’ensemble des tweets du compte, des utilisateurs suivis par le compte, des commentaires masqués, d’analyse des images, il semblait qu’il nous manquait quelquechose.

En relisant l’énoncé, je me suis rendu compte que l’intitulé de l’épreuve donnait un gros indice.

Men in black fait référence à un film, et voici son résumé :

Chargés de protéger la Terre de toute infraction extraterrestre et de réguler l’immigration intergalactique sur notre planète, les Men in black ou MIB opèrent dans le plus grand secret. Vêtus de costumes sombres et équipés des toutes dernières technologies, ils passent inaperçus aux yeux des humains dont ils effacent régulièrement la mémoire récente : la présence d’aliens sur notre sol doit rester secrète.
Source

Cette indice nous indique donc qu’un élément du compte a été supprimé, à l’image des Men in black qui peuvent effacer la mémoire des terriens ayant vu des aliens.

Pour remonter dans le temps, quoi de mieux que de monter dans une DeLorean aux côtés de « Doc » ?

Plus sérieusement, le site web archive permet de réaliser cet exploit s’il y a eu suffisament d’activité sur la page, ou qu’un utilisateur de ce service a expressement demandé l’archivage d’une page à un instant T.

Heureusement, quelqu’un semble avoir réalisé cette action dans les dates qui nous intéressent, c’est à dire en Novembre 2021.

https://web.archive.org/web/20211125140136/https://twitter.com/FreeHandcuff

On trouve alors le tweet suivant :

Российские социальные сети намного более открыты. Я свободен выражать себя так, как хочу, и могу поделиться информацией со всеми!
Flag{c4tch_tw33t_0n_W4yb4ck}

Qui une fois traduit signifie :

Are we rushing in, or are we going sneaky beaky like. 
This is easy, we kill them and then we go home. We will make them regret this day. 
Flag{Rush_B_on_Dust2}. 

… Bon ok j’ai menti :laughing:

Les médias sociaux russes sont beaucoup plus ouverts. 
Je suis libre de m'exprimer comme je l'entends, et je peux partager des informations avec tout le monde !
Flag{c4tch_tw33t_0n_W4yb4ck}

Pas sûr que la vraie traduction soit plus sérieuse que la mienne :wink:

Drapeau
Flag{c4tch_tw33t_0n_W4yb4ck}

Counter Strike 300 pts

L’épreuve suivante consiste à trouver un nouveau compte d’Ema Peetars, sur un nouveau réseau social.

Le message décodé dans le défi précédent nous donne un indice, chercher sur un réseau social russe.

Le plus connu est le réseau social « V Kontakt ».

En réalisant une recherche dans ce réseau social, le profil d’Ema Peetars apparaît :

En affichant les informations détaillées du profil, on obtenait alors le drapeau de cette épreuve.

Drapeau
Flag{ema_sp34ks_Russ14n}

Pendant l’épreuve, nous avons découvert le compte VK d’Ema Peetars avant son compte facebook, notamment grâce à la recherche google suivante : "Ema Peetars".

Le second lien listait l’existence de nombreux utilisateurs VK, dont celui de Chainburst.

The Accountant

Cette section détaillera l’ensemble des étapes pour rassembler des informations sur le membre de Manipar surnommé Le Comptable.

Ship it 200 pts

Le but est d’identifier le constructeur d’un bateau nommé BREMER ELENA.

Sur base de son nom, il est possible d’identifier son IMO via des sites répertoriant les numéros d’identification des navires tel que celui-ci.

Identifiant du navire BREMER ELENA

Nom : BREMER ELENA
IMO : 9347073
Pavillon : Allemand
Type : Navire cargo

Ensuite, un simple Dorks permet de cibler un fichier qui contiendrait le nom du chantier naval de ce bateau.

Dorks : "9347073" filetype:pdf "shipyard"

http://www.hsm-ag.de/wp-content/uploads/2015/07/MV-ELENE-BRAREN.pdf

Chantier naval du BREMER ELENA

Chantier naval : Bodewes Scheepswerven
Pays : Pays-Bas
Ville : Hoogezand

Enfin, il suffit de rechercher une entreprise nommé Bodewes et ayant un site à Hoogezand dans le registre du commerce du Pays-Bas (KVK) pour identifier le chantier naval.

Recherche avancée dans le KVK

Un lien vers un site Web est indiqué sur la page de commande de documents de cette structure :

Lien du site Web de Royal Bodewes

Il suffit alors de suivre ce lien et de rechercher sur le site le nom du bateau pour confirmer que ROYAL BODEWES est bien le constructeur de ce bateau :

Site Web Royal Bodewes

BREMER ELENA sur le site Web de Royal Bodewes

Ce qui nous donne le drapeau :

Drapeau
Flag{Royal Bodewes}

Pollution 300 pts

Nous cherchons donc une mesure de concentration d’ion hydrogène aux coordonneés 53°59.99'N08°06.40'E en janvier 2017 effectuée par un organisme recconu.

Le but de cette recherche est d’identifier de potentiels rejets d’éléments polluants par un bateau.

Décomposons la problématique :

  1. La mention concentration d'ion hydrogène fait probablement référence au pH ou potentiel hydrogène souvent utilisé afin de détecter des ajouts d’éléments dans un milieu aqueux (ex : rejet de polluants dans l’eau).

  2. Les coordonnées 53°59.99'N08°06.40'E sont au format DDM (Degrees Decimal Minutes), il est possible de les lires ainsi :

    • NORD
      • 53 degrés
      • 59.99 minutes
    • EST
      • 8 degrés
      • 6.40 minutes

Afin d’avoir plus de facilité dans leur manipulation, nous allons les convertirs en degrés décimaux :

Convertisseur DDM

Nous obtenons donc :

Lattitude : 53.999833
Longitude : 8.106667

Il suffit alors de taper ces coordonnées dans Google Maps (même si le format DDM est aussi accepté) pour obtenir l’emplacement suivant :

Mer du Nord - Google Map

Ce point se situe en Mer du Nord au large du Nord de l’Allemagne.

  1. Dans l’intitulé, il est fait mention d’un organisme reconnu, étant donné que ces coordonnées pointent vers une localisation en Mer du Nord, il est fort probable que cet organisme soit une institution européenne.

Cherchons donc des publications d’une institution européenne concernant des études qui auraient pu être menées en Mer du Nord en 2017 sur des cas de pollutions : site:.eu "ph" "northern sea" "pollution" "2017".

Le second lien retourné par la recherche concerne un rapport de l’Agence Européenne pour l’Environnement dont la dernière modification date de janvier 2017 (ce qui semble coller avec la description donnée dans l’intitulé).

The North-east Atlantic Ocean - EEA

Cependant, sur base de l’URL report_2002_0524, il est probable que le rapport date en réalité du 24 mai 2002.

Néanmoins, sachant que cette agence mène ce genre d’étude, des données produites ou aggrégées par cette agence sont peut-être en libre accès.

En se rendant en pieds de page, des liens des services auxquels l’EEA contribue :

Pied de page - site Web EEA

Une plateforme retient mon attention : Copernicus | Europe's eyes on Earth

Site Web Copernicus

Il semblerait que ce service donne la possibilité de visualiser des données environnementales et notamment maritimes.

Accès libre aux données - site Web Copernicus

Il est notamment possible d’utiliser des outils de visualisation de données (projection sur une carte), ce qui me permettrait d’y projeter mes coordonnées :

Interface MyOcean Pro

Via le service MyOcean Pro il est possible de sélectionner un jeu de données, une fenêtre de temps et des coordonnées pour projeter des mesures (ici le pH).

Nous obtenons donc une mesure de pH (8.022) effectuée le 16 janvier 2017.

Fausse piste

Néanmoins, les coordonnées ne collent pas totalement, la mesure a été prise aux coordonnées 53.992 Nord, 8.109 Est.

Ce point est à environ 880 mètres des coordonnées qui nous ont été fournies :

Calcul de distance entre les deux coordonnées - Google Map

J’ai donc tenté de récupérer les données brutes de cette plateforme afin d’identifier s’il n’y avait pas d’autres points aux alentours.

SYSTEM@SYSTEM:~/j_en_ai_crustacé_de_vous$ file cmems_mod_nws_bgc-ph_my_7km-3D_P1D-m_1638645759246.nc cmems_mod_nws_bgc-ph_my_7km-3D_P1D-m_1638645759246.nc: NetCDF Data Format data

Les données sont fournies au format NetCDF qu’il est possible de décoder avec l’outil ncdump.

SYSTEM@SYSTEM:~/j_en_ai_crustacé_de_vous$ ncdump cmems_mod_nws_bgc-ph_my_7km-3D_P1M-m_1638642727064.nc netcdf cmems_mod_nws_bgc-ph_my_7km-3D_P1M-m_1638642727064 { dimensions: time = 1 ; depth = 1 ; latitude = 1 ; longitude = 1 ; variables: float depth(depth) ; depth:axis = "Z" ; depth:standard_name = "depth" ; depth:units = "m" ; depth:positive = "down" ; depth:long_name = "depth" ; depth:_ChunkSizes = 24 ; depth:_CoordinateAxisType = "Height" ; depth:_CoordinateZisPositive = "down" ; depth:valid_min = 0.f ; depth:valid_max = 0.f ; float latitude(latitude) ; latitude:standard_name = "latitude" ; latitude:long_name = "latitude" ; latitude:units = "degrees_north" ; latitude:nav_model = "grid_T" ; latitude:axis = "Y" ; latitude:_ChunkSizes = 375 ; latitude:_CoordinateAxisType = "Lat" ; latitude:valid_min = 54.0007f ; latitude:valid_max = 54.0007f ; float ph(time, depth, latitude, longitude) ; ph:_FillValue = -32768.f ; ph:standard_name = "sea_water_ph_reported_on_total_scale" ; ph:long_name = "Sea water pH reported on total scale" ; ph:units = "1" ; ph:missing_value = -32768.f ; ph:cell_methods = "time: mean" ; ph:_ChunkSizes = 1, 24, 375, 297 ; double time(time) ; time:axis = "T" ; time:calendar = "Gregorian" ; time:long_name = "Validity time" ; time:standard_name = "time" ; time:units = "seconds since 1970-01-01 00:00:00" ; time:cell_methods = "time: mean" ; time:_ChunkSizes = 512 ; time:_CoordinateAxisType = "Time" ; time:valid_min = 1484568000. ; time:valid_max = 1484568000. ; float longitude(longitude) ; longitude:standard_name = "longitude" ; longitude:long_name = "longitude" ; longitude:units = "degrees_east" ; longitude:nav_model = "grid_T" ; longitude:axis = "X" ; longitude:_ChunkSizes = 297 ; longitude:_CoordinateAxisType = "Lon" ; longitude:valid_min = 8.11083f ; longitude:valid_max = 8.11083f ; // global attributes: :Conventions = "CF-1.7" ; :references = "http://marine.copernicus.eu/" ; :institution = "UK Met Office" ; :netcdf-version-id = "netCDF-4" ; :creation_date = "2020-08-08T00:00:00Z" ; :source = "AMM-FOAM 7 km (tidal) NEMO v3.6_FABM-ERSEM v15.06_NEMOVAR v6" ; :product = "NWSHELF_MULTIYEAR_BGC_004_011" ; :credit = "E.U. Copernicus Marine Service Information (CMEMS)" ; :forcing_data_source = "ECMWF; ERA5" ; :licence = "http://marine.copernicus.eu/services-portfolio/service-commitments-and-licence/" ; :title = "monthly-mean pH (3D)" ; :history = "See source and creation_date attributes" ; :contact = "servicedesk.cmems@mercator-ocean.eu" ; :_CoordSysBuilder = "ucar.nc2.dataset.conv.CF1Convention" ; :comment = "" ; data: depth = 0 ; latitude = 54.0007 ; ph = 8.02195 ; time = 1484568000 ; longitude = 8.11083 ; }

Après quatres tentatives en échecs (et une sévère envie de mourrir <3), aucune coordonnées ne correspondaient exactement, il était temps de changer de source de données.

En chercheant des sources de données européennes, je tombe sur la plateforme d’OpenData européenne :

Site Web OpenData - Data Europa

En tapant les bons mots clés dans la barre du moteur de recherche de jeux de données de cette plateforme, il est possible d’identifier un jeu de données qui semble coller :
Recherche de jeux de données - site Web Data Europa

hydrogen ion concentration (pH) of sea water 2017

En suivant le lien de téléchargement du jeu de données, j’atterris sur un portail de fournitures de données hydrographiques allemand :

Site Web du BSH

BSH OpenData

En suivant le lien permettant de consulter les relevés de pH effectués en 2017, j’identifie une mesure dont les coordonnées correspondent exactement aux coordonnées fournis (et à la date, le 20/01/2017 à 12:48) :

Fichier texte de mesures de pH - site Web du BSH

Wasserstoff-Ionenkonzentration des Meerwassers (pH-Wert) 2017

Et d’après la légende, la mesure de pH serait le 13ème champ du relevé.

Drapeau
Flag{8,09}

Keep an eye on 300 pts

Cette épreuve nous demande de trouver l’inscription d’un panneau vert présent sur une caméra de sécurité installée par DonGru.

L’énoncé utilise l’expression « keep an eye » est utilisée. Cette même expression était utilisées dans le fichier TODO.txt que nous avions trouvé précédemment grâce au « Directory listing » sur le blog du groupe Manipar :

DonGru, you know where to go. Be there in 5 days, we have an agreement. If you don't, you know what will happen...
On the way, please sort these things out:
- contact the boss to have further instructions;
- make sure C. will be there on time;
- set up the Insecam, we need to keep an eye.

See you soon, venn.
Cryptoka.

Une référence est faite au site Insecam, qui présente une liste de caméras non sécurisées (en utilisant les identifiants par défauts du constructeur) exposées sur la Toile.

La catégorie « Marina » est donnée afin d’affiner la recherche et nous éviter de perdre trop de temps.

Au bout de la 7ème page, on finit par trouver le fameux panneau vert sur cette page :

Drapeau
Flag{Green_Turtle_Club}

Next Business 200 pts

Cette épreuve nous demande de trouver un compte du comptable utilisant le pseudonyme Cryptoka. On nous précise que ce compte lui sert à réaliser des affaires.

L’outil WhatsMyName retourne 8 différent comptes, mais aucun ne semblent correspondre à ce que l’on cherche.

Nous continuons alors notre recherche avec les moteurs de recherche Google et DuckDuckGo, sans grande réussite.

En relisant l’énoncé, je m’aperçois que la plateforme que nous cherchons permet de vendre des services à des particuliers.

Une plateforme répond à ce critère, même s’il est plus orienté sur le développement ou le design : Fiverr.

En cherchant sur ce site, on trouve alors le profil de Cryptoka : https://www.fiverr.com/cryptoka

Sa page d’accueil nous apprend plusieurs choses :

Cette facture nous indique le nom et prénom de Cryptoka : Karl VonTonberg.

Le drapeau est inscrit dans cette facture, à droite.

Drapeau
Flag{s3rv1c3_0n_F1v3rr}

The car 200 pts

L’objectif de cette épreuve consiste à retrouver le numéro de référence de fabrication du parebrise arrière de cette voiture (au format [0-9]{10}), à partir des informations présentes dans la photographie ci-dessous :

Photo de l'épreuve

Peu d’éléments sont réellement pertinents sur cette image, hormis le tatouage de pare-brise qui contient plusieurs informations :

Tatouage de pare-brise

Il est possible de lire le nom du fabricant (Saint-Gobain SEKURIT), une partie d’un numéro d’identification (43x 002687, x étant un caractère difficile à identifier) ainsi que la marque de la voiture (Peugeot).

Faisons donc une recherche Google sur la base de ces informations : saint gobain sekurit 002687 peugeot.

Recherche Google - Tatouage de pare-brise

Grâce à cette recherche, nous identifions une annonce eBay concernant un pare-brise ayant un tatouage d’identification sensiblement similaire au tatouage présent sur la photo de cette épreuve :

Tatouage de pare-brise - Peugeot RCZ

Source : https://www.carwindshields.info/windshieldmarkings

En complément des identifiants présents sur le tatouage, l’annonce précise le MPN (Manufacturer Part Number) du pare-brise : 1609989480.

Cet identifiant semble correspondre au format attendu par cette épreuve.

Sur base du modèle de la voiture (Peugeot RCZ Basis, série de 2010) il est possible de pivoter sur une annonce (vente) équivalente d’un pare-brise arrière, permettant ainsi de retrouver le MPN de cette pièce : 1613329480.

Drapeau
Flag{1613329480}

Higher 400 pts

L’énoncé nous indique que le groupe Manipar essaye de vendre des photos satellites de la ville de Berlin, datant du 25 Novembre 1970.

Le service de renseignement allemand cherche à savoir si ces données ont réellement été subtilisées.

Notre objectif, si nous l’acceptons (oui), trouver en source ouverte cette photo. Le drapeau devra contenir l’identifiant d’entité de la photo satellite.

Le première étape était de vérifier si cette information était accessible depuis le moteur de recherche Google.

En cherchant les mots clés berlin satellite photo 1970, on découvre parmi les résultats, une photo de qui correspond aux dates indiquées :

Photo satellite - Berlin

Le site, qui répertorie des bases aériennes allemandes durant la seconde guerre mondiale et la guerre froide, n’indique pas d’identifiant d’entité pour cette image mais apporte d’autres information.

La photo provient de US Geological Survey, d’après la légende en bas à gauche.

Cette entité américaine définit aussi comment se construit un « Entity ID » sur son site :

Entity ID
Field Definition: The Entity ID consist of a two digit data set designator and the Photo ID. The unique accession photo id, developed for each agency, allows identification within the EROS database that is comparable with the agency’s original identification.

Format:
DDAPPPPPRRRFFFF
DD = Data set designator (AR)
A = Agency
P = Project
R = Roll
F = Frame

Example:
AR5750022260121

L’objectif suivant est de trouver un site (probablement de l’US Geological Survey ou USGS) donnant l’accès à ces images satellites avec l’identifiant d’entité.

Nous affinons la recherche google avec les nouvelles informations récupérées :
"Entity ID" November 1970" "berlin" satellite usgs

Un nouveau site apparaît, nous expliquant comment accéder aux informations des données des satellites militaires.

Même article avec une meilleur présentation trouvé lors de l’épreuve :
https://www.archives.gov/research/cartographic/aerial-photography/satellite-photography

On apprend que les programmes de satellites américain qui correspond à nos dates de recherche s’appellent CORONA, ARGON, and LANYARD Program, 1959 - 1972.

Meme Winnie l'ourson

Rebondissons maintenant sur le lien associé à ces noms de satellite, on découvre alors le site “National Archives Catalog”.

Ce site contient de nombreuses archives de l’état américain, dont de nombreux documents issues de campagnes d’espionages.

Le site vaut le coup d’œil, on y trouve notamment des écoutes d’appels téléphoniques de personnes d’intérêts des années 1940-1980 que l’on peut consulter librement.

L’épreuve semble toucher à sa fin, cependant l’enregistrement de l’archive rend public uniquement deux photographies : celles des villes de Moscou et de San Francisco.

Aïe, coup dur pour le joueur français.

Après beaucoup de manque de rigueur et de recherche dans le vent sur l’époque des différents programmes de photographie des satellites américains dans la fin du XXIème siècle, notre enquêteur reprend sa lecture de l’article initial.

Très bonne initiative du joueur français (sans compter le retard), car l’article indique comment se servir d’une carte interactive proposée par l’USGS (tiens, tiens, tiens), permettant de visualiser la Terre à partir d’images satellites provenant de différentes campagnes.

Encore plus intéressant, l’article explique que les noms des sources de données qui ont été déclassifiées :

Declass 1 (1996): For CORONA, ARGON, and LANYARD (1960-1972)
Declass 2 (2002): For KH-7 (1963-1967) and KH-9 (1973-1980)
Declass 3 (2013): For KH-9 (1971-1984)

Et bingo, la source Declass 1 correspond à notre période temporelle, en plus de correspondre au programme satellite vu précédemment.

Nous saisissons alors les données dans les différents filtres de recherche, comme indiqué ci-dessous :

On sélectionne la capitale Berlin (première ligne du tableau), ce qui affine encore la recherche.

Puis dans la section « Data Sets », on sélectionne la source Declass 1.

La recherche est lancée et elle retourne un seul résultat, qui dispose d’un « Entity ID » :

Drapeau
Flag{DS1112-2107DA031}

Pour votre curiosité, voici l’image que nous met à disposition l’USGS :

Image satellite de Berlin que nous cherchions durant toute l’épreuve.

La qualité de l’image est malheureusement mauvaise, il doit sûrement s’agir de l’image de pré-visualisation et non l’image originale. Elle doit être disponible si vous avez la motivation de vous créer un compte sur le site d’archive depuis ce lien.

The artist 300 pts

Dans cette épreuve il nous est demandé de trouver la signification de la chaîne de caractère Untitled Collection #124242633.

Aucun Dorks direct ou combiné ne permet d’identfier une quelconque piste.

Cependant, en saisissant Untitled Collection dans le moteur de recherche Google, le premier résultat est associé à l’acronyme NFT (Non-Fungible Token) :

Recherche Google - Untitled Collection

Or, ces jetons sont bien souvents associés à des œuvres au format dématérialisé, ce qui colle avec le nom de l’épreuve ainsi qu’au pseudo du Comptable (Cryptoka, visiblement friand de cybersous et potentiellement de DEEP ou Dispositif d’Enregistrement Électronique Partagé).

Recherche Google - Untitled Collection + NFT

En suivant le premier lien, nous arrivons sur une page (d’un moteur de recherche NFT) contenant une chaîne de caractère similaire :

Moteur de recherche OpenSea

Cette chaîne de caractère semble indiquer qu’il s’agit d’un titre standard couplé avec un identifiant à 9 chiffres : Untitled Collection #[0-9]{9}.

Il ne reste plus qu’à rechercher notre identifiant (124242633) dans la barre de recherche de ce moteur de recherche pour retrouver l’œuvre de Cryptoka :

Recherche de l'identifiant - Moteur de recherche OpenSea

Ainsi que le drapeau :

Manipar Team - Moteur de recherche OpenSea

Drapeau
Flag{NFT_1s_th3_N3xt_Bus1n3ss}

Catch’em all 300 pts

Dans cette épreuve, il nous est demandé de retrouver des traces d’activités commerciales qu’aurait Cryptoka sur une plateforme de vente en ligne de particulier à particulier.

Après quelques recherches (basées sur le nom de Cryptoka : Vontonberg), nous identifions un lien étrange mentionant la mise en vente d’une carte Pokémon rare :
https://www.lacollesurloup.fr/fr/ccdifkshop/enfants/garcons/autres/1448952615-carte-pokemon&usg=AOvVaw0vp7KIURoqA1WeoASv8EOS.

Ce lien pointe sur le site de la commune de La Colle-sur-Loup, ce qui ne colle pas avec une plateforme qui mettrais en vente ce type de bien.

Par ailleurs, ce lien ne redirige pas vers une page de mise en vente de carte Pokémon :

Redirection depuis le site de La-Colle-sur-Loup

Il est donc probable que ce lien redirigeait en réalité vers une autre plateforme, prenons le lien d’origine et isolons la partie statique de l’URL via la requête Dorks : inurl:"/enfants/garcons/autres/"

Google Dorks sur la partie statique du lien

Il semblerait que ce lien pointait à l’origine vers la plateforme Vinted, ce qui colle avec la description (vente de particulier à particulier).

Recherchons M. Vontonberg sur la plateforme Vinted :

Recherche Vontonberg - site Web Vinted

Il semblerait que Cryptoka a bien mis en vente une carte Pokémon sur ce site :

Carte Pokémon rare - site Web Vinted

Il ne nous reste plus qu’à consulter qu’à consulter son profil :

Profil Vontonberg - site Web Vinted

Drapeau
Flag{P0k3m0n_1s_Bus1n3ss}

Deeper 400 pts

Peu de d’information nous permettant d’établir une piste solide était renseignée dans la consigne de cette épreuve.

Néanmoins, quelques éléments nous permettaient de nous aiguiller :

Nous avons quand même tenté d’identfier des canaux Telegram qui pourraient coller à la description (Cryptoka aurait des activités commerciales louches), sans succès.

Partant de ces éléments, il est probable que ces informations se trouvent sur un des Internet Sombre, prenons le plus connu : Tor.

Nous allons utiliser un moteur de recherche indexant une bonne quantité de nœuds (ici Phobos) afin de rechercher des collodrômes :

Recherche paste - Moteur de recherche Phobos

Le troisième lien nous dirige vers DeepPaste qui en plus de nous permettre de faire des recherches dans les informations mises en ligne possède un nom qui colle avec le nom de cette épreuve :

Site Tor DeepPaste

Tentons donc des mots clés.

Le nom Cryptoka ne semble pas fonctionner et il est peu probable que M. Vontonberg prenne le risque d’utiliser son vrai nom sur ce type de plateforme.

La consigne évoque les activités commerciales louches de Cryptoka, s’il s’agit de la revente d’informations confidentielles (qui pour le coup ne sont pas si confidentielles) à travers Manipar il serait judicieux de creuser cette piste :

Recherche Manipar - site Tor DeepPaste

Effectivement, Cryptoka semble utiliser DeepPaste pour faire la promotion de son activité de revente d’informations :

Manipar : Business Model - site Tor DeepPaste

Hi, I'm Karl, aka Cryptoka.

To be honest, I just wanted to say that Manipar is one of the biggest confidential information business.
If you pay us, we can give you any information you want. 

Military plans, bank accounts, medical documents.. we know everything.

flag{M4n1p4r_d4rk_bus1n3ss}

Drapeau
Flag{M4n1p4r_d4rk_bus1n3ss}

Dig the past 400 pts

In the middle of your investigation, your coworker arrives urgently in your office because he needs you.

He is working on a complex case, and he received this strange message:
“Remember when Kermit did his show in that cafeteria, back in January 2004? The sentinel talked about it…
Nevermind, the source will show up on kermit’s birthday. Be there on time, please!”
. We think that you could find this “kermit”,
and his birthday, so you can go back quickly on the accountant case…

Format : Flag{mm-dd}

Cette épreuve est complexe car l’artiste que nous cherchons possède un nom de scène similaire à celui de Kermit la peluche grenouille.

Meme Kermit

Dans ce genre de cas, chaque recherche est polluée par de faux positifs dû à la popularité de l’homonyme.

Il nous est toujours possible d’exclure des termes clés comme « ventriloque » en ajoutant le caractère « - » collé au début du mot.
Cependant, ce n’est pas avec cette astuce que nous avons résolu le défi.

Pas spécialement de méthodologie à connaître, juste besoin de trouver les bons mots clés et les bons filtres.

Les axes de recherche ont été :

En cherchant avec les mots clés « The Sentinel january 2004 » et en filtrant par dates sur le mois de Janvier et Février 2004, on finit par trouver un journal intitulé “Sentinel”.

En feuilletant les pages du journal du mois de Janvier, on trouve l’article que nous cherchions:

Comedian Kermit( loosens up cafeteria crowd - The Sentinel - 24 janvier 2004 - Google News)

En dessous de l’image du comédien Kermit, on obtient son nom et prénom : Kermit Apio.

En réalisant une recherche rapide, on obtient un site qui nous donne de nombreuses informations sur l’artiste :

Grâce à sa date de naissance, on peut valider le drapeau en indiquant le drapeau au format Flag{MM-DD}

Drapeau
Flag{07-02}

The Wanderer

Cette section détaillera l’ensemble des étapes pour rassembler des informations sur le membre de Manipar surnommé Le Vagabond.

Indoor 200 pts

Il nous est demandé d’identifier la localisation du lieu depuis lequel a été prise la photo identifiée dans l’épreuve Resources.

Photographie prise à l’intérieur d’un parking sous-terrain

Un simple strings de la photo permet d’identifier des métadonnées EXIF en en-tête du fichier :

<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 6.0.0"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:exif="http://ns.adobe.com/exif/1.0/" xmlns:tiff="http://ns.adobe.com/tiff/1.0/"> <exif:GPSVersionID>2.3.0.0</exif:GPSVersionID> <exif:GPSLongitude>11,23.0793E</exif:GPSLongitude> <exif:PixelXDimension>346</exif:PixelXDimension> <exif:GPSLongitudeRef>E</exif:GPSLongitudeRef> <exif:GPSLatitudeRef>N</exif:GPSLatitudeRef> <exif:GPSLatitude>59,7.681N</exif:GPSLatitude> <exif:PixelYDimension>768</exif:PixelYDimension> <tiff:ResolutionUnit>1</tiff:ResolutionUnit> <tiff:XResolution>1</tiff:XResolution> <tiff:YResolution>1</tiff:YResolution> <tiff:Orientation>1</tiff:Orientation> </rdf:Description> </rdf:RDF> </x:xmpmeta>

Coordonnées : 59°7.681'N,11°23.0793'E

Une fois les coordonnées saisies dans Google Maps, il semblerait que la photo ait été prise à Halden en Norvège.

Capture du résultat des coordonnées GPS saisies dans Google Maps

Drapeau
Flag{Halden}

Tourism 200 pts

Dans cette épreuve, il nous est demandé de retrouver le nom du lieu depuis lequel la photo ci-dessous a été prise :

Image de l’épreuve, un bâtiment atypique dans son architecture

La précédente épreuve exploitait la présence de coordonnées GPS dans des métadonnées EXIF, il est donc peu probable que ce même mécanisme soit réutilisé.

Dans le doute, faisont une petite vérification :

SYSTEM@SYSTEM:~/nope$ exiftool building.png ExifTool Version Number : 11.88 File Name : building.png Directory : . File Size : 1128 kB File Modification Date/Time : 2021:12:04 14:42:10+01:00 File Access Date/Time : 2021:12:05 22:15:02+01:00 File Inode Change Date/Time : 2021:12:04 14:42:10+01:00 File Permissions : rw-rw-r-- File Type : PNG File Type Extension : png MIME Type : image/png Image Width : 770 Image Height : 625 Bit Depth : 8 Color Type : RGB with Alpha Compression : Deflate/Inflate Filter : Adaptive Interlace : Noninterlaced SRGB Rendering : Perceptual Gamma : 2.2 Pixels Per Unit X : 3779 Pixels Per Unit Y : 3779 Pixel Units : meters Image Size : 770x625 Megapixels : 0.481

Evidemment, aucune coordonnée GPS.

La qualité du cliché est relativement faible mais possède suffisament d’élements distinctifs (façade du bâtiment) pour qu’une recherche d’image inversée puisse fonctionner.

Certains moteurs de recherche s’appuient sur des modèles de reconnaissance d’image qui semblent plus spécialisés sur certains types d’images.

Schéma récapitulatif de l’efficacité des moteurs de recherche sur les types d’éléments à rechercher

Dans notre cas il est recommandé d’utiliser les modèles de Google et/ou Yandex, j’ai souvent de bons résultats avec Yandex, tentons d’abord celui-ci.

Résultat de la recherche d’image inversée sur le moteur de recherche Yandex

Recherche Yandex

Bingo ! Une facade similaire est visible dans l’onglet Similar images (7ème en partant du haut).

La mention The image source is outdated or unavailable est dû au fait que nous avons revisualisé le résultat de cette recherche plusieurs jours après l’épreuve

Cette photo nous amène sur un blog qui nous permet d’identifier ce bâtiment.

Il s’agit du château Koldinghus situé au Danemark.

Drapeau
Flag{Koldinghus}

Find the road 200 pts

Cette fois-ci, l’épreuve se corse légèrement, on nous demande de retrouver le nom de la rue depuis laquelle le cliché ci-dessous a été pris :

Image de l’épreuve, paysage d’une petite ville

Bon, éliminons d’office les EXIF et la recherche inversée, la présence du filigrane Google dans le coin supérieur gauche de la photo nous suggérant que nous allons nous lancer dans une manche de Geoguessr :

Filigrane Google dans le ciel et non pas Lucy dans le ciel avec des diamants

Deux bâtiments singuliers retiennent mon attention :

1. Un bâtiment ressemblant à une gare.

Celui-ci expose une devanture sur lequel semble être inscrit Hauptbahnkof.

On lit sur le toit du bâtiment à gauche DB et Hauptbahnhof

Après une recherche, il s’agit du mot Hauptbahnhof (avec tous ces pixels qui jouent au Twister ça n’était pas évident).

On distingue aussi un logo DB, tentons donc une recherche "Hauptbahnhof DB" :

Résultat de la recherche Google Image

Ces images semblent indiquer (logo au dessus d’une gare et sur un train) qu’il s’agirait d’une entreprise ferrovière privée allemande (DB étant l’acronyme de Deutsche Bahn).

2. Un bâtiment ressemblant à un hôtel.

Ce batiment expose lui aussi une devanture sur lequel est inscrit deux mots :

On lit en haut du toit le mot ESSEN

Le 1er est le mot ESSEN qui d’après les quelques restes de mes cours d’allemands correspond au verbe manger.

Meme pikachu perdu ou émerveillé selon les interprétations
Hein ?

Le deuxième mot est masqué par des œils-de-bœuf (oui, on dit œils et pas yeux) et n’a pas l’air réellement exploitable.

Pourquoi écrire MANGER au dessus de ce qui semble être un hôtel ?

Il aurait été plus adéquat d’y écrire DORMIR (ou JOUER AU TWISTER) ?

Tout simplement parce qu’une ville allemande s’appelle MANGER (logique) :

Résultat de la recherche Google du mot essen

Il ne reste plus qu’à tenter Essen Hauptbahnhof dans Google Maps :

Résultat de la recherche Google Map des mots Essen Hauptbahnhof

Et de passer en vision véhicule :

Vue piétonne de Google Street View correspondant exactement à la photo de l’épreuve

Pour retrouver le lieu pris en photo depuis la rue Hollestraße de la ville d’Essen en allemagne.

Drapeau
Flag{Hollestraße}

On the road again 200 pts

Un nouveau cliché nous est soumis pour analyse, avec cette fois-ci un environnement rural.

On nous demande de retrouver le nom du lieu (ville/village) le plus proche de l’emplacement depuis lequel le cliché a été pris.

Au premier abord, ce manque d’éléments sur lesquels il serait possible de pivoter semble rajouter de la difficulté à cette épreuve.

Pourtant, cela limite drastiquement les pistes à explorer et par extension les fausses pistes (surtout que contrairement à un cas réel de ROSO, cette épreuve est forcément réalisable).

Vous connaissez la chanson, décomposons le problème :

Image de l’épreuve, intersection de route

1. Un panneau de promotion pour la sécurité routière

Ce panneau est au centre de l’image et attire forcément directement notre attention.

Le slogan LA VITESSE TUE semble être lié à une campagne de sensibilisation à la sécurité routière.

Sur la base du slogan, il est envisageable de retrouver quel organisme a initié cette campagne et quelle zone géographique elle couvre.

Zoom sur le panneau de publicité

Et effectivement, en rechercheant "la vitesse tue" "panneau" via la recherche d’images du moteur Google, on identifie une image similaire au panneau :

Capture d’écran des résultats de la recherche Google

La qualité de l’image étant bien meilleure, nous pouvons y lire : Le gouvernement du Grand-Duché du Luxembourg.

Image du panneau en bonne qualité

2. Un panneau de direction

Deux débuts de noms de lieux sont inscrits sur ce panneau :

Zoom sur les panneaux de signalisation d’itinéraire

Le Luxembourg n’ayant pas une superficie importante, un recoupement des noms de lieux luxembourgeois avec ces indices devrait réduire notre zone de recherche.

En utilisant cette liste Wikipédia des noms de communes luxembourgeoises nous savons désormais (via la magie du CTRL+F) que ces deux lieux sont :

Il nous suffit donc de passer en caméra véhicule Google dans cette zone relativement restreinte et de chercher ce fameux panneau :

Capture d’écran de la zone géographique sur Google map en vue satellite

Après quelques minutes, nous retrouvons cette intersection à proximité du lieu-dit Roost.

Capture d’écran du point de vue de l’image initiale en mode piéton sur Google map

Drapeau
Flag{Roost}

Fly 300 pts

Fly est l’épreuve du chemin The Wanderer qui nous aura pris le plus de temps, nous avons manuellement recherché le lieu bien qu’une technique « semi-automatique » permettait d’accélérer la recherche.

Le but de cette épreuve était d’identifier le lieu pris sur la photo satellite ci-dessous :

Capture d’écran de l’image satellite Google d’un aérodrôme

Dans un premier temps, identifions les points clés présents sur cette image :

1. Une piste et des marquages au sol

Deux pistes perpendiculaires (péremptoires ?) ainsi qu’un marquage au sol sont nettements visibles à droite de l’image.

Cette piste n’a pas l’air d’être faite de bitume mais plutôt de terre ou d’herbe.

2. Des bâtiments

Au centre de l’image, nous pouvons identifier des bâtiments qui ressemblent à un groupement de hangars.

Nous pouvons aussi relever la présence d’une forme ronde au milieu d’un carré de végétation.

Bâtiments de l’aérodrôme

3. Un petit avion

Proche des bâtiments, il est possible d’identifier un petit avion.

Avion présent proche de la piste de l’aérodrôme

Une fois ces éléments mis ensemble, il est possible d’émettre l’hypothèse qu’il s’agit de la photo d’un petit aérodrome (hangars, la piste n’est pas en dur & présence d’un petit avion).

La forme particulière de la piste ainsi que des constructions nous permettra de reconnaitre plus facilement le lieu dans nos recherches.

D’après la consigne, ce lieu est situé dans l’Est de la France.

Grâce à une liste des aérodromes de France, nous avons pû commencer nos recherches :

Etant donné que le dernier lieu visité par DonGru était au Luxembourg, nous avons commencé par chercher des aérodromes proches de la frontière, sans succès.

Après plusieurs dizaines de minutes de recherche, nous avons décidé de rechercher un peu plus au sud et nous avons fini par tomber sur l’aérodrome de Til-Chatel.

Drapeau
Flag{Til-Châtel}

Bonus

Pendant l’écriture de ce rapport, la résolution de cette épreuve nous a parrue quelque peu chaotique (un peu comme des pixels qui jouent au Twister).

En effet, en quelque minutes il est possible de rédiger un petit script qui importe un fichier de coordonnées, supprime ceux qui ne sont pas dans l’Est de la France et qui prend des captures d’écran d’un navigateur sur Google Maps :

import geopandas as gpd import fiona import gmplot import time import os from selenium import webdriver # Init ## CONST tmp_file = "tmp_map.html" ## GeoPandas ajout du convertisseur de fichier KML vers GeoDataframe gpd.io.file.fiona.drvsupport.supported_drivers['KML'] = 'rw' ## Selenium ## /!\ ne pas oublier d'installer le pilote associé driver = webdriver.Firefox() ## OS working_dir = os.getcwd() # On charge le fichier de coordonnées dataframe = gpd.read_file('fly.kml', driver='KML') # On retire les points en dessous d'une latitude de 2.5 (à l'ouest de la France) dataframe_est = dataframe[dataframe["geometry"].x > 2.5] del dataframe # Itération sur les points dans l'Est de la France for index, row in dataframe_est.iterrows(): gmap_tmp = gmplot.GoogleMapPlotter(row["geometry"].y, # Longitude row["geometry"].x, # Latitude 17, # On zoom un peu map_type="satellite") # On force le rendu satellite gmap_tmp.draw(tmp_file) driver.get(f"file://{working_dir}/{tmp_file}") time.sleep(3) driver.save_screenshot(f"{working_dir}/FLY/{row.Name}.png")

L’avantage de ce mode de fonctionnement est qu’étant donné qu’on utilise le pilote Gecko en mode graphique, il est possible de visualiser la fenêtre de navigateur ouverte par Selenium ainsi que la photo de cette épreuve sur un autre écran pour identifier bien plus efficacement l’aérodrome :

Il est fort probable qu’il y ai des solutions bien plus optimales pour résoudre cette épreuve mais ce script servira sûrement pour d’autres CTF :-).

The Statue 200 pts

Dans cette épreuve il nous est demandé de retrouver le lieu depuis lequel la photo ci-dessous a été prise :

Image que nous devons investiguer

Trois éléments semblent importants sur cette image.

1. Une plante

Une plante est visible au second plan de cette image.

Plante ressemblant à un palmier

Il est parfois possible de restreindre une zone de recherche en se basant sur la végétation.

Malheureusement, en se basant sur un site qui permet d’identifier le type d’une plante depuis une photo, il semblerait que cette plante (Cycas du Japon) pousse un peu partout sur le globe :

Localisation géographique du Cycas du Japon

2. Une villa ?

Un bâtiment ressemblant à une villa est visible à l’arrière plan de cette photo.

Il s’agit là aussi d’une fausse piste, la photo étant assez sombre elle donne un aspect uniforme à ce qui est en réalité un ensemble de bâtiments distincts.

Bâtiments de nuit

3. La statue

Le troisième point est bien plus intéressant.

La statue

La statue pourrait être une représentation du Petit Prince de Saint-Exupéry, plusieurs éléments confirment cette hypothèse :

Couverture du livre « Le Petit Prince », on reconnait le personnage de la statue

Basons notre recherche sur cette fameuse statue, en tapant "statue" "petit prince" "france" il est possible d’identifier une pose similaire (coin inférieur gauche) sur une photo d’une statue du Petit Prince :

Capture d’écran de la recherche google évoqué précédemment

En fouillant sur le site hébergeant cette photo, il est possible d’identfier dans l’URL https://petit-prince-collection.com/images/album/large/pavalat-les-flots.jpg le nom d’une ville depuis laquelle la photo a potentiellement été prise.

En se rendant à Pavalas-les-Flots depuis Google Maps, nous retrouvons bien le rond point sur lequel est exposé cette statue :

Photo google street du rond point de Palavas-les-Flots

Drapeau
Flag{Palavas-les-Flots}

Further 500 pts

L’épreuve nous demande de trouver la prochaine destination de notre voyageur. Il nous est aussi indiqué que nous devons nous baser sur toutes les informations que nous avons récupéré jusqu’à maintenant.

Commençons par inscrire l’ensemble des lieux où nous avons identifié notre cible durant les épreuves précédentes sur une carte :

L’ensemble des lieux trouvés dans les épreuves précédentes sont alignés sur une carte

La trajectoire de notre voyageur se déplace tout droit vers son point de rendez-vous, comme indiqué dans le message de Cryptoka à DonGru.

En zoomant sur la zone de la prochaine potentielle destination, on tombe sur l’archipel des Baléares.

Le bout de la ligne passe légèrement à côté d’Ibiza

Durant l’épreuve « Where are you? », on apprenait que la blogueuse Ema Peetars aka Chainburst avait été en voyage erasmus à Ibiza avec ses trois meilleurs amis sur une de ses publications Facebook.

Cette fois-ci sur le profil VKontakt d’Ema, elle indique qu’elle vient d’arriver à l’hôtel Royal plaza.

Publication d’Ema sur VKontakt indiquant son arrivée à l’hôtel Royal Plaza

Cet hôtel se situe à Ibiza, ce qui vient recouper la première information présente sur son profil Facebook.

Enfin, la section du message de Cryptoka à DonGru make sure C. will be there on time fait référence à Chainburst, ce qui veut dire que le lieu de rendez-vous semble être à Ibiza.

Nous essayons cette hypothèse et obtenons la validation de l’épreuve.

Drapeau
Flag{Ibiza}

The meeting 300 pts

Cette épreuve nous demande de revenir sur l’ensemble des informations que nous avons récolté au cours des épreuves précédentes, afin de trouver les informations suivantes :

Avec les trois thématiques de cette épreuve, on comprend alors que chaque thème nous apporte une réponse.

Nous avons déjà déduit la ville et le lieu dans l’épreuve précédente.

Cependant, la date reste encore une énigme.

Dans un premier temps, nous avons pensé qu’il s’agissait du résultat de l’épreuve « Dig the past ».

Cependant la soumission du résultat Flag{Ibiza|Royal plaza|2021-07-02} est refusée.

Notre seconde hypothèse se basait sur la date de téléversement du fichier TODO.txt et au message qu’il contient.

En partant du principe que DonGru ait lu le message le jour où le fichier a été téléversé, et en se basant sur ce qu’indique le message suivant :
DonGru, you know where to go. Be there in 5 days, we have an agreement.
La date de téléversement du fichier TODO est le 25 Novembre 2021

On peut réaliser le calcul suivant :
25 Novembre 2021 + 5 jours = 30 Novembre 2021

La soumission du résultat Flag{Ibiza|Royal plaza|2021-11-30} nous est aussi refusée, contredisant ainsi notre seconde hypothèse.

Nous avons alors remis en question notre méthode de recherche.

Les deux premiers indices semblaient provenir d’un thème respectif :

En suivant cette logique, nous avons commencé à passer au peigne fin l’ensemble des informations récupérées sur le thème du comptable.

C’est là qu’un élément nous a alors sauté aux yeux.

Le compte Vinted de Karl VonTonberg aka Cryptoka dispose d’une description indiquant la phrase suivante :
Please ! Do not buy me anything on 04 dec. 2021. I will be off.

Karl fait sûrement référence à la date de rendez-vous, à laquelle il ne sera pas disponible.

Nous testons cette nouvelle hypothèse, et soulagement, elle s’avère être bonne.

Drapeau
Flag{Ibiza|Royal plaza|2021-12-04}

Cette épreuve permettait de soumettre uniquement 5 réponses, d’où le soulagement de l’avoir enfin validé.

The boss

Frame 100 pts

Cette épreuve nous demande d’analyser une vidéo pour y trouver un message caché.

En réalisant des poses régulières dans la vidéo, on arrive à trouver trois morceaux de drapeau :

Capture d’écran du milieu du drapeau

3very_

Capture d’écran du début du drapeau

flag{An4lyz3

Capture d’écran de la fin du drapeau

Fr4m3}

En mettant bout à bout ces trois morceaux, on obtient le drapeau final :

Drapeau
Flag{An4lyz3_3very_Fr4m3}

Note potentiellement utile pour la suite.

Jason 200 pts

En complément des morceux de drapeau, il est possible d’apercevoir des identificateurs d’ensembles de services (SSID) :

L’objectif de cette épreuve est de retrouvrer l’adresse MAC du point d’accès ManiparWifi.

Il existe un outil qui cartographie des réseaux Wi-Fi : WiGLE.

Ce service permet notamment de retrouver des points d’accès Wi-Fi en filtrant sur plusieurs critères tel que le SSID, nous permettant ainsi de retrouver l’adresse MAC de ce point d’accès : 2A:AC:50:E8:35:62.

Capture d’écran de l’interface du site WiGLE

Drapeau
Flag{2A:AC:50:E8:35:62}

Source 200 pts

On nous indique dans l’énoncé qu’un nouveau membre a été découvert. Son pseudonyme est IntelBender. On apprend qu’il s’agit d’une personne maîtrisant les sujets d’informatique.

Naturellement, nous utilisons l’outil WhatsMyName pour trouver les comptes associés à ce pseudonyme et on obtient :

Résultat de l’outil WhatsMyName, détaillé ci-après

Le compte d’intelbender possède un seul dépôt de code public intitulé « contact », qui contient le drapeau que nous cherchons, dans le fichier README.md affiché par défaut sur github.

Drapeau
Flag{G1thub_is_th3_pl4ce_t0_B3}

Trebel, bass, ut base 200 pts

Comme expliqué précédemment, nous avons trouvé en plus du compte GitHub, un compte KeyBase.

La description de ce compte présente le drapeau :

Drapeau
Flag{IntelBender_1s_0n_K3ybase}

Decrypt age 400 pts

L’épreuve lit les deux épreuves précédentes.

Le dépôt github contient un fichier contact.txt. En se basant sur les informations du Keybase (en l’occurence la clé publique gpg), l’objectif consiste à déchiffrer le contenu du fichier contact, qui est chiffré.

Nous avons rapidement identifié le type de chiffrement en remarquant que le début de chaque message était identique : kXR7VktZdyH7rvq.

En cherchant cette chaîne de caractère sur google "kXR7VktZdyH7rvq", on obtenait un fichier dans pastebin.com qui indiquait le chiffrement avec l’entête suivante : BEGIN KEYBASE SALTPACK SIGNED MESSAGE.

Nous nous sommes alors dirigé vers la documentation de cette méthode de chiffrement : https://saltpack.org/

Il nous restait alors moins de 5 minutes avant la fin du CTF.

Nous avons essayé d’utiliser l’utilitaire python, mais nous avons échoué à déchiffrer le message dans le temps imparti.

Remerciements

Merci à l’équipe d’organisation de l’HexaCTF et tous les créateurs des épreuves.

L’ensemble des épreuves étaient extrêmement bien agencés, rendant l’immersion bien meilleure par rapport à la majeure partie des autres CTF d’OSINT auxquels nous avons eu l’occasion de participer jusqu’à maintenant.

Félicitations pour ça !

Cependant, il est dommage que les énoncés n’aient pas été rendus accessibles après la fin de l’épreuve afin de simplifier la rédaction des participants souhaitant réaliser un rapport écrit.

Signé : L’équipe des patatodingos de Cadriciel Malveillant.

Glossaires :baguette_bread:


Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.