Aller au contenu
Retour aux défis CTF

Défi CTF

NorthSec 2013 – Piste des cartes à puce – Partie 6

Voici la sixième et dernière partie du récit de la piste des cartes à puce au NSEC 2013. Vous pouvez consulter les cinq premières parties: partie 1, partie 2, partie 3, partie 4 et partie 5.

À la fin de la partie 5, j’avais tous les éléments nécessaires pour construire les clés. J’ai donc suivi les instructions de XOR et j’ai bâti les deux clés assez rapidement (j’ai fait une ou deux erreurs au départ, puis je les ai obtenues correctement). Les deux valaient des drapeaux à un point, ce qui m’a confirmé qu’elles étaient bonnes.

La procédure demandait ensuite de choisir un nouveau NIP (0x3030303030303030 était suggéré). J’ai remarqué qu’il s’agissait d’un multiple de la longueur de bloc du chiffre, alors je l’ai utilisé tel quel pour éviter d’introduire des sources d’échec supplémentaires. Il fallait le chiffrer et le signer (MAC) de la manière standard. Je ne savais pas si la manière standard consistait à calculer le MAC sur le NIP en clair ou sur le NIP chiffré, alors j’ai essayé les deux. Il s’est avéré qu’en calculant le MAC sur le NIP chiffré et en soumettant la clé chiffrée concaténée au MAC à la fonction d’écriture sécurisée, ça fonctionnait. Je n’ai reçu aucune erreur. J’avais changé le NIP de la carte à puce avec succès.

J’ai alors pris ma carte, marché jusqu’à l’accueil (à la table des organisateurs) et je l’ai insérée dans le lecteur du terminal. Il m’a demandé mon NIP et j’ai tapé 00000000. Un Yabadabadou (des Pierrafeu) a retenti dans toute la salle et un drapeau s’est affiché à l’écran du terminal. J’ai pris un stylo et je l’ai noté. Il commençait par: OEHPR_FPUARVRE…

Il était plutôt long, alors je l’ai noté avec soin. Je suis retourné en vitesse à mon portable et j’ai soumis le drapeau. Échec… J’ai cru avoir fait une erreur, mais il y avait un autre drapeau mentionné dans les instructions de la piste: le nouveau défi obtenu après une authentification réussie. Avant de m’authentifier une deuxième fois, je voulais m’assurer d’avoir CE drapeau, au cas où la seconde authentification aurait modifié la valeur. J’ai donc lancé un getChallenge et obtenu un résultat différent du précédent. Parfait, je l’ai soumis et… échec.

J’étais tout au bout de la piste et les deux derniers drapeaux refusaient de passer. À ce moment-là, j’avais noté la valeur du GetChallenge, ainsi que celle de tous les enregistrements, au cas où. Je suis retourné au terminal de l’accueil, j’ai entré le bon NIP de nouveau et le yabadabadou a rejoué. Les gens devaient croire que je les narguais, mais non, je voulais seulement vérifier que j’avais bien noté le drapeau. J’ai vérifié: mon drapeau était bon. Pendant que j’étais là, j’ai parlé à l’un des organisateurs de la piste des cartes à puce du dernier drapeau, celui du GetChallenge, et je lui ai dit qu’il ne passait pas, alors il a commencé à vérifier.

De retour à mon portable, en regardant le drapeau, il avait l’air erroné: ce n’était pas de l’hexadécimal et des traits de soulignement séparaient clairement des mots. J’ai dit à Daniel qu’il fallait déchiffrer un chiffre par substitution pour soumettre le drapeau. Daniel a passé son outil de substitution sur le drapeau et il est devenu évident qu’il s’agissait de ROT13. On lisait BRUCE_SCHENEIER_… Je l’ai soumis et ça a fonctionné. Pendant ce temps, l’organisateur est revenu me dire qu’il avait corrigé le dernier drapeau et que nous pouvions le soumettre de nouveau. C’est ce que nous avons fait, et nous avions enfin terminé la piste des cartes à puce. Il ne restait alors que 30 minutes à la compétition, un peu tard pour entreprendre quelque chose de gros. J’ai quand même regardé autour, mais j’étais très fatigué et j’avais mal à la tête, alors je n’ai pas fait grand-chose.

Voilà, c’est toute l’information que j’ai pu tirer de la piste des cartes à puce. En fait, il y avait deux autres drapeaux dans cette piste que je n’ai pas faits moi-même.

Le recto de la carte à puce était imprimé comme une carte perforée, alors j’ai demandé à mes coéquipiers de commencer à la décoder pendant que je faisais les opérations cryptographiques sur la carte. Ils ont eu beaucoup de mal à trouver la bonne table de décodage, mais ils y sont finalement arrivés et, après de nombreux essais, ils ont obtenu le bon drapeau. C’était une chaîne hexadécimale de 20 octets (40 caractères). Les instructions de la piste mentionnaient deux drapeaux visuels sur la carte, alors les gars ont eu l’idée de chercher cette valeur dans Google. C’était effectivement un SHA1 connu, nous l’avons soumis et nous avons obtenu tous les points.

Envoyez-nous un message

Seul votre courriel est requis. Choisissez un sujet, ajoutez une note, puis envoyez.

Incident en cours? Appelez la ligne 24/7 plutôt que d’attendre une réponse: +1 450 681-1681, poste 277