缓冲区溢出攻击已经存在了很长时间了。它仍然存在于今天,部分原因是程序员在编写代码时不小心。我所说的“部分”原因是因为有时编写好的代码可以利用缓冲区溢出攻击,因为这也取决于攻击者的奉献精神和智能级别。
方法/步骤
我们至少可以做的是避免编写不好的代码,从而有机会甚至脚本小孩攻击你的程序并利用它在这个缓冲区溢出教程中,我们将讨论以下的基础知识:
什么是缓冲区溢出?
如何发生缓冲区溢出?
如何发生缓冲区溢出攻击?
如何避免缓冲区溢出?
我们会保留解释和示例,使您完全了解这一概念。我们还将使用C编程语言来解释缓冲区溢出概念。
什么是缓冲区溢出?
在执行程序方面,缓冲区可以被认为是计算机主存储器的一个区域,它与引用此内存的程序变量在上下文中具有一定的界限。
例如 :
char buff [10]
在上面的例子中,“buff”表示10个字节的数组,其中buff [0]是左边界,buff [9]是缓冲区的右边界。
让我们举个例子:
int arr [10]
在上面的例子中,'arr'表示10个整数的数组。现在假设整数的大小是4字节,“arr”的总缓冲区大小是10 * 4 = 40字节。与第一个例子类似,arr [0]指的是左边界,而arr [9]是指右边界。
现在应该清楚一个缓冲区是什么意思。继续前进让我们了解缓冲区溢出时。
当数据(意图写入存储器缓冲器)被写入缓冲器的左边界或右边界时,缓冲器被称为溢出。这样,数据将被写入到不属于引用缓冲区的程序变量的内存的一部分。
这是一个例子:
char buff [10];
buff [10] ='a';
在上面的例子中,我们声明了一个大小为10字节的数组。请注意,索引0到索引9可以用于指代这10个字节的缓冲区。但是,在下一行中,我们的索引10用于存储值“a”。这是缓冲区溢出发生的原因,因为数据写入超出缓冲区的右边界。
为什么缓冲区溢出有害?
我们中的一些人可能会认为,尽管缓冲区溢出是一个糟糕的编程习惯,但堆栈上的一个未使用的变量也是如此,那么为什么这么多的hullabaloo呢?什么是缓冲区超载可能对应用程序造成的影响?
那么,如果在一行中我们必须总结这些问题的答案,那就是:
缓冲区溢出(如果未检测到)可能导致程序崩溃或产生意外结果。
让我们了解上面提到的几个解决方案的几个场景。
1.考虑在堆内存中分配10个字节的情况:
char * ptr =(char *)malloc(10);
现在,如果你尝试这样做:
ptr [10] ='c';
那么这可能导致大多数情况下崩溃。原因是,指针不允许访问不属于它的堆内存。
2.考虑另一种情况,您尝试填补缓冲区(堆栈)超出容量:
char buff [10] = {0};
strcpy(buff, "This String Will Overflow the Buffer");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)