| 以文本方式查看主题 - 堕落街论坛 (http://duoluojie.1314179.com.cn:443/index.asp) -- 游戏体育 (http://duoluojie.1314179.com.cn:443/list.asp?boardid=331) ---- 缓冲区溢出原理 (http://duoluojie.1314179.com.cn:443/dispbbs.asp?boardid=331&id=77589) |
| -- 作者:ivan924 -- 发布时间:2005/4/30 2:36:00 -- 缓冲区溢出原理 缓冲区是内存中存放数据的地方。在程序试图将数据放到计算机内存 中的某一位置,但没有足够空间时会发生缓冲区溢出。 下面对这种技术做一个详细的介绍。 缓冲区是程序运行时计算机内存中的一个连续的块,它保存了给定类 型的数据。问题随着动态分配变量而出现。为了不用太多的内存,一个有 动态分配变量的程序在程序运行时才决定给他们分配多少内存。 如果程序在动态分配缓冲区放入太多的数据会有什么现象?它溢出了, 漏到了别的地方。一个缓冲区溢出应用程序使用这个溢出的数据将汇编语 言代码放到计算机的内存中,通常是产生root权限的地方。 单单的缓冲区溢出,并不会产生安全问题。只有将溢出送到能够以root 权限运行命令的区域才行。这样,一个缓冲区利用程序将能运行的指令放 在了有root权限的内存中,从而一旦运行这些指令,就是以root权限控制 了计算机。 总结一下上面的描述。缓冲区溢出指的是一种系统攻击的手段,通过 往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序 的堆栈,使程序转而执行其它指令,以达到攻击的目的。据统计,通过缓 冲区溢出进行的攻击占所有系统攻击总数的80%以上。 造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数。例如 下面程序: example0.c ----------------------------------------------------------- void function(char *str) { char buffer[16]; strcpy(buffer,str); } ----------------------------------------------------------- 上面的strcpy()将直接把str中的内容copy到buffer中。这样只要str 的长度大于16,就会造成buffer的溢出,使程序运行出错。存在象strcpy 这样的问题的标准函数还有strcat(),sprintf(),vsprintf(),gets(),scanf(), 以及在循环内的getc(),fgetc(),getchar()等。 在C语言中,静态变量是分配在数据段中的,动态变量是分配在堆栈 段的。缓冲区溢出是利用堆栈段的溢出的。 |