Я узнаю о переполнении буфера и пытаюсь его создать. У меня есть этот код:Компиляция C для переполнения буфера
#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;
}
Я компилировать это с GCC, а затем запустить его в БГД
вхожу около 100 «A» S в качестве пароля и аварийное завершение работы программы.
Проблема нет регистра не переписывается в 0x4141414141414141
Я гугле это и добавил -fno-stack-protector
флаг gcc
, который позволил КПБ быть перезаписаны в 0x4141414141414141
, но ничего другого.
Мне было интересно, есть ли способ скомпилировать код, чтобы RIP можно было перезаписать.
Вы используете Linux? Думаю, вам также нужно установить там какой-то флаг. – nhahtdh
Использование Mac OSX. Любая идея, что такое флаг? – carloabelli
Я не знаю о Mac OSX - вероятно, будет сильно отличаться от Ubuntu (извините, я на самом деле сделал это на Ubuntu, а не на Linux). – nhahtdh