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

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

2020-6-14 08:39
10274

只溢出一个字节,比如定义的数组是 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



[培训]科锐逆向工程师培训第53期2025年7月8日开班!

最后于 2020-11-27 16:45 被yichen115编辑 ,原因: 上传附件
上传的附件:
  • b00ks (10.03kb,16次下载)
收藏
免费 6
支持
分享
最新回复 (6)
雪    币: 15661
活跃值: (18963)
能力值: ( LV12,RANK:300 )
在线值:
发帖
回帖
粉丝
2
mark,楼主辛苦了
2020-6-14 11:13
0
雪    币: 1198
活跃值: (14965)
能力值: ( LV13,RANK:606 )
在线值:
发帖
回帖
粉丝
3
pureGavin mark,楼主辛苦了
嘿嘿,整理的笔记
2020-6-14 12:22
0
雪    币: 15661
活跃值: (18963)
能力值: ( LV12,RANK:300 )
在线值:
发帖
回帖
粉丝
4
yichen115 嘿嘿,整理的笔记[em_86]
题目发一下,放到附件里
2020-6-14 21:20
0
雪    币: 1198
活跃值: (14965)
能力值: ( 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
雪    币: 1198
活跃值: (14965)
能力值: ( LV13,RANK:606 )
在线值:
发帖
回帖
粉丝
7
盛夏的第五章 小白看了好久,有一些问题想请教楼主。 1. book2,book3创建又释放的原因是什么? 2. exp文件中的魔数是怎么来的,代表什么意义,像62行和96行。 3. 我在本地用这个exp复现不 ...
师傅可以看一下这篇文章,我当时参考的这一篇a77K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6^5P5W2)9J5k6h3q4D9K9i4W2#2L8W2)9J5k6h3y4G2L8g2)9J5c8Y4c8Q4x3V1j5$3x3o6R3%4i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1$3i4K6W2o6i4K6R3&6i4@1f1@1i4@1t1^5i4@1p5@1i4@1f1%4i4@1p5%4i4K6S2p5k6i4S2H3i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1$3i4K6R3^5i4K6V1I4i4@1f1%4i4K6V1@1i4@1p5^5i4@1f1%4i4K6W2m8i4K6R3@1i4@1f1&6i4K6R3J5i4@1p5K6i4@1f1%4i4@1p5%4i4K6S2p5i4@1f1#2i4K6W2o6i4@1p5^5i4@1f1#2i4K6V1H3i4K6S2q4i4@1f1&6i4K6W2p5i4@1p5J5i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1$3i4K6V1%4i4@1t1$3i4@1f1&6i4K6V1%4i4@1t1@1i4@1f1$3i4K6W2o6i4K6R3&6i4@1f1%4i4K6R3J5i4@1t1&6i4@1f1@1i4@1t1&6i4K6R3#2i4@1f1@1i4@1u0m8i4K6R3$3i4@1f1$3i4K6R3^5i4K6V1I4i4@1f1&6i4K6R3K6i4@1u0p5i4@1f1#2i4@1u0r3i4K6V1^5i4@1f1@1i4@1u0m8i4K6R3$3i4@1f1^5i4@1p5$3i4K6R3I4i4@1f1#2i4K6R3$3i4K6S2p5i4@1f1%4i4K6W2o6i4K6S2n7i4@1f1%4i4K6W2o6i4K6S2n7
2020-7-26 08:52
0
游客
登录 | 注册 方可回帖
返回