好吧,我尝试使用堆栈溢出和安全cookie, 但是看起来大多数使用POC教程的人都没有使用安全cookie进行编译。
所以我决定创建一个从文件中获取输入并创建缓冲区溢出的程序。 这就是我提出来的:
#include <stdio.h>
#include <string.h>
void manipulate(char *buffer)
{
char newbuffer[80];
strcpy(newbuffer, buffer);
}
int main()
{
char ch, buffer[4096];
char filename[] = "exploit.txt";
int i = 0;
FILE *inFile;
inFile = fopen(filename, "rb");
if (inFile == NULL)
{
fprintf(stderr, "Can't open input file !\n");
getchar();
return 1 ;
}
while (buffer[i] != EOF)
{
buffer[i++] = fgetc(inFile);
manipulate(buffer);
printf("The value of i is : %d\n", i);
getchar();
return 0;
}
}
我的问题是我总是得到Can't open input file !\n
。即使我在同一个地方创建了“exploit.txt”并在其中添加了一些“aaaa”。
答案 0 :(得分:1)
打开文件的基础知识是正确的。您可以使用errno
和strerror
来改善您的程序,以告知用户打开文件的尝试失败的原因。
#include <errno.h>
fprintf(stderr, "Error opening \"%s\": %s\n", filename, strerror(errno));
我能够成功运行您的示例程序(忽略堆栈溢出部分)而没有任何更改。
问题在于当前或当前工作目录的值,该目录用作完成用于打开任何文件的文件路径的基础。
您可以使用getcwd()
中的<unixstd.h>
(适用于Linux,BSD和POSIX系统)或_getcwd()
来自<direct.h>
来查看该程序的工作目录。类型。
挑剔:&#34; txt&#34;与fopen
所指定的二进制模式中的rb
开放相比,文件扩展名具有误导性。