pwnable.kr fd

Pwnable.kr的第一道题目fd的writeup

fd是pwnbale.kr的第一道题目,比较简单,连接登录:

1

看到有源文件及flag文件,查看文件的权限:

1
ls -al

2

当前用户没有打开flag文件的权限,但有读fd.c的权限,打开fd.c,可以看到fd的源代码:

3

可以看到,read函数的第一个参数为程序的第一个参数fd,read函数定义如下:

1
ssize_t read(int filedes, void *buf, size_t nbytes);

函数从filedes指定的文件读取nbytes个字符至buf缓冲区中,第一个参数为文件描述符,指定了要读取的文件,filedes可被赋为以下特殊值:

0:标准输入 1:标准输出 2:标准错误

对于这道题目,可以将fd赋值为0,从终端读入“LETMEWIN\n”,使得if条件成立,从而获得flag。

根据fd - 0x1234 = 0可知,输入的fd应该为0x1234,因为atoi函数在将字符串转换成整型时是逐个字符对目标字符串进行扫描,遇到正负号或数字才开始转换,直至遇到非数字或‘\0’结束转换,因此这里的输入应该是十进制的fd,因此输入应该为4660,再输入LETMEWIN,回车之后即可得到flag:

4