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 "); 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 ", buf)){ 15 printf("good job :) "); 16 system("/bin/cat flag"); 17 exit(0); 18 } 19 printf("learn about Linux file IO "); 20 return 0; 21 22 } 23 24 fd@ubuntu:~$
- 分析上述代码,执行system("/bin/cat flag");语句,即可获得flag;
- 执行system("/bin/cat flag");需要使buf == "LETMEWIN";
- 继续分析,需要buf通过read函数读入"LETMEWIN
",有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