Nebula Challenge 04

 

考察点:软链接

ln -s target_filename symlink_filename将上述命令中的target_filename用符号链接将要指向的相对路径或者绝对路径进行替换。在通常的情况下,目标文件应该存在。但是也可以创建一个指向不存在目标的符号链接。将symlink_filename用希望的符号链接名替换。这条ln命令将会创建一条符号链接。当创建完符号链接之后,可以将symlink_filename当作target_filename的别名看待。普通的文件操作命令(如cp、rm等)都能直接作用于符号链接。用于读写文件内容的命令将会直接访问目标文件。

题目描述:绕过代码中的限制,读出token文件的内容

/home/flag04文件夹下有两个文件:flag04 和 token ,其中 flag04 的源码是:

 1 #include <stdlib.h>
 2 #include <unistd.h>
 3 #include <string.h>
 4 #include <sys/types.h>
 5 #include <stdio.h>
 6 #include <fcntl.h>
 7 
 8 int main(int argc, char **argv, char **envp)
 9 {
10   char buf[1024];
11   int fd, rc;
12 
13   if(argc == 1) {
14       printf("%s [file to read]\n", argv[0]);
15       exit(EXIT_FAILURE);
16   }
17 
18   if(strstr(argv[1], "token") != NULL) {
19       printf("You may not access '%s'\n", argv[1]);
20       exit(EXIT_FAILURE);
21   }
22 
23   fd = open(argv[1], O_RDONLY);
24   if(fd == -1) {
25       err(EXIT_FAILURE, "Unable to open %s", argv[1]);
26   }
27 
28   rc = read(fd, buf, sizeof(buf));
29   
30   if(rc == -1) {
31       err(EXIT_FAILURE, "Unable to read fd %d", fd);
32   }
33 
34   write(1, buf, rc);
35 }

 

 具体是将某个文件读出,但是路径以及文件名里不能包含token关键词。

 

解法(参考网上):在/tmp目录下创建token文件的软连接,然后读取这个软连接的内容就是这个token文件的内容。

 

 

ln -s target_filename symlink_filename将上述命令中的target_filename用符号链接将要指向的相对路径或者绝对路径进行替换。在通常的情况下,目标文件应该存在。但是也可以创建一个指向不存在目标的符号链接。将symlink_filename用希望的符号链接名替换。这条ln命令将会创建一条符号链接。当创建完符号链接之后,可以将symlink_filename当作target_filename的别名看待。普通的文件操作命令(如cp、rm等)都能直接作用于符号链接。用于读写文件内容的命令将会直接访问目标文件。

posted on 2018-07-23 21:58  IAmGroot!  阅读(97)  评论(0编辑  收藏  举报

导航