我读过两篇有关堆喷洒的文章:Wikiepdiathis blog post
我了解如何将Shell代码引入程序的内存中。但是,如何使程序跳转/调用位于堆上的地址存储器呢?

哪种崩溃会导致调用堆?

是否需要使用一种缓冲区溢出攻击来进行此类攻击?

有没有像缓冲区溢出那样的黄金规则,即使用n版本的函数(strncpy而不是strcpy)?

最佳答案

如果我理解正确,



他们正在谈论这样的情况:

char buffer[10];
FuncPtr p;

当您读到buffer时,没有溢出保护,您可以直接将其写入p的内存位置。稍后,当您的代码尝试调用p时,它将跳至攻击者希望其跳转的位置,大概是他们将可执行代码注入(inject)到您的应用程序中的位置。

简单修复:不要使用静态缓冲区(最好使用std::收集类),并始终检查是否有溢出。

关于c++ - 堆喷攻击如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4110964/

10-16 03:42