dvbbs
收藏本页
联系我们
论坛帮助
dvbbs

堕落街论坛休闲之乐游戏体育 → 缓冲区溢出原理


  共有657人关注过本帖树形打印

主题:缓冲区溢出原理

帅哥哟,离线,有人找我吗?
ivan924
  1楼 个性首页 | 博客 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:宝宝 主题:17 精华:0 贴子:18 排名:0 威望:0 排名:0 注册:2005/4/30 1:48:00 近访:2008/11/21 9:13:56
缓冲区溢出原理  发贴心情 Post By: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语言中,静态变量是分配在数据段中的,动态变量是分配在堆栈
段的。缓冲区溢出是利用堆栈段的溢出的。


欢迎大家光临我的论坛:

http://ivan924.bbs.topzj.com

支持(0中立(0反对(0回到顶部