Principe:
Comprendre l'algorithme de signature d'un exécutable (très, très mauvais algorithme!) et en forger un à partir d'un exemple de démonstration
Détourner un
code signé d'exemple (dispo ici)
pour exécuter du code arbitraire et lire le flag
La démo contient un script de démonstration signé façon "Hello world"
On test le challenge avec le script de démo (qu'on base64-ifie)
Et on se prépare un petit script pour le faire automatiquement
En analysant l'algorithme de signature, on s'aperçoit qu'il suffit que les données
fasse la même longueur et la même "somme" (en caractères ASCII)
On le vérifie avec un petit test rapide sur sum et len
Il ne reste alors plus qu'à forger le payload avec notre commande, suivit d'un commentaire
de sorte que la longueur totale soit fixe et la somme aussi
Pour que la somme soit constante, j'ai utilisé un caractère "haut" (0x7a soit z )
et un caractère "bas" (0x01 ). Utiliser 0x00 aurait pu être possible mais comme
ce caractère sert souvent de fin de string, j'ai préféré l'éviter
On notera aussi un complément 0x04 en fin de commentaire pour faire le complément
Et le fichier est accepté, le flag tombe:
404CTF{Th1s_Ch3cksum_W4s_Tr4sh}
↩ Retour à la liste des challenges
⇇ Retour à l'accueil