我读过两篇有关堆喷洒的文章:Wikiepdia和this blog post。
我了解如何将Shell代码引入程序的内存中。但是,如何使程序跳转/调用位于堆上的地址存储器呢?
哪种崩溃会导致调用堆?
是否需要使用一种缓冲区溢出攻击来进行此类攻击?
有没有像缓冲区溢出那样的黄金规则,即使用n版本的函数(strncpy
而不是strcpy
)?
最佳答案
如果我理解正确,
他们正在谈论这样的情况:
char buffer[10];
FuncPtr p;
当您读到
buffer
时,没有溢出保护,您可以直接将其写入p
的内存位置。稍后,当您的代码尝试调用p
时,它将跳至攻击者希望其跳转的位置,大概是他们将可执行代码注入(inject)到您的应用程序中的位置。简单修复:不要使用静态缓冲区(最好使用
std::
收集类),并始终检查是否有溢出。关于c++ - 堆喷攻击如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4110964/