[pwnable笔记]--fd

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

第一题:fd

fd
题目中ssh fd@pwnable.kr -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!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值