Éplucher l'encodage : décoder du Base64 et ROT13 en couches
Le défi
Cette chaîne a traversé deux couches avant d'atterrir dans un log. Retirez-les avec les boutons de décodage jusqu'à ce que le flag apparaisse, puis soumettez-le.
Ce que tu vas apprendre
- Comprendre la différence entre encodage et chiffrement, et pourquoi l'encodage n'offre aucune confidentialité
- Reconnaître le base64 à l'œil nu (son jeu de caractères et le padding = final) avant de le décoder
- Repérer un décalage ROT13 / César dans un texte où la forme des mots est intacte mais les lettres sont fausses
- Éplucher des transformations enchaînées couche par couche et confirmer quand on obtient un texte clair lisible
- Écarter les transformations leurres (hex, URL, inversion) en vérifiant si leur format d'entrée s'applique
Compétences testées
Prérequis
- Connaître l'idée que des données peuvent être re-représentées (encodées) sans être secrètes
- Être à l'aise pour lire de courtes chaînes ASCII
Comment ça marche
L'encodage et le chiffrement sont faciles à confondre car tous deux transforment un texte lisible en quelque chose qui semble brouillé. La différence, c'est la clé. Le chiffrement a besoin d'un secret pour être inversé, donc sans la clé les données restent confidentielles. L'encodage n'a aucune clé : c'est simplement une façon convenue et publique de re-représenter des octets pour qu'ils survivent à un fichier de log, une URL ou un e-mail. base64 et ROT13 sont des encodages, pas des chiffrements : n'importe qui peut les inverser en un clic, sans aucun secret.
C'est exactement pourquoi une valeur cachée derrière une ou plusieurs couches d'encodage est, du point de vue de la sécurité, en clair. Ce challenge en empile deux. Le jeu de caractères et le padding == final trahissent le fait que la couche externe est du base64. Décodez-la et vous n'obtenez pas encore des mots lisibles : vous obtenez un texte où la forme des mots et des accolades semble correcte, mais dont les lettres sont décalées d'une quantité fixe. Ce décalage fixe est la signature du ROT13 (un décalage de César de 13). Inversez cette seconde couche et le flag en clair apparaît.
Le décodeur propose aussi des boutons hex, URL et inversion. Ce sont des leurres dont le rôle est d'enseigner la reconnaissance des couches : le décodage hex attend des paires de chiffres 0-9a-f, le décodage URL attend des échappements %, et l'inversion se contente d'inverser l'ordre. Aucun de ces formats ne correspond à ce que vous observez, donc les appliquer produit soit une erreur, soit un résultat incohérent : un signal utile indiquant que vous avez choisi le mauvais outil pour cette couche.
Erreurs fréquentes
- Confondre encodage et chiffrement. Penser que la valeur est "protégée" parce qu'elle a l'air brouillée. Il n'y a aucune clé ici, donc cela n'offre aucune confidentialité : il suffit d'appuyer sur les bons boutons dans le bon ordre.
- Deviner les transformations au lieu de lire le format. Se précipiter sur hex, URL ou inversion alors que la chaîne porte clairement un padding base64. Chaque transformation attend une forme d'entrée précise ; vérifiez cette forme avant de cliquer.
- S'arrêter après la première couche. Le résultat du base64 est encore brouillé (lettres décalées), il est donc tentant de penser que c'est terminé ou que le décodage a échoué. Reconnaissez le décalage de César et épluchez la seconde couche.
- Réappliquer une transformation à sa propre sortie. Décoder en base64 une valeur déjà décodée, ou appliquer ROT13 deux fois, annule votre progression. Appliquez chaque couche une seule fois, dans l'ordre, et observez le résultat devenir plus lisible à chaque étape.
Comment s'en protéger
La leçon défensive est simple : ne jamais compter sur l'encodage pour garder quoi que ce soit secret. Si une valeur doit rester confidentielle (un token, un identifiant de session, une donnée personnelle), elle doit être protégée par une vraie cryptographie (chiffrement authentifié avec une clé correctement gérée) ou tout simplement ne jamais être journalisée. Du base64 dans un log, un cookie ou un paramètre d'URL signale "ceci est un format de transport", pas "ceci est sécurisé".
- Gardez les secrets hors des logs et des URL ; masquez-les ou hachez-les avant qu'ils ne soient écrits.
- Utilisez un chiffrement authentifié (avec une clé gérée) lorsque des données ont réellement besoin de confidentialité, et considérez toute couche base64/hex/URL comme purement cosmétique.
- Lors de l'audit de vos propres systèmes, décodez chaque valeur encodée trouvée pour confirmer qu'aucune donnée sensible ne se trouve à un clic du texte en clair.