堆喷射攻击如何工作?

Pio*_*pla 6 c c++ security exploit

我读过两篇关于堆喷涂的文章:Wikiepdia这篇博客文章.我理解shell代码是如何引入程序的内存的.但是程序如何跳转/调用堆上的地址内存?

什么样的崩溃会调用堆?

这种攻击是否需要通过一种缓冲区溢出攻击来进行?

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

Bli*_*ndy 3

如果我理解正确的话

他们通常利用这样一个事实:每次运行堆喷射时,这些堆块将大致位于相同的位置。执行流可以通过缓冲区溢出或堆溢出缺陷重定向到堆喷射。

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

char buffer[10];
FuncPtr p;
Run Code Online (Sandbox Code Playgroud)

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

简单的修复:不要使用静态缓冲区(更喜欢std::集合类)并始终检查溢出。