gpt4 book ai didi

c - 写入文件读取代码溢出

转载 作者:行者123 更新时间:2023-11-30 15:33:03 25 4
gpt4 key购买 nike

好吧,我尝试玩一下堆栈溢出和安全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”。

最佳答案

打开文件的基础知识是正确的。您可以使用errno来改进您的程序和strerror通知用户尝试打开文件失败的原因。

 #include <errno.h>
fprintf(stderr, "Error opening \"%s\": %s\n", filename, strerror(errno));

我能够成功运行您的示例程序(忽略堆栈溢出部分),无需任何更改。

问题在于当前或当前工作目录的值,该目录被用作用于打开任何文件的完整文件路径的基础。

您可以使用getcwd()检查程序的工作目录。来自<unixstd.h>适用于 Linux、BSD 和 POSIX 系统或 _getcwd()来自<direct.h>对于其他一些类型。

吹毛求疵:与fopen相比,“txt”文件扩展名具有误导性。以二进制模式打开,如 rb 指定.

关于c - 写入文件读取代码溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23848523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com