2010-11-05 26 views
6

我讀過兩篇關於堆噴的文章:Wikiepdiathis blog post。我知道如何將shell代碼引入到程序的內存中。但是程序如何跳轉/調用堆中的地址內存?堆噴攻擊如何工作?

什麼樣的崩潰導致堆調用?

這樣的攻擊是否需要進行一種緩衝區溢出攻擊?

是否有像緩衝區溢出那樣的黃金法則,即使用n版本的函數(strncpy而不是strcpy)?

+0

請參閱http://www.darkreading.com/vulnerabilities---threats/heap-spraying-attackers-latest-weapon-of-choice/d/d-id/1132487和https://www.corelan。 be/index.php/2011/12/31/exploit-writing-tutorial-part-11-heap-spraying-demystified/ – Pacerier 2015-01-05 09:38:51

回答

2

如果我理解正確,

他們通常採取從 事實,這些堆塊將 大致處於同一位置的每個 時間堆噴射運行的優勢。執行 流可以重定向到堆 通過緩衝區溢出或堆溢出 溢出漏洞。

他們談論這樣的情況:

char buffer[10]; 
FuncPtr p; 

當你讀入buffer沒有溢出保護,並且可以直接寫入內存位置p。稍後,當您的代碼嘗試撥打p時,它會跳轉到攻擊者希望跳轉到的位置,大概是他們將可執行代碼注入您的應用程序的位置。

簡單修復:不要使用靜態緩衝區(更喜歡std::集合類)並始終檢查溢出。

+0

它接縫我錯過了維基百科的那句話:)謝謝! – 2010-11-05 23:40:22