Linux下堆漏洞的利用机制

1.保护机制

if (__builtin_expect (FD->bk != P || BK->fd != P, 0))                     
      malloc_printerr (check_action, "corrupted double-linked list", P);

这个就是所谓的堆指针的check。

FD其实就是p->fd

BK其实就是p->bk

就是说:p->fd->bk=p

    p->bk->fd=p

就是做这么一个验证。

这个验证找一个指向堆的指针就可以绕过,但是要知道指针变量的地址,否则就是白扯。

为了触发unlink,需要伪造一个(2个)新块才行。其实就是

伪造的空块|伪造的使用中的块

 

释放使用中的伪造块就会造成伪造的空块调用unlink,因为这个触发了空块合并机制。

 

怎么指定的前块为空呢?

1.当前的prve_size有值,就是不为零

2.第三个flag为0,表示前块为空

 

posted @ 2016-05-15 23:53  Ox9A82  阅读(670)  评论(0编辑  收藏  举报