Sto imparando a parlare di buffer overflow e sto provando a crearne uno. Ho questo codice:Compilare C per consentire l'overflow del buffer
#include <stdio.h>
char *secret = "password";
void go_shell() {
char *shell = "/bin/sh";
char *cmd[] = { "/bin/sh", 0 };
setreuid(0);
execve(shell,cmd,0);
}
int authorize() {
char password[64];
printf("Enter Password: ");
gets(password);
if (!strcmp(password,secret)) {
return 1;
}
else {
return 0;
}
}
int main() {
if (authorize()) {
printf("login successful\n");
go_shell();
} else {
printf("Incorrect password\n");
}
return 0;
}
compilo questo con gcc e quindi eseguirlo in gdb
entro in circa 100 s "A" come password e il programma si blocca.
il problema non è il registro viene sovrascritto ad 0x4141414141414141
Googled questo e ha aggiunto la bandiera -fno-stack-protector
-gcc
, che ha permesso RBP per essere sovrascritto a 0x4141414141414141
ma nient'altro.
Mi chiedevo se c'era un modo per compilare il codice in modo che RIP possa essere sovrascritto.
Stai usando Linux? Dovresti anche impostare qualche bandiera lì, credo. – nhahtdh
Utilizzo di Mac OSX. Qualche idea di cosa sia la bandiera? – carloabelli
Non so su Mac OSX - probabilmente sarà molto diverso da Ubuntu (mi dispiace, l'ho fatto su Ubuntu, non su Linux). – nhahtdh