用溢出写入文件读取代码

时间:2014-05-24 18:47:50

标签: c file-io environment

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

1 个答案:

答案 0 :(得分:1)

打开文件的基础知识是正确的。您可以使用errnostrerror来改善您的程序,以告知用户打开文件的尝试失败的原因。

 #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开放相比,文件扩展名具有误导性。