简单易懂的 pwnable.kr 第一题[fd]Writeupt

简单易懂的 pwnable.kr 第一题[fd]Writeupt

题目地址http://pwnable.kr/play.php

题目
[fd]题目
题目中给出了ssh远程登录的地址以及登录密码我们先连接,输入密码:guest 查看一下。
在这里插入图片描述
输入Linux命令: ls - la (a 将全部文件包括隐藏文件统统列出来,l 查看文件的属性和权限等数据)。
在这里插入图片描述

观察文件(包括隐藏文件),及其属性和权限。在这里插入图片描述
我们可以发现fd.c文件我们是可以读取的,并且fd文件是可以执行的。我们先查看一下fd.c文件的源代码:cat fd.c
在这里插入图片描述
在这里我简单说明一下C语言带参数的mian函数的三个参数:
第一个参数 argc ,用于存放命令行参数的个数。
第二个参数 argv,是个字符指针的数组,每个元素都是一个字符指针,指向一个字符串,即命令行中的每一个参数。
第三个参数 envp ,也是一个字符指针的数组,这个数组的每一个元素是指向一个环境变量的字符指针。

函数aoti的作用是将字符串转换为整型。
所以我们只需要输入超过两个字符就可以通过if语句。
下面接着看,我们可以看到当buf = "LETMEWIN\n"时,就可以获得flag。
问题的关键来了,我们如何使得buf = “LETMEWIN\n”。
我们知道read函数有一个性质,当第一参数为0时,则不从文件句柄中读入,而是标准输入,也就是我们可以直接修改buf。
要想fd等于0,我们需要一个转换为十六进制后是0x1234的十进制的数字,通过计算我们可以得到是4660。
下面上操作:
在这里插入图片描述
flag 到手:

mommy! I think I know what a file descriptor is!!

希望对大家能有所帮助,一起加油!!!

点击查看Linux文件属性和权限详解

猜你喜欢

转载自blog.csdn.net/Y_peak/article/details/110009956
今日推荐