PWN系列-Unsorted Bin Attack
概述
Unsorted Bin Attack,顾名思义,该攻击与 Glibc 堆管理中的的 Unsorted Bin 的机制紧密相关。
Unsorted Bin Attack 被利用的前提是控制 Unsorted Bin Chunk 的 bk 指针。
Unsorted Bin Attack 可以达到的效果是实现修改任意地址值为一个较大的数值。
Unsorted Bin 回顾
在介绍 Unsorted Bin 攻击前,可以先回顾一下 Unsorted Bin 的基本来源以及基本使用情况。
基本来源
- 当一个较大的 chunk 被分割成两半后,如果剩下的部分大于 MINSIZE,就会被放到 unsorted bin 中。
- 释放一个不属于 fastbin 的 chunk,并且该 chunk 不和 top chunk 紧邻时,该 chunk 会被首先放到 unsorted bin 中。关于 top chunk 的解释,请参考下面的介绍。
- 当进行 malloc_consolidate 时,可能会把合并后的 chunk 放到 unsorted bin 中,如果不是和 top chunk 近邻的话。
基本使用情况
- Unsorted Bin 在使用的过程中,采用的遍历顺序是 FIFO,即插入的时候插入到 unsorted bin 的头部,取出的时候从链表尾获取。
- 在程序 malloc 时,如果在 fastbin,small bin 中找不到对应大小的 chunk,就会尝试从 Unsorted Bin 中寻找 chunk。如果取出来的 chunk 大小刚好满足,就会直接返回给用户,否则就会把这些 chunk 分别插入到对应的 bin 中。
Unsorted Bin Leak
在介绍 Unsorted Bin Attack 之前,我们先介绍一下如何使用 Unsorted Bin 进行 Leak。这其实是一个小 trick,许多题中都会用到。
Unsorted Bin 的结构
Unsorted Bin
在管理时为循环双向链表,若 Unsorted Bin
中有三个 bin
,那么该链表结构如下
在申请到Unsorted Bin
后可以想办法输出chunk的内容,这样就可以泄露main_arena的一个地址,通过计算就可以得到libc的基地址了。
Unsorted Bin Attack 原理
在 glibc/malloc/malloc.c 中的 _int_malloc
有这么一段代码,当将一个 unsorted bin 取出的时候,会将 bck->fd
的位置写入本 Unsorted Bin 的位置。
/* remove from unsorted list */
victim = unsorted_chunks (av)->bk
bck = victim->bk
unsorted_chunks (av)->bk = bck
bck->fd = unsorted_chunks (av)//此时fd中存放的是main_arena的地址
//
这里一行代码一行代码进行解释
victim = unsorted_chunks (av)->bk
unsorted_chunks (av)->bk其实就是chunk3,所以此时victim就是chunk3
bck = victim->bk
此时bck就是chunk3的bk值
unsorted_chunks (av)->bk = bck
如果我们没有修改chunk3的bk值,这一步其实就是让unsorted_chunks (av)->bk指向chunk2,如果我们修改了chunk3的bk值,这里就是指向了我们修改的target_addr了,unsortedbin attack之后不能在遍历`unsorted bin链了,因为此时的main_arena的bk已经被我们改为target_addr,av->bk索引到的地址是一般是无法绕过check的。
bck->fd = unsorted_chunks (av)
这里的bck->fd其实就是chunk3->bk->fd,正常情况下这步是将unsorted_chunks (av)写入chunk2的fd,如果我们修改了chunk3的bk的话,这里就会将unsorted_chunks (av)写入chunk3->bk->fd(也就是chunk3->bk+0x10)的位置,所以这里一般会写_IO_list_all-0x10来进行劫持。
换而言之,如果我们控制了 bk 的值,我们就能将 unsorted_chunks (av)
写到任意地址。
几乎全部都是抄的ctf-wiki,学到很多,记录在此供自己日后再次学习。
参考文章:https://ctf-wiki.org/pwn/linux/user-mode/heap/ptmalloc2/unsorted-bin-attack/
标签:Bin,Unsorted,chunk,bk,Attack,unsorted,av,PWN From: https://www.cnblogs.com/xiaochange/p/18206762