Principe:
Le flag est dans l'historique d'un fichier KDBX qu'on doit cracker (pass + fichier clef) lui-même dans un zip chiffré (pass) qu'on localisera dans l'image RAW d'une clef USB
Le challenge
Le challenge nous demande d'explorer le contenu d'une image disque (clef USB)
En montant l'image, on trouve des photos de chats
Il y a aussi un dossier masqué: il contient un fichier PDF, qui sera sans doute utile
Mais impossible d'ouvrir le PDF! Il semble, d'après file, qu'il s'agisse en fait d'un JPG
Et c'est aussi une photo de chat! On va la garder de côté
Photorec
L'image disque semble contenir des données, on va reprendre la même approche que
Floppy (Forensics)
On choisit l'image RAW dans photorec
On scannera tout le disque
Pour tout type de partition
On sauvera le résultat dans un dossier dédié
Et on récupère 37 fichiers
Dont les chats précédents, des ELF, et un zip
J'ai aussi essayé quelques algos manuels, qui ont extrait des PNG et des GZ supplémentaires
Le zip
En ouvrant le zip, on trouve un fichier KDBX, qui est une base de données de mots de passe
au format KeePass
Mais le zip est chiffré: pour extraire le KDBX, il nous faut le mot de passe du zip!
Un coup de zip2john et de john via rockyou (au hasard, c'est un classique) et on trouve
le mot de passe du zip: agentkitty
On extrait le KDBX
Le KDBX
Si on essaie de l'ouvrir, on ne peut pas: il nous manque le mot de passe et/ou le fichier de clef
Un coup de keepass2john et de john et… ouais, bon, ça va être trop long là!
Une autre liste?
J'ai tenté d'extraire du RAW tout ce qui pouvait ressembler à un mot de passe,
pour réduire le temps de calcul. Mais c'était une fausse piste
Les chats?
J'ai aussi passé beaucoup de temps à essayer de trouver une stégano dans les images de chat:
j'espérai que le mot de passe du KDBX s'y trouve
D'autant que les images semblent venir d'internet, mais ne sont pas tout à fait identiques
(MD5 différent), donc, elles pourraient contenir des données cachées
Impossible toutefois de trouver quelle stégano aurait été utilisée.
Donc, j'ai dû essayer une autre approche.
Et ce n'était pas non plus une question de contrastes, de texte caché dans l'image, etc
Oh pas de bol, voilà des ELF!
Une autre piste: les fichiers ELFs sont peut-être utiles? Aucun ne semble venir d'internet
J'espérais qu'un de ces ELF permettrait de déchiffrer une des images de chat, qui aurait pu être
un fichier stéganographié, et donner ainsi le mot de passe du KeePass
Dans les données récupérées, on peut voir la mention d'un Raspberry Pi et d'un réseau
appelé raspirate
Ayant un raspberry sous la main, et une carte SD vierge, je décide de monter une image
ARM64 dessus et j'essayerai les ELF (j'ai essayé plusieurs images d'ailleurs)
Oui, derrière, c'est "La méthode Française" avec Lino Ventura. Comme cet acteur a parfois
joué dans des films d'espionnages, j'espérais que cela me donnerai un indice pour un des autres
challenges, appelé "La méthode française" :)
Le Raspberry Pi se lance alors
Mais la plupart des ELF n'étaient pas intéressants:
il s'agissait de dérivés de GNU/binutils. Seuls deux fichiers restaient mystérieux
Mais même eux semblaient ne servir à rien, car certaines strings se retrouvaient en ligne
C'était finalement une énorme fausse piste, mais le challenge étant "Extrème", je suis resté
persuadé qu'il fallait trouver la clef dans ces ELF.
L'indice
La fin du CTF approchant, et ayant assez de points pour rester top 10,
j'ai acheté les indices du challenge
Ces deux indices m'ont poussé à croire que ma piste des ELF était un gros cul de sac,
et qu'il fallait revenir sur le KDBX
J'ai donc créé un fichier KDBX de test avec le mot de passe lexluthor
et un fichier de clef, pour le cracker via john. Ca marche.
Au vu de l'indice, le KDBX s'ouvre certainement avec un fichier de clef et un mot de passe
(car j'avais déjà essayé d'ouvrir le KDBX avec chaque fichier de chat en guise de clef)
Il ne reste donc plus qu'à tenter de cracker le hash du KDBX avec chaque image de chat
(et une sans aucune image, histoire de couvrir un maximum de cas)
Comme l'indice disait "inutile de repartir de zéro", et que nous n'avons pas utilisé les "rules"
de john pour cracker le zip, je me suis dit que le KDBX demanderait d'utiliser ces rules.
Donc, je suis parti du agentkitty, des rules et des hashs KDBX avec chacun des fichiers
Au vu de l'indice, j'ai aussi essayé john avec tout ce qui se trouve dans rockyou,
et qui a un lien avec agentkitty
Après beaucoup d'essais, je finis par trouver un mot de passe qui marche! Agentkitty3,
seul mot de ma wordlist.txt avec les rules de base (--rules=all était trop long)
La clef du fichier
En essayant le mot de passe Agentkitty3 avec chacun des fichiers de photo de chat en
guise de fichier clef (car j'ai oublié lequel était le bon), on ouvre enfin le coffre
On export tous les mots de passe pour les analyser tranquilement
(parce que le coffre en contient beaucoup!)
On peut maintenant chercher, dans ces mots de passe, le flag
Mais rien… alors je cherche un truc qui pourrait ressembler au flag,
puisque les mots de passe semblaient générés aléatoirement. Une entrée ressort
Comme le base64 -d n'a rien donné, j'ai regardé l'historique de cette entrée dans le KDBX
Flag
Et en regardant chaque entrée de cet historique, on trouve le flag:
404CTF{D3l3t1nG_4nD_P4sSw0Rds_n0T_3N0UgH}
Sans les indices, je n'aurai jamais autant insisté pour casser le KDBX.
Pas de regret à avoir acheté ces indices donc, même s'ils m'ont coûté la 7e place
(mais bon, je suis 10e, ca va). D'autant plus que ces indices m'ont permis de flagger
ce challenge à 1000 points, mais aussi le suivant à 1000 points aussi
(je savais qu'il y aurait un autre challenge 4/4 donc que les indices seraient sûrement rentables)