-
-
[原创]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 的地址
首先申请一些堆块
然后对第 0 个进行编辑 write(0, 0x58 + 0xa, 'a'* 0x58 + '\xe1') 通过 off by one 把第 1 个的 size 给改成 0xe1
这时候 free 掉第 1 个,会放到 unsorted bin 中,然后他的 fd、bk 会指向 unsorted bin 的地址
这时候我们去把第 1 个申请回来,因为是 colloc 所以会置 0,但是我们可以用第 2 个来获得 unsorted bin 的地址
这个地址是 unsorted bin 链表的头部,跟 main_arena 的偏移固定 0x58,同时 main_arena 跟 libc 的偏移可以通过工具计算出来 https://github.com/bash-c/main_arena_offset
然后再去申请 unsorted bin 中剩下的那块,这算第 5 个(第 2 个也指向他)
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
赞赏
- 对某款智能手表的分析与攻击 6430
- [原创][车联网安全]使用STM32开发板实战汽车UDS诊断 15013
- [分享]binwalk路径穿越导致RCE(CVE-2022-4510) 9980
- [原创]Hack-A-Sat 2020预选赛 beckley 13583
- [原创]一个BLE智能手环的分析 31542