c - 如何使用格式说明符检索当前目录之外的文件?

标签 c file code-injection format-specifiers

char * read_file(char * filename) {
  char * file_contents = malloc(4096 * sizeof(char));

  FILE * file;
  file = fopen(filename, "r");

  fread(file_contents, 4096, sizeof(char), file);
  fclose(file);

  return file_contents;
}

char * read_flag() {
  return read_file("/flag.txt");  // outside of current working directory ;)
}

int main(int argc, char* argv[]) {
  setvbuf(stdin,  NULL, _IONBF, 0);
  setvbuf(stdout, NULL, _IONBF, 0);

  char * flag = read_flag();
  char input_filename[40];

  //Current directory is /home/problem
  printf("Current working directory is: ");
  system("pwd");

  printf("Enter a filename to print the contents of the file => ");
  scanf("%39s", input_filename);

  while ((directory_entry = readdir(directory)) != NULL) {
    if (strcmp(input_filename, directory_entry->d_name) == 0) {
      printf("File contents:\n");
      printf("%s\n", read_file(input_filename));

      return 0;
    }
  }
}

我需要打开此目录之外的文件(“/flag.txt”)。我在输入中尝试了类似“../”的内容来退出该目录,但它不起作用。我不确定如何输入文件名,以便它可以检索/home/problem 目录之外的文件。我目前正在使用 Ubuntu 来执行此操作。我认为这个想法应该在我输入输入时使用类似 %s%d 的东西。是否可以使用任何说明符或利用该程序来读取整个内容?

最佳答案

如果文件位于解决方案目录之外,则需要使用 \\ 或一个 / 传递文件的完整路径。在基于 Windows 的系统上,这可能是 C:\\folder\\file.txt。我目前不使用linux,但它应该是/home/folder/file.txt

关于c - 如何使用格式说明符检索当前目录之外的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53370781/

相关文章:

c - Linux Kernel Makefile.build 构建外部模块时的奇怪行为

c - 如何在不使用递归的情况下将链表复制到另一个列表

c - stat.h 在 Linux 中不可用?

java - 在 Java 中扩展泛型类型

php - 不安全的登录脚本 - 如何保护

c - 使用 printf 函数绘制一个由内框组成的矩形

C - fscanf 错误与 char *

java - 我正在尝试在文件中写入数组字节,但我不能。 (我可以在文件系统中创建此文件,并且连接正常)。任何帮助将不胜感激

java - 使用txt文件在java控制台应用程序中创建登录页面

java - 新对象中的 Spring-instrument 和自动注入(inject)