入门堆的过程记录(未完成)

以攻防世界这道noleak为例

首先要了解几个概念
fastbin attack
unsorted bin attack
_malloc_hook

首先fastbin attack,是基于fastbin机制的一种漏洞利用方法
要求:
1.有能控制chunk内容的漏洞
2.漏洞发生在fastbin类型的chunk里
入门堆的过程记录(未完成)_第1张图片
然后介绍下fast bin,个人理解如下
所谓fastbin,可以理解为为了避免一些较小的chunk(堆)在释放后与相邻的chunk合并,(以免再次申请chunk时需要对chunk进行分割,这会浪费大量的效率),于是ptmalloc专门设计了fast bin,用来存储一些刚释放的较小的堆

入门堆的过程记录(未完成)_第2张图片
接下来回到fastbin的内容,(划重点,next_chunk的prev_inuse位不会被清空)
入门堆的过程记录(未完成)_第3张图片
然后看看ctf-wiki的例子,那就是malloc了3个大小为0x30chunk,然后又依次free了3个chunk
入门堆的过程记录(未完成)_第4张图片
可以看到malloc完3个chunk后是这个样子(关于top chunk是什么放在其他文章讲)https://blog.csdn.net/qq_41453285/article/details/96851282
入门堆的过程记录(未完成)_第5张图片
可以看到我们每个chunk的内容都一样,然后将其free
入门堆的过程记录(未完成)_第6张图片
可以看到其中的内容都有所改变,例如0x602050的前半行
入门堆的过程记录(未完成)_第7张图片

然后如果你查询fastbin,就会发现fastbin中存储了一个指向chunk3的指针
(chunk3也就是0x602080)
入门堆的过程记录(未完成)_第8张图片

了解完fastbin attack, 我们再来了解一下unsorted bin attack
然后先介绍一下unsorter bin
unsorter bin,第一种可以理解为一个收集箱,收集的是分割后的chunk,只要这个chunk大于MINSIZE(也就是一个chunk应有的最小大小),那么就会收集到其中
第二种理解为只要是不来自于fast bin 的chunk,并且不和top chunk紧邻,那么这个chunk会被收入unsorter bin(只要不是它们俩的朋友,就是我unsorter bin的朋友)

入门堆的过程记录(未完成)_第9张图片
然后理解一下他们的使用情况,大概就是,fastbin和small bin是灭火器,放在家中随时可以用,
Unsorted Bin是消防队,灭火器不够用的时候就要呼叫消防队了。当前两者中的chunk不够用的时候,就要到Unsorted Bin中寻找内存。
入门堆的过程记录(未完成)_第10张图片

接下来介绍
Unsorted Bin Attack的原理
简而言之就是当一个unsorted bin被使用时,(消防队被呼叫时,bck->fd的位置会被写入这个Unsorted Bin)
入门堆的过程记录(未完成)_第11张图片

然后我们来介绍_malloc_hook
__malloc_hook
是一个
函数指针变量
指向的是

你可能感兴趣的:(CTF,pwn)