论坛: 黑客进阶 标题: 常说的溢出是指什么? 复制本贴地址    
作者: liuxing [liuxing]    论坛用户   登录
这个溢出那个溢出的,溢出是指什么?原理怎么样?

地主 发表时间: 10/24 08:50

回复: cyshaoping [cyshaoping]   论坛用户   登录
    常说的溢出是指缓冲区溢出.
    缓冲区是内存中存放数据的地方。在程序试图将数据放到计算机内存中的某一位置,但没有足够空间时会发生缓冲区溢出。
  下面对这种技术做一个详细的介绍。
  缓冲区是程序运行时计算机内存中的一个连续的块,它保存了给定类型的数据。问题随着动态分配变量而出现。为了不用太多的内存,一个有动态分配变量的程序在程序运行时才决定给他们分配多少内存。
  如果程序在动态分配缓冲区放入太多的数据会有什么现象?它溢出了,漏到了别的地方。一个缓冲区溢出应用程序使用这个溢出的数据将汇编语言代码放到计算机的内存中,通常是产生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语言中,静态变量是分配在数据段中的,动态变量是分配在堆栈段的。缓冲区溢出是利用堆栈段的溢出的。


B1层 发表时间: 10/24 12:08

回复: chiruwn [chiruwn]   论坛用户   登录
简单来说就是一个筐能放五个鸡蛋,而你一下放了八个,于是这个筐就放不下了,放到了前面的筐里。如何让自己的鸡蛋被市长吃到,这就要复杂的算法和放入不同的鸡蛋了,大概就是这个原理。(不好意思晚上鸡蛋吃多了,满脑子都是鸡蛋)

B2层 发表时间: 10/28 23:53

回复: cyshaoping [cyshaoping]   论坛用户   登录
不错
很形象

B3层 发表时间: 10/29 18:51

回复: feeling_li [feeling_li]   论坛用户   登录
楼上2为兄弟说得真好!!

顶!!!!!!!!!!

B4层 发表时间: 11/17 15:19

回复: ck138168 [ck138168]   论坛用户   登录
哈哈!!!!!!

B5层 发表时间: 11/17 20:09

回复: GentleHug [gentlehug]   论坛用户   登录
很形象!我也看懂了,虽然很是cai

B6层 发表时间: 11/18 20:19

回复: ly258 [ly258]   论坛用户   登录
好好吃的鸡蛋呀!

B7层 发表时间: 11/26 08:39

回复: afan271314 [afan271314]   论坛用户   登录
顶  俺不懂语言  所以  看不懂

[此贴被 真爱有限(afan271314) 在 11月26日21时19分 编辑过]

B8层 发表时间: 11/26 21:04

回复: zhuyaping [zhuyaping]   论坛用户   登录
同意哦!这个比喻很好!

B9层 发表时间: 11/27 22:11

回复: newmyth21 [newmyth21]   论坛用户   登录
二楼的好,我顶。

B10层 发表时间: 11/28 01:17

回复: xlinz [xlinz]   论坛用户   登录
二楼的好!!

B11层 发表时间: 11/28 10:06

回复: ds [wangyan1]   论坛用户   登录
我也顶

B12层 发表时间: 04-08-26 11:28

回复: bluecat_ [bluecat_]   论坛用户   登录
呵.......说的挺形象的..........I like

B13层 发表时间: 04-08-26 14:17

回复: sherry [sherry]   论坛用户   登录
发明溢出这个方法这个人绝对是个天才,产生溢出这个可以说是防不胜防,unix这么多年了,仍然没有解决这个问题。现在几乎在没有办法的情况下,几乎溢出都是必杀技术,。谁叫这个世界的操作系统几乎都是使用c/c++写的呢!我不是说c/c++不好,在我眼里,c/c++绝对是世界上最美的高级语言。过去是,现在是,将来还是!因为c太灵活了,它对你的数据不检查边界,也就是说你给一个数组输入数据的时候,如果你不叫停,它就一直往下灌。管它会产生什么后果,它就一直往下灌,除非你叫停。他们就是不自己判断边界。包括c的一些函数。到现在,我还对想出使用溢出方法进行攻击的人佩服的不行。他当时是怎么想出来的?靠。脑瓜子真是好用呀。但是,我肯定那个人肯定是个调试高手,肯定是个汇编调试高手。因为溢出程序,哪怕就是差一个字节,后果就完全不是你想的那么执行。

B14层 发表时间: 04-08-27 21:27

回复: bulesky [bulesky]   论坛用户   登录
不错啊,我顶~~~~~~~~~~

B15层 发表时间: 04-08-27 23:06

回复: legioncmdr [legioncmdr]   论坛用户   登录
呵呵,崇拜会导致模仿,真希望历史会重演啊

让我们的sherry成为中国的溢出高手哈

为国争光!!!!!!!

B16层 发表时间: 04-08-28 04:11

回复: hackerjune [hackerjune]   论坛用户   登录
B14
哪有完美的语言啊````````

B17层 发表时间: 04-08-31 20:04

论坛: 黑客进阶

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号