首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是缓冲区溢出?

什么是缓冲区溢出?
EN

Security用户
提问于 2013-06-25 06:22:05
回答 5查看 2.6K关注 0票数 8

我在一个教程中学习C,已经到了经常提到“缓冲”S这个词的地步。

它还提到了某些涉及内存的不良编程实践如何“易受缓冲区溢出的影响”。它将缓冲区定义为:

为输入源保留的少量内存

虽然我听说过与恶意软件有关的缓冲区溢出攻击,但我从未了解它的实际工作原理,特别是从编程的角度来看。

理想情况下,这可以用“外行人”的术语来解释,因为我对计算机理论知识很少。

EN

回答 5

Security用户

回答已采纳

发布于 2013-06-25 08:39:02

缓冲区是在处理数据时存储数据的预分配内存区域。基本上,它只是说从内存中的某个地址到内存地址+x Bytes被预留用于分配数据。在C语言中,这通常被称为数组。

当您分配了比缓冲区更多的数据并覆盖内存地址+ x以外的代码时,就会发生缓冲区溢出。您以前可能已经这样做过,您会注意到您的程序崩溃了。现在的问题是,缓冲区之外的某个地方是返回地址(这指向在分配缓冲区并将数据加载到缓冲区之后将执行的下一个指令),如果您用随机数据覆盖它,您的程序就会崩溃。但是,如果您设法加载字节代码(这是一个编译后的程序,CPU可以直接执行),并且您实际上可以让它指向您的程序,那么您可以在该机器上执行代码。

现在,如果您在本地运行,您可能会认为这并不是一个真正的问题,但是想象一下运行在internet上的SSH或FTP服务器之类的程序,或者想象一个受限的环境,其中某些程序以更高的权限运行。如果您能够在其他程序的上下文和权限内执行代码,则可以突破限制或接管远程服务器。

如果您想了解更多关于程序集、缓冲区溢出和外壳代码的信息,我建议您购买“shellcode编码器手册”。这本书是用来学习这些东西的。

票数 9
EN

Security用户

发布于 2013-06-25 06:31:14

当您编写缓冲区S时,需要少量的内存(例如16字节)。当我现在将更多的字节写入缓冲区(例如,20个字节)时,就称为缓冲区溢出。

如果缓冲区中的数据来自外部,这是一个安全漏洞,因为新的字节被写入用于其他目的的内存区域。

当过写字节的另一个目的是包含程序代码时,您可以想象会发生什么。

票数 0
EN

Security用户

发布于 2013-06-25 06:51:25

在C中,缓冲区溢出最常见的情况是复制到数组(缓冲区)中的数据超过其定义的大小。完美地解释了这一点。如果您不熟悉程序集,只需阅读C代码即可

票数 0
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/37980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档