| 首页 | 技术文章 | 软件下载 | 博客 | 论坛 | 精品教程 | 黑客动画 | 视频资源 | 在线服务 | 黑客游戏 | 

您现在的位置: 中国X黑客小组 >> 技术文章 >> 安全防御 >> 漏洞分析 >> 文章正文 用户登录 新用户注册
  缓冲区溢出原理之白话草稿         ★★★ 【字体:
缓冲区溢出原理之白话草稿
作者:未知    文章来源:特络纳网络安全小组    点击数:    更新时间:2005-10-8    

首先,要说明本文所要阐诉的仅仅是白话.仅仅是说了一些心得, 
毕竟我也是觉得惶恐的.没有什么任何听不懂的地方,只要你能坚持看完本文, 
则会初步的理解缓冲区溢出的概念. 
关于缓冲区溢出,自然要从"缓冲区"说起.则,何为"缓冲区", 
学习过C语言的人应该知道,当程序即将运行时, 
会检查该程序将会使用到的变量,并且为该变量在内存中"划"出(或者用"登记"比较合适) 
一段来,用于存贮该变量的数据.而被分出的内存区域大小则和程序代码的变量长度一样. 
例如,定义某变量为8个字符,则该被分配内存大小也为8. 
什么是变量,且听下面的例子(或许不是很准确): 
例如,你要计算一个长方形的面积,可以根据数学公式: 
长*宽=面积, 
得出. 
倘若一个长方形长为20,宽为10,用程序表示出来或许应该如下: 
(下面的程序我想用任何编译器都编译不出,用脑袋或许可以) 
行1 l=20 
行2 h=10 
行3 s=l*h 
现在让我们解读一下该"程序" 
其中,我们用"l"表示"长方形的长",并且赋值为"20",行1; 
其中,用"h"代表"长方形的宽",赋值为"10",行2; 
其中,用"s"表示"长方形的面积",值为"l*h", 
白话则是用"l"乘"h"得出面积,行3,这也恰恰应用到了数学的公式. 
问题也就随之出现,上面的程序显然是有很大的弊病的.因为--它仅仅可以计算一个长方形的面积,世界上那么多长方形,要如何计算?!难道要为每个长方形都写一个程序么? 
然而事情看样子总是有转机的,变量也就随之出现了,当有了变量,我们就可以输入 
(通过你的键盘)数据给程序,程序接受后,则会计算出相应的长方形了. 
程序或许可以如下: 
行1 +------输入"长" 
行2 | 输入"宽"---------------------+ 
行3 +------长的变量 | 
行4 宽的变量---------------------+ 
行5 搜集到了足够的信息,执行s=l*h 
事情就这样被解决了?不,经过上面的温习,我们初步了解了一些程序的知识. 
现在进入缓冲区溢出这个概念. 
还要提起变量,我们在本问第二自然段提过: 
"当程序即将运行时,会检查该程序将会使用到的变量, 
并且为该变量在内存中"划"出 
(或者用"登记"比较合适)一段来,用于存贮该变量的数据. 
而被分出的内存区域大小则和程序代码的变量长度一样. 
例如,定义某变量为8个字符,则该被分配内存大小也为8." 
让我们看这一段: 
"被分出的内存区域大小则和程序代码的变量长度一样. 
例如,定义某变量为8个字符,则该被分配内存大小也为8." 
问题出现了,为什么要给变量定义一个长度呢?我是这样理解的, 
因为它需要在内存中分配出空间给该变量提供数据存贮空间, 
倘若,没有事先定义好该变量的数据长度(或者谨慎的说"最长度"), 
则,我们的计算机到底要为它分配多少空间呢? 
1K?1M?1G?呵呵,显然为其定义一个长度是有必要的! 
何为缓冲区溢出?有何危害? 
震荡波你应该熟悉,它就是利用了ms04-011漏洞, 
是一个缓冲区溢出的利用.至于危害, 
你可以查阅以前的帖子或者有幸体会吧? 
下面的内容或许很笼统,但确实是我所理解的. 
还是举个例子: 
试图我们要编写一个如下的程序, 
该程序运行的时候会自动读取同目录下的1.txt中的内容 
,并且写入到变量A中.代码如下(注:"//"后为注释) 
行1 变量A[10] //设置了一个变量A,长度10 
行2 读取本程序同目录下的1.txt中的内容 
行3 将读取的内容写入到变量A中 
-=程序完=- 
看样子是一个很符合逻辑的程序,但是问题恰好出现了: 
如果该1.txt内容如下: 
123456789 
则,不会出现问题 
倘若,1.txt内容如下: 
123456789123456789123456789123456789123456789 
123456789123456789123456789123456789123456789 
123456789123456789123456789123456789123456789123456789 
这样会如何呢?来分析一下, 
这个时候程序会执行到第二行, 
当执行到第三行的时候就会产生溢出了!问题出在程序的"行1", 
因为它定义的变量长度为10,而1.txt中的内容远远大于了10,换句话讲,该段内存被撑着了. 
被撑着的内存会溢出,好比,一杯水,满了,还继续往里面倒, 
必然会影响到桌子的卫生(我想这样的比喻更能诠释"溢出"二字) 
本文的读者,你看懂了么?(还请GG们多多提携小弟!)

文章录入:IceRiver    责任编辑:IceRiver 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    缓冲区溢出原理浅析以及防护
    CISCO IOS NHRP 功能中存在缓
    雅虎窗件曝出缓冲区溢出漏洞
    Linux下防范缓冲区溢出攻击的
    雅虎通8.0爆缓冲区溢出漏洞
    缓冲区溢出 十年来攻击和防
    HP Tru64 UNIX libpthread本
    WFTPD Pro APPE命令缓冲区溢
    缓冲区溢出解密(三)
    缓冲区溢出解密(二)
      网友评论:(只显示最新5条。评论内容只代表网友观点,与本站立场无关!)
    Powered by ICE RIVER - STUDIO
    » CnXHacker.CoM   © CopyRight 2002-2006, CnXHacker.CoM™, Inc. All Rights Reserved.