pwnable.kr第一题fd,第二题collision解题记录

pwn刷题网站地址(点击直达):

http://pwnable.kr/play.php

第一题 fd

题解参考链接:
第一题主要学到的就是关于read的读文件方式
参考这个链接:
链接二

fd代码

在这里插入图片描述

main函数的参数说明:

对于C语言int main(int argc char *argv[])来说,argc保存的是命令行总的参数个数(包括程序名),argv这是传入参数的数组.
举个例子,当你执行: ./test 1 2 3 时,argc = 4 而 argv[0] = test",argv[1] = 1,argv[2] = 2,argv[3] = 3

atoi函数:

该函数用于将字符串转换为整型

read函数

UNIX/Linux平台上,对于控制台(Console)的标准输入,标准输出,标准错误输出,也对应了三个文件描述符(即fd = File Description )。它们分别是0,1,2。也就是说read(0,buf,32)表示从键盘读入至多32个字节到buf中

关于read函数的定义如下:
ssize_t read(int fd, void * buf, size_t count);
它有三个参数,其中fd为指向文件的指针,如果为0则表示从键盘上读取文件,count表示读取字符的长度,read函数会将fd指向的文件传送count个到buf指针,而如果想要从一个文件中去进行读取则可以使用如下语句给fd赋值:

 int fd = open("test.txt", O_RDONLY);
 //还可以进行一个判断,如果fd小于0表示文件无法打开
     if(fd < 0){
        perror("open");
        exit(1);
    }
解题

因此第一题的目标是要让fd的值为0即可在键盘上进行输入并读取,要让fd等于0即这一句fd = atoi( argv[1] ) - 0x1234;需要满足argv[1]=0x1234=4660
if(!strcmp(“LETMEWIN\n”, buf))这一句比较只要满足输入的数据等于LETMEWIN即可,解题过程如下:

在这里插入图片描述

答案:

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

第二题:collision

参考链接
这道题可以学到2个知识点,首先是数据的输入,其次是int和char的转换

char和int数据类型的转换

在这里插入图片描述

在这道题中我们可以看到它是把一个长度为20的字符串转换为in类型的数据,然后进行5次加减。实际上是因为一个int类型的数据是4个字节,而一个char类型的数据是1个字节,因此在此处20个字节在转换的时候就变成了5个长度为4字节的int型数据。
因此本题的意思就是直接将这20个字符分成5段,然后将每一段相加结果为一个固定值即可满足条件。

2.python实现数据打印和传输

对于要构造一个字符串使得将其转换为5个int类型的数据以后长度相加为一个固定值,这里可以借助python来打印并将数据传送给程序。
对于数据构造,可以像下面这样构造
0x01010101*4+ 0x1DD905E8
但需要注意的是在传送给python的时候需要在每两位之间都加0x表示十六进制,以上数据还可以写成这个格式(注意C语言是小端存储)
‘\x01’*16+\‘\xE8\x05\xD9\x1D’
然而我们知道0x01是不可见字符是无法打印出来的,因此我们可以使用python来进行传送到数据上去,构造python语句如下:

print '\x01' * 16 + '\xE8\x05\xD9\x1D'

终端输入格式:

./col $(python -c "print '\x01' * 16 + '\xE8\x05\xD9\x1D'")

输出结果如下:
在这里插入图片描述
通过上面我们可以学习到构造python输入的语句格式如下:

启动的文件名+$(python -c +“执行语句”)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值