有没有网站,或者有没有简单的设置方法,可以演示缓冲区溢出会发生什么?这是在 Web 应用程序的上下文中。
(顺便说一下,我已经在 ServerFault 上问过这个问题了,如果你觉得在那里问会更好)
答案1
堆栈和堆缓冲区溢出本质上是由于将大量数据写入内存中某个太小而无法容纳所有数据的区域所致 - 导致数据写入超出分配范围,并逻辑上将其后面的内容写入内存中。在堆栈溢出的情况下,这可能是函数的返回地址;在堆溢出的情况下,这可能包括堆上其他 C++ 对象的虚拟函数指针。在任一情况下,当被覆盖的函数返回或被覆盖的堆对象被使用时,攻击者可能能够利用此漏洞来控制进程。
用 PHP、C#、VB、VB.NET、ASP.NET、Ruby-on-rails、服务器端 javascript 和 JSP 编写的 Web 应用程序是托管应用程序,不易受到由不良 Web 应用程序代码引起的堆栈缓冲区溢出或堆缓冲区溢出等内存损坏漏洞的影响。缓冲区溢出往往是 C/C++ 应用程序的专利,尽管其他不太常见的“本机”语言(如 Dephi 和 Fortran)也容易受到影响。
如果您是 Web 开发人员,您需要关注的最重要的漏洞类别是 SQL 注入和由服务器代码中不适当的 include/eval/file-writes 引起的问题,这些问题可能允许用户传递的字符串或文件最终被视为服务器上的代码。不幸的是,对于 Web 开发人员来说,这些类型的攻击往往比对本机代码的缓冲区溢出攻击更有效,也更容易实施,因此,作为 Web 开发人员不完全了解安全性的影响可能比作为本机开发人员不了解安全性的影响要严重得多。