【发布时间】:2018-11-19 08:24:36
【问题描述】:
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 之类的东西。这是否可以使用任何说明符或利用该程序来读取全部内容?
【问题讨论】:
-
SQL 在哪里发挥作用?!
-
你知道
./是什么意思吗?你知道它指的是什么吗?顺便说一句:在您的程序片段中directory从未定义或初始化。 -
@joop 对不起,我错字了。应该是 /flag.txt 没有“。”
标签: c file code-injection format-specifiers