0x000 打开环境
根据提示ssh连接,密码为guest,
当前有三个文件,
查看fd.c:
0x001 知识要点
1.argc
与argv
对于C
语言int main(int argc char *argv[])
来说,argc
保存的是命令行总的参数个数(包括程序名),argv
这是传入参数的数组.
举个例子,当你执行: ./test 1 2 3
时,argc = 4
而 argv[0] = test",argv[1] = 1,argv[2] = 2,argv[3] = 3
2.atoi()
atoi
(表示 ascii to integer
)是把字符串
转换成整型数
的一个函数。char --> int
3.read()
UNIX/Linux平台上,对于控制台(Console)的标准输入
,标准输出
,标准错误输出
,也对应了三个文件描述符(即fd = File Description )
。它们分别是0,1,2。也就是说read(0,buf,32)
表示从键盘读入至多32个字节到buf
中,
标准输入0:从键盘获得输入
标准输出1 : 输出到屏幕(即控制台)
错误输出2 : 输出到屏幕(即控制台)
0x002 源码分析
①首先看我要获取flag需要的条件,13行的 (!strcmp("LETMEWIN ", buf)) ,比较两个字符串,相同则返回0,不相同返回1,所以,我们要构造buf变量为LETMWEIN;
②要想buf变量为LETMEWIN,则需要看12行的 len = read(fd, buf, 32),要使fd为0,获取键盘输入,这样我们就可以自己输入LETMEWIN;
③要使fd为0,看10行的 fd = atoi( argv[1] ) - 0x1234,使argv[1]为0x1234(十进制的4660)即可。
0x003 程序运行
flag为:
mommy! I think I know what a file descriptor is!!