首页
社区
课程
招聘
#30天写作挑战#PWN学习:堆利用-House Of Force
发表于: 2020-9-17 09:08 15959

#30天写作挑战#PWN学习:堆利用-House Of Force

2020-9-17 09:08
15959

翻译自 how2heap 的例子

https://github.com/shellphish/how2heap

首先申请了 0x100 大小的 chunk,现在的内存布局如下

image.png

修改 top chunk 的 size 为一个很大的数

image.png

当我们去申请的时候,新的 top chunk 的地址 new_top 应该是 old_top + size(size 是 malloc 的 chunk 的大小加上 chunk 头的大小),我们想要去控制 new_top 就只能通过控制这个 size

我们想要让 new_top 到 0x602060,0x602060-0x20 =old_top + size,所以这个 size 应该是 0x602040-old_top=0xffffef30 即 0xffffffffffffef30,也就是说只要申请 0xffffffffffffef30 大小的 chunk 就能把 top chunk 改到0x602060-0x10,然后再申请一个的时候就是 0x602060 了


为啥减去了0x20 呐?

我们想要申请到 0x602060 的时候要留出它的 chunk 头 0x10 这就是说 0x602060-0x10 = old_top+size,即 size = 0x602060-0x10 - old_top,但是还要注意,我们去申请 size 的时候实际上申请的是 size+0x10 大小的 chunk,还要把这个 0x10 留出来,即我们要少申请 0x10 大小的 size

所以 size = 0x602060-0x10 - old_top -0x10,减的一共是 0x20


这之后再去申请一个 chunk 就能控制前面定义的变量了

image.png

因为程序一开始会申请一个堆块,存放 hello 和 goodbye 的函数指针,所以思路是把内存申请的那里,然后修改 goodbye 指针为 magic

先申请一个,然后通过编辑一个更大的 size 把 top chunk 给改掉image.png

image.png

想要修改那个指针就需要 malloc 申请到 topchunk - 0x60 也就是 0x603000 那里,另外还要减去 0x10 我们申请的那个 size 的 chunk 头的大小

image.png

改后:

image.png

可以读到 flag,wp 减的 0x8 跟 0xf 不懂为啥,按照上面原理那样去做是可以达到目的的 Orz...

image.png

完整 exp


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2020-9-17 09:11 被yichen115编辑 ,原因: 上传附件
上传的附件:
收藏
免费 4
支持
分享
最新回复 (4)
雪    币: 26245
活跃值: (63297)
能力值: (RANK:135 )
在线值:
发帖
回帖
粉丝
2
感谢分享!
2020-9-17 13:37
0
雪    币: 57
活跃值: (206)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
正好在学堆, 前人栽树,后人乘凉XD
2020-10-9 14:39
0
雪    币: 359
活跃值: (14015)
能力值: ( LV13,RANK:606 )
在线值:
发帖
回帖
粉丝
4
sketch-pl4ne 正好在学堆, 前人栽树,后人乘凉XD
啊哈哈哈,文章能帮到师傅很开心
2020-10-9 15:15
0
雪    币: 1993
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
2020-10-9 15:34
0
游客
登录 | 注册 方可回帖
返回
//