Linux下堆漏洞的利用机制

发布者:Ox9A82
发布于:2016-05-15 23:53

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,表示前块为空

 


声明:该文观点仅代表作者本人,转载请注明来自看雪