De retour pour le 4e challenge Narnia !
Le challenge Narnia 4 ressemble Ă©normĂ©ment au challenge Narnia2 vu prĂ©cĂ©demment, il sâagit de la mĂȘme faille de sĂ©curitĂ©.
Commençons sans plus tarder à disséquer ce challenge !
Le but de ce challenge est de rĂ©ussir Ă exĂ©cuter un shell grĂące au setuid, afin d’obtenir le mot de passe de Narnia5.
Comme vous avez pu le constater, il sâagit de la mĂȘme faille de sĂ©curitĂ© quâau cours du challenge Narnia2, câest-Ă -dire le strcpy.
Nous pouvons reprendre les étapes vues précédemment :
#include #include #include #include extern char **environ; int main(int argc,char **argv){ int i; char buffer[256]; for(i = 0; environ[i] != NULL; i++) memset(environ[i], '\0', strlen(environ[i])); if(argc>1) strcpy(buffer,argv[1]); return 0; }
Afin de dĂ©terminer la taille du payload, il est pratique d’utiliser peda.
Peda est un dĂ©buggueur basĂ© sur gdb. Il a l’avantage d’ĂȘtre trĂšs graphique et donc plus facile Ă utiliser que gdb.
Commençons par lancer peda avec la commande :
peda
SĂ©lectionner le fichier Ă utiliser :
file /narnia/narnia4
disassemble
disassemble main
On peut voir que le strcpy se situe au niveau de main +117, il peut ĂȘtre intĂ©ressant de placer le breakpoint Ă ce niveau-lĂ .
Configurez un argument suffisamment long pour remplir de buffer de 256 char et le faire dĂ©border, par exemple :Â
set args $(python2 -c 'print("A"*256 + "BBBB")')
Lancer le programme avec la commande run et voyez ce quâil se passe. Vous pouvez faire dĂ©filer les commandes une Ă une en tapant “n” puis en appuyant sur la touche Enter.
run
Comme vu dans le challenge Narnia 2, il ne reste plus quâĂ dĂ©terminer le moment oĂč EIP prend la valeur âBBBBâ en modifiant le nombre de A.
Vous saurez, Ă ce moment-lĂ , quelle longueur devra faire votre injection.
Dans ce deuxiĂšme temps, vous pourrez rĂ©cupĂ©rer une adresse de retour pour votre injection. Comme dâhabitude, cette adresse doit tomber au niveau des âAâ de votre injection.
Pour ce faire, au moment du leave, tapez la commande :
leave
x/300x $esp
Cette commande permet de visualiser le contenu de la pile, en hexadĂ©cimal, à un instant T.RĂ©cupĂ©rez une adresse oĂč vous voyez de nombreux âAâ (0x41).
0x41
Si vous nâaviez pas lu lâarticle pour fabriquer le shellcode de Narnia2, cliquez ici !
En résumé, voici les quelques étapes à suivre :
Sinon, vous pouvez rĂ©cupĂ©rer votre shellcode pour Narnia2 et lâadapter pour ce cas !
Enfin, il ne reste plus quâĂ remplacer les valeurs trouvĂ©es au cours des Ă©tapes prĂ©cĂ©dentes (Nombre de NOP et adresse de retour) pour obtenir une injection de ce format lĂ :
$(python2 -c 'print("\x90" * XX + "shellcode" + "\x90" * YY + "adresse")
Si vous aviez bien compris le principe du challenge Narnia2, celui-ci ne devrait pas vous poser de problĂšme.
N’hĂ©sitez pas Ă relire les explications donnĂ©es dans cet article.
Enfin, en ressources, vous trouverez un outil en ligne assez pratique pour vous aider à générer vos shellcodes.
defuse.ca (Online Assembler for Shellcode)
Narnia 2 â MindShield
challenge exploit shellcode
Recent Comments