[pwnable笔记]--fd

之前做过一次,决定第二次做的时候做做笔记。
在做之前要先安装Xshell
我安装的是Xshell 6 Xshell6下载地址
安装步骤也相对简单,按下一步什么的就很容易安装完成
打开Xshell
新建
新建
选择刚才新建的,点击连接即可
连接

第一题:fd

fd
题目中ssh [email protected] -p2222(pw:guest)
其实就是用户名@主机名 -p端口号(密码)
(在新建会话的时候会用到主机名和端口号)
在连接上上图test的时候会要求你输入用户名和密码,此题便是fd 和guest
连接成功后会出现如下画面
连接成功
接着输入ls 查看目录文件
输入ls
我们看到有3个文件,其中有一个源代码fd.c
输入cat fd.c 查看一下源码
源码

从源代码中我们可以分析出,执行该文件需要传一个参数。要拿到 flag 需要使得:strcmp(“LETMEWIN\n”, buf) ==0

函数strcmp
int strcmp(const char *s1, const char *s2);
功能:用来比较两个字符串
参数:s1、s2为两个进行比较的字符串
返回值:若s1、s2字符串相等,则返回零;若s1大于s2,则返回大于零的数;否则,则返回小于零的数。

所以此处我们要使得 buf=”LETMEWIN\n”
而 buf 只在上文的 read(fd, buf, 32) 中出现过
即read(fd, buf, 32)将buf设为”LETMEWIN\n”

函数read
ssize_t read(int fd, void* buf, size_t count)
成功返回读取的字节数,出错返回-1并设置errno
fd是文件指针
buf: 读上来的数据保存在缓冲区 buf 中,同时文件的当前读写位置向后移
count: 请求读取的字节数。
read()会把参数fd 所指的文件传送count个字节到buf指针所指的内存中。若参数count为0,则read为实际读取到的字节数,如果返回0,表示已到达文件尾或是无可读取的数据,此外文件读写位置会随读取到的字节移动。

其中fd是可以指定的
习惯上,标准输入(standard input)的文件描述符是 0,标准输出(standard output)是 1,标准错误(standard error)是 2。
所以此处我们要使fd=0,也就是atoi(argv[1])大小为0x1234,也就是说我们要使argv[1]为4660。
提示:atoi (表示 ascii to integer)是把字符串转换成整型数的一个函数
0x1234 的十进制为 4660

此题就解出了 $ ./fd 4660 LETMEWIN good job :) mommy! I think I know what a file descriptor is!!