Poznaję przepełnienia bufora i próbuję je wykonać. Mam ten kod:Skompiluj C, aby umożliwić przepełnienie bufora
#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;
}
skompilować to z gcc, a następnie uruchomić go w gdb
wchodzę około 100 "A" S jako hasło i wywala programowych.
Problem ma rejestr jest zastępowany do 0x4141414141414141
google to i dodaje flagę -fno-stack-protector
do gcc
, co pozwoliło RBP być nadpisane do 0x4141414141414141
ale nic więcej.
Zastanawiam się, czy istnieje sposób na skompilowanie kodu, aby można było zastąpić protokół RIP.
Czy używasz systemu Linux? Musisz też ustawić tam pewną flagę. – nhahtdh
Korzystanie z systemu Mac OSX. Masz pojęcie, co to jest flaga? – carloabelli
Nie wiem o Mac OSX - prawdopodobnie będzie to znacznie różniło się od Ubuntu (przykro mi, faktycznie zrobiłem to na Ubuntu, a nie na Linuksie). – nhahtdh