Cascade

Flag: CYBN{C45c4d3_R3v34l3d}

Challenge

Description


Un oracle de chiffrement est à votre disposition. Envoyez-lui des messages, et il vous retournera leur version chiffrée. Mais attention, un secret est ajouté à la fin de votre message avant le chiffrement, à vous de le trouver !


FLAG_CHARSET = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789#$-?!@_{}'

Solution

Il faut commencer par faire un peu d'analyse :

  1. C'est un chiffrement par bloc de 16 octets.

  2. Un même input donne la même sortie

  3. Le flag est ajouté à la fin de notre message (c'est dans l'énoncé)

On va faire une attaque par padding. L'objectif, c'est de "pousser" le flag à la limite d'un bloc pour ne faire dépasser qu'un caractère. On observera alors le résultat du chiffrement (ici, en violet ce sont les lettres du secret que l'on ne connaît pas).

Ensuite, on brute-force jusqu'à retrouver le même résultat de chiffrement. On saura alors que c'est le même caractère que celui qu'on a fait dépasser tout à l'heure :

On répète l'opération pour les caractères suivants, et 1 à 1, le flag se révélera. (en bleu, c'est notre input, en violet ce qu'on ne connaît pas encore)

Le script complet en python :

Mis à jour

Ce contenu vous a-t-il été utile ?