Linux下堆漏洞的利用機制

Ox9A82發表於2016-05-15

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,表示前塊為空

 

相關文章