Solution de cbothamy pour La base

misc

3 avril 2025

Table des matières

Analyse

On déduit de la catégorie misc et du hint qu’on doit trouver l’astuce qui valide l’entrée s

int(base64decode(s)) = eval(s)

Plus précisément, dans le programme fourni :

  • l’entrée est évaluée via eval d’un coté, en s’assurant qu’il est impossible d’injecter des appels à des fonctions python à l’aide de l’assertion :

      assert not any(isinstance(node, ast.Call) for node in ast.walk(tree))
    
  • puis, l’entrée est décodé au format base64 via :

      int.from_bytes(base64.b64decode(s), byteorder = 'little')
    

Les deux résultats doivent être identiques pour afficher le flag.

On remarque que l’appel à b64decode ne comporte pas le paramètre validate=True, donc tous les caractères non présents dans l’alphabet base64 seront ignorés.

De plus, avec une chaine vide, int.from_bytes(base64.b64decode(""), byteorder = 'little') renvoie 0.

Solution

Il ne reste plus qu’à trouver une expression python ne comportant aucun caractère de l’alphabet base64 qui sera évalué à 0 :

$ nc localhost 4000
>>> "&"=="$"
FCSC{15426100f6ad140a6279d58b365d74dd1d2701c9e87231f0e056d902dbd175ea}