我正在学习缓冲区溢出,并正在尝试制作一个。我有这个代码:
#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”作为密码,程序崩溃了。
问题是没有寄存器被覆盖到0x4141414141414141
我用谷歌搜索了这个并将-fno-stack-protector
标志添加到gcc
,这允许 RBP 被覆盖0x4141414141414141
但没有别的。
我想知道是否有办法编译代码以便可以覆盖 RIP。