拿到题目
先连上去
ls查看下目录
文件目录下有 fd,fd.c ,flag文件。
用cat 查看下fd.c源文件得到如下源代码:。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char buf[32];
int main(int argc, char* argv[], char* envp[]){
if(argc<2){
printf("pass argv[1] a number\n");
return 0;
}
int fd = atoi( argv[1] ) - 0x1234;
int len = 0;
len = read(fd, buf, 32); //重点
if(!strcmp("LETMEWIN\n", buf)){
printf("good job :)\n");
system("/bin/cat flag");
exit(0);
}
printf("learn about Linux file IO\n");
return 0;
}
read()会把参数fd所指的文件传送n个字节到buf指针所指的内存中。
百度下,linux file IO,得知
fd=0,是标准输入,
fd=1,是标准输出,
fd=2,是标准错误输出。
那么想要从fd所指向的文件读取内容到buf里,则需要fd的值为0;
int fd = atoi( argv[1] ) - 0x1234
atoi函数是将字符串转化为整型数字,那就很明显了,只需输入的字符串等于0x1234,将0x1234转化为10进制是4660。
输入 ./fd 4660后 再输入LETMEWIN就行了