首页
社区
课程
招聘
[原创]Roarctf 2019 easy_pwn
发表于: 2020-6-27 20:53 8107

[原创]Roarctf 2019 easy_pwn

2020-6-27 20:53
8107

一个笔记系统,先添加然后才能编辑,在编辑的时候,如果输入的 size 比之前创建的时候大 10 的话,就会造成 off by one


先放一下 exp

希望把 chunk 放到 unsorted bin 中,然后通过 fd 指针来拿到 unsorted bin 的地址,从来获得 libc 的地址,但程序使用的是 colloc,他会把申请的内存块给清空,所以不能通过申请一个在 unsorted bin 范围内的 chunk,free 之后申请过来泄露地址,可以通过先申请几个,然后通过第 0 个的 off by one 把第 1 个的 size 给改掉,让他包含上第 2 个,然后把第一个 free 的时候,会把第 1 和 第 2 个一起放到 unsorted bin 中,然后申请回来第 1 个,这时候第二个的 fd 指针就指向了 unsorted bin 的地址


首先申请一些堆块

image.png


然后对第 0 个进行编辑 write(0, 0x58 + 0xa, 'a'* 0x58 + '\xe1') 通过 off by one 把第 1 个的 size 给改成 0xe1


image.png


这时候 free 掉第 1 个,会放到 unsorted bin 中,然后他的 fd、bk 会指向 unsorted bin 的地址


image.png


这时候我们去把第 1 个申请回来,因为是 colloc 所以会置 0,但是我们可以用第 2 个来获得 unsorted bin 的地址


image.png


这个地址是 unsorted bin 链表的头部,跟 main_arena 的偏移固定 0x58,同时 main_arena 跟 libc 的偏移可以通过工具计算出来 https://github.com/bash-c/main_arena_offset


image.png

然后再去申请 unsorted bin 中剩下的那块,这算第 5 个(第 2 个也指向他)



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

最后于 2020-6-27 21:00 被yichen115编辑 ,原因: 排版
收藏
免费 6
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//