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要满足chunksize为和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中。
notion image
 
就像这里,我们可以看到要放入unsortedbin的为0x6020c0chunk 大小为0x91,再这个chunk结束之后就又是一个大小的0x21的chunk ,再这个0x21的chunk 下面的fake_chunk便是满足size的大小不为0。
就要满足这样的条件然后free(0x6020c0) 才能使得0x6020c0chunk 能够成功放入unsortedbin 中。
 
notion image
就是为了满足这个条件,此时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.
 
 
 
2025能源安全wppwn奇计
Loading...
wgiegie
wgiegie
一个苦逼的ctf干饭人🍚
公告
🎉NotionNext 4.5已经上线🎉
-- 感谢您的支持 ---
👏欢迎更新体验👏