我讀過兩篇關於堆噴的文章:Wikiepdia和this blog post。我知道如何將shell代碼引入到程序的內存中。但是程序如何跳轉/調用堆中的地址內存?堆噴攻擊如何工作?
什麼樣的崩潰導致堆調用?
這樣的攻擊是否需要進行一種緩衝區溢出攻擊?
是否有像緩衝區溢出那樣的黃金法則,即使用n版本的函數(strncpy
而不是strcpy
)?
我讀過兩篇關於堆噴的文章:Wikiepdia和this blog post。我知道如何將shell代碼引入到程序的內存中。但是程序如何跳轉/調用堆中的地址內存?堆噴攻擊如何工作?
什麼樣的崩潰導致堆調用?
這樣的攻擊是否需要進行一種緩衝區溢出攻擊?
是否有像緩衝區溢出那樣的黃金法則,即使用n版本的函數(strncpy
而不是strcpy
)?
如果我理解正確,
他們通常採取從 事實,這些堆塊將 大致處於同一位置的每個 時間堆噴射運行的優勢。執行 流可以重定向到堆 通過緩衝區溢出或堆溢出 溢出漏洞。
他們談論這樣的情況:
char buffer[10];
FuncPtr p;
當你讀入buffer
沒有溢出保護,並且可以直接寫入內存位置p
。稍後,當您的代碼嘗試撥打p
時,它會跳轉到攻擊者希望跳轉到的位置,大概是他們將可執行代碼注入您的應用程序的位置。
簡單修復:不要使用靜態緩衝區(更喜歡std::
集合類)並始終檢查溢出。
它接縫我錯過了維基百科的那句話:)謝謝! – 2010-11-05 23:40:22
請參閱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