堆喷射攻击是如何工作的?

发布于 2024-09-30 12:56:16 字数 362 浏览 8 评论 0原文

我读过两篇关于堆喷射的文章:Wikiepdia这篇博文。 我了解 shell 代码是如何引入到程序内存中的。但是程序如何跳转/调用位于堆上的地址内存呢?

什么样的崩溃会调用堆?

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

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

I've read two articles about heap-spraying: Wikiepdia and this blog post.
I understand how the shell code is introduced in to the program's memory. But how the program is made to jump/call to the address memory located on heap?

What kind of crash makes a call to heap?

Does such attack needs to be conducted with a kind of buffer overflow attack?

Is there any golden rule like the one with buffer overflow ie use the n version of functions (strncpy instead strcpy)?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦明 2024-10-07 12:56:16

如果我理解正确的话

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

他们谈论的是这样的情况:

char buffer[10];
FuncPtr p;

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

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

If I understand correctly,

They commonly take advantage from the
fact that these heap blocks will
roughly be in the same location every
time the heap spray is run. Execution
flow can be redirected to the heap
sprays via buffer overflow or heap
overflow flaws.

They're talking about a situation like this:

char buffer[10];
FuncPtr p;

And when you read into buffer there's no overflow protection, and you can write directly into the memory location for p. Later on when your code tries to call p, it will jump to where the attacker wants it to jump, presumably where they injected executable code into your app.

Simple fix: Don't use static buffers (prefer the std:: collection classes) and always check for overflows.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文