我已经阅读了两篇有关堆积的文章: Wikiepdia这篇博客文章。我了解如何将Shell代码引入程序的内存。但是如何使程序跳/呼叫到堆上的地址内存?

什么样的崩溃呼叫堆?

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

是否有任何黄金法则,例如带有缓冲区溢出的一个,即使用n版本的函数(strncpy 反而 strcpy)?

有帮助吗?

解决方案

如果我正确理解,

他们通常会从每次运行堆喷雾时大致在同一位置的事实中,他们通常会利用这一事实。执行流可以通过缓冲区溢出或堆溢出缺陷将执行流重定向到堆喷雾。

他们在谈论这样的情况:

char buffer[10];
FuncPtr p;

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top