Épreuve OSINT du CTF OSINT Industries. Méthodes légales et open source uniquement, aucun contact avec un individu, aucune intrusion. Reproduction à fins pédagogiques ; les valeurs finales sont masquées pour ne pas divulguer le flag.
Une carte d'embarquement photographiée puis postée en ligne, volontairement pixelisée sur les champs sensibles. Il faut retrouver le passager, son siège et le code IATA de l'aéroport d'arrivée, au format OSINT{NAME_SURNAME_SEAT_IATA}.
Démontrer que la donnée recherchée n'est pas dans le fichier flouté mais dans son fichier parent, et le retrouver par un pivot sur un identifiant quasi-unique, sans aucune interaction ni accès non autorisé.
1 · Reconnaissance
Malgré le floutage, plusieurs champs restent lisibles en clair : la date (09JUN13), le transporteur (US / American Airlines), le PNR ONKMIF, et un code aéroport de départ LAX. Le nom et le siège, eux, sont pixelisés.
L'analyse EXIF révèle que le fichier est un dérivé, pas l'original :
$ exiftool billet_censored.jpg
IPTC Digest d41d8cd9…8427e (le MD5 d'une chaîne vide)
Make / Model / GPS absents · résolution ramenée à 72 dpi
nom de fichier AAAAMMJJ_HHMMSS (convention Samsung)
[!] recompressé + purgé → la donnée est dans l'ancêtre
La question devient donc : non pas « comment dépixeliser », mais « comment remonter au fichier parent ».
2 · Les fausses pistes
- Dépixeliser le texte : ne reconstruit jamais un nom arbitraire (blur non réversible ici). Leurre de l'énoncé.
- Décoder le code-barres PDF417 (format BCBP / IATA 792, qui contient nom, PNR, itinéraire et siège) : la compression et le flou dégradent trop de modules, la correction d'erreur est dépassée.
- Lookup PNR « manage my booking » : nécessiterait le nom, constituerait un accès non autorisé, et le vol de 2013 n'est plus en ligne. Interdit et inutile.
zxing-cpp / pdf417decoder ~30 variantes (upscale x2..x6, sharpen, Otsu)
[x] 0 décode · zxing.org → "No Barcode Found"
raison qualité < seuil de correction d'erreur du PDF417
3 · Le pivot PNR
Le PNR ONKMIF n'est pas une clé d'accès mais un identifiant quasi-unique (6 caractères alphanumériques). Il n'apparaît pas dans du texte au hasard, ce qui en fait un excellent terme de recherche pour remonter à l'origine de l'image.
recherche "ONKMIF"
[*] critère de validation : recoupement sur un point quasi-unique
[+] plusieurs sources indépendantes → même réservation
La triangulation renvoie une source publique (une vidéo virale de géolocalisation) qui affiche le billet non flouté. Le nom et le siège s'y lisent visuellement : aucune intrusion, simple consultation d'un contenu déjà public. C'est le fichier ancêtre cherché à l'étape de recon.
4 · Le piège origine / destination
LAX est le départ, pas l'arrivée. La véritable destination (masquée ici) est confirmée via la base officielle IATA (iata.org/en/publications/directories/code-search/) plutôt qu'en la déduisant du billet.
5 · Résultat
Éléments reconstitués (masqués pour ne pas divulguer le flag) : passager, siège, aéroport d'arrivée. Le PNR et le départ (LAX) étaient visibles ; le reste vient de la source parente et de la base IATA.
6 · Leçon défensive
- Pixeliser le texte ne sert à rien tant que le PDF417 est visible : le code-barres d'un billet (BCBP / IATA 792) encode en clair nom, PNR, itinéraire et siège.
- Un PNR seul suffit à pivoter : 6 caractères quasi-uniques, traçables.
- Ne jamais poster une carte d'embarquement, même partiellement masquée. Masquer le code-barres ET le PNR ET le nom, pas juste le nom.
- Même purgées, les métadonnées trahissent l'appareil et la manipulation. Une donnée exposée une fois est exposée pour toujours.