第一题 文件描述符

1.介绍

pwnable 第一题是关于文件描述符的一个入门,在做完第一题之后,对linux的文件描述符有了一定的了解。

网址:Pwnable

2.开始!

登录首页,点开FD,是这个一个界面:

不管三七二十一,连上服务器再说。

连接服务器后,发现有3个文件 fd fd.c 和 flag

我们最终要拿的应该是这个flag文件,发现我们并没有权限来访问他 他属于 fd_pwn 用户 root用户所有

我们目前的用户是fd,目前那我们有的权限是 读取 fd.c 文件 读取和执行 fd_pwn 文件 。就没了。

按照正常情况 fd.c 文件就是我们 fd文件的源代码了,我们看一下fd.c 文件

发现是一个简单的C语言程序,首先判断参数个数,判断你是否传入一个参数,没有传递参数就报错(系统默认传递一个参数就是本程序的程序路径+程序名)

下面我们观察程序逻辑。发现我们的参数可以确定fd 变量的值。

接着往下看

从fd 中读取字符串,长度返回给len 变量

接着我们判断 输入的字符串 是否等于 LETMEWIN! 是就调用系统函数获取flag输出(由于程序fd有临时的root权限,上面的S 表示有临时的root权限。)

这里我们要区分read 和 scanf函数的区别, 不用用scanf函数的思想带入这个程序了,read函数能够读取文件,也能从键盘输入,取决于fd 参数 ,具体的可以看一下linux文件描述符。

关于FD 的描述是 012 分别代表上述功能,大于2 即表示读取一个文件。

所以这里我们要让整个函数变成输入 即FD 变成0 ,转换 0x1234 = 4660

通过传入参数 4660 来获得输入资格,然后输入LETMEWIN 即可获得 flag