pwnable.kr-fd-Writeup

 

pwnable.kr-fd-Writeup

  • 根据题目描述Mommy! what is a file descriptor in Linux? 知该题与Linux系统下的文件描述有关;
  • ssh远程登录如下:
  • 根据题目提示,ls -l查看文件及权限如下,由下图,用户fd只具有读文件fd.c的权限(尝试sudo chmod增加权限,但失败):
  • cat fd.c读取fd.c中的内容,可得到如下代码:
 1 fd@ubuntu:~$ cat fd.c
 2 #include <stdio.h>
 3 #include <stdlib.h>
 4 #include <string.h>
 5 char buf[32];
 6 int main(int argc, char* argv[], char* envp[]){
 7         if(argc<2){
 8                 printf("pass argv[1] a number\n");
 9                 return 0;
10         }
11         int fd = atoi( argv[1] ) - 0x1234;
12         int len = 0;
13         len = read(fd, buf, 32);
14         if(!strcmp("LETMEWIN\n", buf)){
15                 printf("good job :)\n");
16                 system("/bin/cat flag");
17                 exit(0);
18         }
19         printf("learn about Linux file IO\n");
20         return 0;
21 
22 }
23 
24 fd@ubuntu:~$

 

  • 分析上述代码,执行system("/bin/cat flag");语句,即可获得flag;
  • 执行system("/bin/cat flag");需要使buf == "LETMEWIN";
  • 继续分析,需要buf通过read函数读入"LETMEWIN\n",有read函数的定义,需要使fd==0;
  • 则有atoi( argv[1] ) == 0x1234(即十进制下的4660),由atoi函数的定义,需要argv[1] == "4660";
  • 进而由LinuxC下argv[]的相应定义可以构造输入,LinuxC下argc,argv[]的意义请参考http://www.cnblogs.com/WangAoBo/p/6366600.html
  • echo "LETMEWIN" | ./fd 4660

如下,flag为:mommy! I think I know what a file descriptor is!!

2017-2-4 22:24;39

 

 

 

 

 

 

 

 

 

 

posted @ 2017-02-04 22:32  M4x  阅读(695)  评论(0编辑  收藏  举报