house of lore

2021-02-01  本文已影响0人  clive0x

在glibc2.31上已经失效。没有考虑tcache开启,属于较老的一种利用。

1.在栈在构造目标chunk 1和2,chunk1->bk指向chunk2,chunk2->fd指向chunk1。

2.malloc size 为100的内存victim,初始时fd与bck值为0。

3.malloc size为1000的内存,防止内存victim free时与top紧临而被合并到top区域

4.free victim,进入unsort bin,victim FD与BCK值被改写,指向unsort bin。

5.修改victim bck,指向chunk1,方便后继分配chunk1

6.malloc size为1200的内存,使victim从unsort bin进入small bin队首(产生malloc consolidate),victim fd与bck都发生了改变。注:2.31  free chunk size > 64K时,才会发生malloc consolidate。

这里malloc与free相结合使用。malloc经过tcache、fastbin、smallbin查找chunk不成功,会对fastbin做malloc consolidate,入unsortbin。后面会查找unsortbin,查找相同尺寸的chunk。如果尺寸不同,chunk将放入small/large等bins。

7.修改victim bak,便其向向chunk1。

8.malloc 100,分配victim区域。

9.malloc 100,分配 栈上chunk1。

10.为所欲为。

知识点:_int_free 内存时,先后涉及tcache、fastbin、unsortbin。不会涉及smallbin、largebin。house of lore利用malloc(1200) 将unsortbin的chunk放入到smallbin。

上一篇下一篇

猜你喜欢

热点阅读