我正在學習緩衝區溢出並試圖創建一個緩衝區溢出。我有這樣的代碼:編譯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編譯這個,然後在gdb
我進入大約100「A」 S密碼和程序崩潰運行它。
的問題是沒有寄存器改寫爲0x4141414141414141
我GOOGLE了這一點,並增加了-fno-stack-protector
標誌gcc
,允許RBP被覆蓋到0x4141414141414141
,但沒有別的。
我想知道是否有辦法編譯代碼,以便RIP可以被覆蓋。
您使用的是Linux嗎?我想你還需要在那裏設置一些旗幟。 – nhahtdh 2013-02-09 15:58:45
使用Mac OSX。任何想法是什麼國旗? – carloabelli 2013-02-09 15:59:33
我不知道Mac OSX - 可能會和Ubuntu有很大不同(對不起,我其實是在Ubuntu上做的,而不是Linux)。 – nhahtdh 2013-02-09 16:27:02