Principe:
Exploiter un input() python… Pour ma part, en lisant le flag bit-à-bit
Infos (cf menu latéral):
🚩 Flaggué! +100 points gagnés —
💾 Téléchargez les fichiers du challenge
404CTF{cH0iX_nUm3r0_4_v1c701r3}
Le challenge
Vous entendrez beaucoup parler de "Hallebarde" ici car c'est le nom du "groupe de vilains hackers" qu'on est censé combattre dans la trame de fond (le Lore) du CTF
L'algorithme
shebang du fichier, mais je n'en ai pas tiré grand chose
choix, on voit que l'entrée est interprêtée comme du python,puisqu'ici, la variable choix est un dict (dictionnary, aka, un tableau associatif)Fichier du flag
input interprête notre entrée comme du Python, essayons de lire le contenu de "flag.txt": en local, ça marche
stderr ne nous est pas retournébit-à-bit
De manière générale, on a ici un "oracle" capable de nous renvoyer 3 valeurs: Pierre, Papier ou Hallebarde (en fonction de ce qu'on a "choisi" de jouer). On peut donc extraire un "trit" d'information à chaque fois. Comme c'est peu pratique, j'ai considéré qu'on a ici un oracle renvoyant deux états (Pierre ou Papier), donc un "bit" d'information pour chaque entrée
Lancement
Si la réponse est "Vous avez choisi: Pierre" à la i-eme question, c'est que le i-eme bit vaut 0, sinon, 1. J'ai répété mon payload 50 fois, considérant que le fichier ferait moins de 50 caractères
Flag
Je ne saisis pas pourquoi ce premier essai est raté
Vu le faible nombre de points du challenge, je sais qu'il existe plus simple (on doit pouvoir injecter le flag dans la liste des choix par exemples), mais j'aime bien cette méthode, et je ne l'ai pas vue chez les autres, donc, je la garde 😀
Flag: 404CTF{cH0iX_nUm3r0_4_v1c701r3}