首页
社区
课程
招聘
[原创]PWN入门(Off-By-One)
发表于: 2020-6-14 08:39 9950

[原创]PWN入门(Off-By-One)

2020-6-14 08:39
9950

只溢出一个字节,比如定义的数组是 a[4],在操作的时候却操作 a[4],实际上数组最大是到 a[3] 的


1、溢出字节为可控制任意字节:通过修改大小造成块结构之间出现重叠,从而泄露其他块数据,或是覆盖其他块数据。


可以看下面源码,他 for(i=0;i<=size;i++) 里面那个 i<=size 是有问题的,这样会多循环一次

首先 b *main 下个断点,然后运行到第六行也就是等待输入的那块


p ptr 看一下 ptr 指向的是哪一个地址

x/10gx 0x602010-0x10 然后查看一下那一块的内存,减去 0x10 是因为 chunk 前面要记录一些信息,比如前 0x8 如果前一个是空闲的话就记录前一个 chunk 的大小,否则就给前一个用来存数据。后面 0x8 记录的分别是该 chunk 的大小和 A、M、P 标志位

A(NON_MAIN_ARENA)表示 chunk 属于主分配区(1)或者非主分配区(0)

M(IS_MAPPED)表示当前 chunk 是否是由 mmap 分配的,M 为 1 表示该 chunk 是从 mmap 映射区域分配的,否则是从 heap 区域分配的

P(PREV_INUSE)表示前一个 chunk 有 (1) 没有 (0) 被使用,一般来说第一个被分配的 chunk 的这个位会标记为 1,来防止访问到非法内存


image.png


然后再运行的话就要接收我们的输入了,我们输入 17 个字符,以为前面源码中写的 my_gets(chunk1,16); 是 16 个,可以看到把第二个 chunk 的低一字节改成了 0x41


image.png



strlen 在计算长度的时候不会把结束符 '\x00' 计算在内,strcpy 在拷贝的时候会把 '\x00' 也算上,所以就会造成 off by one

先 b *main 上下个断点,然后运行到输入的那个位置,在这之前先看一下 chunk 的情况


image.png


输入 24 个 A,等他拷贝完之后,再看一下会发现原本的那低一字节已经被写成 \x00 了


image.png



image.png


首先看一下 create a book 功能:

首先要输一下书名的大小,然后会申请这么大的空间,然后通过 sub_9f5 这个函数往这个空间输入书名


image.png


这个函数的定义有问题,他会多置一个 0

传入的两个参数分别对应上面的 ptr 和 v1-1,地址和大小


image.png


如果我们输入的长度跟之前设定的长度一样的话,因为有个 ++buf,所以 break 之后会多写一个 0

我们再来看一下定义的 book 的结构体



首先输入作者的名字 32 字节,他会多输一个 \x00,然后被后面的 book 的一系列指针给覆盖掉


image.png


然后当输出 author 的时候就会把覆盖掉的哪一项给输出来


image.png



[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2020-11-27 16:45 被yichen115编辑 ,原因: 上传附件
上传的附件:
  • b00ks (10.03kb,15次下载)
收藏
免费 6
支持
分享
最新回复 (6)
雪    币: 14517
活跃值: (17538)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
2
mark,楼主辛苦了
2020-6-14 11:13
0
雪    币: 359
活跃值: (14015)
能力值: ( LV13,RANK:606 )
在线值:
发帖
回帖
粉丝
3
pureGavin mark,楼主辛苦了
嘿嘿,整理的笔记
2020-6-14 12:22
0
雪    币: 14517
活跃值: (17538)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
4
yichen115 嘿嘿,整理的笔记[em_86]
题目发一下,放到附件里
2020-6-14 21:20
0
雪    币: 359
活跃值: (14015)
能力值: ( LV13,RANK:606 )
在线值:
发帖
回帖
粉丝
5
pureGavin 题目发一下,放到附件里
2020-6-14 21:33
0
雪    币: 449
活跃值: (262)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
小白看了好久,有一些问题想请教楼主。
1. book2,book3创建又释放的原因是什么?
2. exp文件中的魔数是怎么来的,代表什么意义,像62行和96行。
3. 我在本地用这个exp复现不成功,原因是80行写失败,提示Unable to read new description,不知道为什么。
2020-7-25 21:13
0
雪    币: 359
活跃值: (14015)
能力值: ( LV13,RANK:606 )
在线值:
发帖
回帖
粉丝
7
盛夏的第五章 小白看了好久,有一些问题想请教楼主。 1. book2,book3创建又释放的原因是什么? 2. exp文件中的魔数是怎么来的,代表什么意义,像62行和96行。 3. 我在本地用这个exp复现不 ...
师傅可以看一下这篇文章,我当时参考的这一篇https://xz.aliyun.com/t/6087,有两种exp,我用的那种在后面,时间有点久了我都忘了要再看看
2020-7-26 08:52
0
游客
登录 | 注册 方可回帖
返回
//