文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>何谓缓冲区溢出(转)

何谓缓冲区溢出(转)

时间:2006-06-02  来源:szhlwl

简单的说就是程序对接受的输入数据没有进行有效的检测导致错误,后果可能造成程序崩溃或者是执行攻击者的命令。       大多数应用程序保存数据的缓冲区大小是固定的。 如果攻击者向这些缓冲区之一中发送了过量数据,而程序没有检查数据的大小,则缓冲区会溢出。 然后,服务器就会执行“溢出”的的数据,就像执行程序一样。 如果攻击的缓冲区在合法进程中,则恶意程序就会完全控制服务器,然后肆意做任何事情,包括在目标计算机上执行命令、盗取密码或其他机密信息、改变系统配置和/或安装后门等。

  UNIX和Windows本身以及其上的许多应用程序都是用C语言编写的,C/C++语言对数组下标访问越界不做检查,是引起缓冲区溢出的根本原因。在某些情况下,如果用户输入的数据长度超过应用程序给定的缓冲区,就会覆盖其他数据区。这称作"缓冲区溢出"。缓冲区溢出大致可分为两类,一类是堆溢出(Heap Overflow),一类是栈溢出(Stack Overflow)。
        
溢出的原理是:
在内存中,当一个程序运行时,系统会为它分配一定的资源。例如C中的INT就是分配2字节的内存单元,能存放65535种数字,即-32768~32767范围的数,假如大于这个范围了呢?就会向上进位,但是程序只会读取2字节的数,超出的部分是不管的,就造成了重头再读数的现象。
而CPU处理数据是这样的:当处理某种程序A时,如果有另外一个程序B要执行,并且符合规范,CPU就会暂停执行当前程序,转去执行下一个程序,内存中的情况就是这样的:
[A程序 ]
[的执行 ]
[资源 ]〈-- A被分配资源,开始执行
[ ]
[B的执行 ]〈-- B暂时存储
[资源 ]

(内存的分配从下到上)
这时,假如缺乏必要的保护措施,并且A输入了大于分配给它的资源,那么这时,A的执行代码就会向下占用资源,并且覆盖B的部分。
如果我们写下精心设计的代码,让覆盖到B的那部分执行别有用心的语句,那么当计算机处理完A那部分资源,转回来继续执行B时,就会被欺骗执行那些别用用心的代码。

溢出攻击其实说出来也很简单。成功后你可以让CPU执行你想要的任何代码,一般病毒都会尝试得到一个CmdShell,这样就能完全控制你的电脑了。
要想尽量避免这种情况,建议勤打补丁,并且不要执行一些奇怪的程序。
相关阅读 更多 +
排行榜 更多 +
空中跑酷汉化版

空中跑酷汉化版

赛车竞速 下载
修仙传说

修仙传说

角色扮演 下载
魔界零之迷宫

魔界零之迷宫

冒险解谜 下载