我正在尝试理解缓冲区溢出,并且正在使用一段简单的代码,如下所示。
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int bof(char *str)
{
char buffer[12];
strcpy(buffer,str);
return 1;
}
int main(int argc, char **argv)
{
char str[517];
FILE *badfile;
badfile = fopen("badfile", "r");
fread(str, sizeof(char), 517, badfile);
bof(str);
printf("Returned Properly\n");
return 1;
}
我知道我需要在“badfile”中注入 shell 代码,假设我创建了一个这样的 badfile:
char buffer[517];
FILE *badfile;
memset(&buffer, 0x90, 517);
badfile = fopen("./badfile", "w");
fwrite(buffer, 517, 1, badfile);
我是否在缓冲区 [] 的第 12 个索引处注入它?我面临一个问题。但我相信那是因为它不是回归位置。我必须计算返回位置吗?谢谢。