Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我读过两篇关于堆喷射的文章:维基百科和这篇博文。我了解如何将 shell 代码引入程序的内存中。但是如何使程序跳转/调用位于堆上的地址内存?
什么样的崩溃会调用堆?
这种攻击是否需要用一种缓冲区溢出攻击来进行?
有没有像缓冲区溢出那样的黄金法则,即使用 n 版本的函数(strncpy而不是strcpy)?
strncpy
strcpy
如果我理解正确,
他们通常利用每次运行堆喷射时这些堆块大致位于相同位置的事实。执行流可以通过缓冲区溢出或堆溢出缺陷重定向到堆喷射。
他们在谈论这样的情况:
char buffer[10]; FuncPtr p;
而且当你读入时buffer没有溢出保护,你可以直接写入内存位置p。稍后,当您的代码尝试调用p时,它将跳转到攻击者希望它跳转的位置,大概是他们将可执行代码注入您的应用程序的位置。
buffer
p
简单修复:不要使用静态缓冲区(更喜欢std::集合类)并始终检查溢出。
std::