史无前例简短的实验代码(ˉ▽ˉ;)…
原理
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); malloc(400); }
|
malloc(400)的过程中执行了以下步骤:
1 2 3 4 5 6
| bck = victim->bk;
unsorted_chunks (av)->bk = bck; bck->fd = unsorted_chunks (av);
|
2.26-2.27
有了tcache,申请的chunk要在tcache的范围外