type
status
date
slug
summary
tags
category
icon
password
heap题在目前的pwn中尚有大量的存在,这篇文章用于简单总结,不同的libc的一些heap技巧。不全,遇到一题写一题吧
glibc 2.23
最基础的版本,在目前的题目中出现的已经不算太多。
fastbin attck
这是2.23里比较重要的漏洞,就是
fastbin的双重释放。free(A)之后free(B),之后再free(A)(A和B的大小相同),在fastbin 存在两个A。就可以malloc一个和AB相同大小的chunk,这样就会把A申请出来,修改其fd的地址,指向伪造的chunk,从而使伪造的chunk进入fastbin中,之后就可以把这个伪造的chunk申请出来使用。这个伪造的chunk要满足chunk的size为和AB的大小相同这个漏洞可以达到任意地址写,和伪造chunk。
fake unsortedbin
这是一个
unsortedbin有关的手法,简单来说就是把一个伪造的chunk放入unsortedbin 使得fd和bk位置上有libc地址,这里对伪造的
chunk有很大的要求,首先是大小要满足要求,然后是在这个fake_chunk下面我们要再伪造一个fake_chunk2,这个的大小满足基本chunk的要求就行,然后再fake_chunk2的下面要再伪造一个fake_chunk3,这个fake_chunk3自有一个要求,其size位不为0就行。只要满足上面的要求我们再
free(fake_chunk)之后才能把fake_chunk放入unsortedbin中。
就像这里,我们可以看到要放入
unsortedbin的为0x6020c0的chunk 大小为0x91,再这个chunk结束之后就又是一个大小的0x21的chunk ,再这个0x21的chunk 下面的fake_chunk便是满足size的大小不为0。就要满足这样的条件然后
free(0x6020c0) 才能使得0x6020c0的chunk 能够成功放入unsortedbin 中。
就是为了满足这个条件,此时r13中的就是
fake_chunk2 的起始地址,r15中的是fake_chunk2 的大小。[r13 + r15 + 8] 就是fake_chunk3 size地址。只要不为0就满足条件跳转 _int_free+2048 。感觉这个条件是为了检查top chunk的,但具体不知道,对
free函数的源码理解不深,这里暂当个板子用。glibc 2.31
tcachebin重申请
这个手法很明显不是在2.31的版本中可以使用,2.27的也是可以的,更高的还不确定。
这个简单来说就是修改
tcachebin的fd指针,指向我们要修改的地址,然后把这个地址申请出来,当作chunk使用,从而修改其中的内容。这里的要求比较底,就满足,在
tcachebin中的chunk数能让我们申请出来就像,要修改的地址,不用满足任何条件,直接指向要修改的地址就行。先
free(A),在free(B),使得在tcachebin中出现这样的结构,B→A ,这里我们就可以直接修改B的fd指针,指向我们要修改的地址。然后申请出来使用就行。修改B就是为了满足,程序中的tcachebin 的数量为2.- 作者:wgiegie
- 链接:https://tangly1024.com/article/1d73ecc9-5160-80ef-a4ce-c6f574ddb595
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。