问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

什么叫缓冲区溢出

发布网友 发布时间:2022-04-10 03:36

我来回答

4个回答

热心网友 时间:2022-04-10 05:05

缓冲区溢出
缓冲区是内存中存放数据的地方。在程序试图将数据放到计算机内存中的某一位置,但没有足够空间时会发生缓冲区溢出。

缓冲区是程序运行时计算机内存中的一个连续的块,它保存了给定类型的数据。问题随着动态分配变量而出现。为了不用太多的内存,一个有动态分配变量的程序在程序运行时才决定给他们分配多少内存。如果程序在动态分配缓冲区放入太多的数据会有什么现象?它溢出了,漏到了别的地方。一个缓冲区溢出应用程序使用这个溢出的数据将汇编语言代码放到计算机的内存中,通常是产生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语言中,静态变量是分配在数据段中的,动态变量是分配在堆栈段的。缓冲区溢出是利用堆栈段的溢出的。一个程序在内存中通常分为程序段,数据端和堆栈三部分。程序段里放着程序的机器码和只读数据,这个段通常是只读,对它的写操作是非法的。数据段放的是程序中的静态数据。动态数据则通过堆栈来存放。在内存中,它们的位置如下:

/――――――――\ 内存低端
|程序段|
|―――――――――|
|数据段|
|―――――――――|
|堆栈|
\―――――――――/内存高端

堆栈是内存中的一个连续的块。一个叫堆栈指针的寄存器(SP)指向堆栈的栈顶。堆栈的底部是一个固定地址。堆栈有一个特点就是,后进先出。也就是说,后放入的数据第一个取出。它支持两个操作,PUSH和POP。PUSH是将数据放到栈的顶端,POP是将栈顶的数据取出。在高级语言中,程序函数调用和函数中的临时变量都用到堆栈。参数的传递和返回值是也用到了堆栈。通常对局部变量的引用是通过给出它们对SP的偏移量来实现的。另外还有一个基址指针(FP,在Intel芯片中是BP),许多编译器实际上是用它来引用本地变量和参数的。通常,参数的相对FP的偏移是正的,局部变量是负的。当程序中发生函数调用时,计算机做如下操作:首先把参数压入堆栈;然后保存指令寄存器(IP)中的内容,做为返回地址(RET);第三个放入堆栈的是基址寄存器(FP);然后把当前的栈指针(SP)拷贝到FP,做为新的基地址;最后为本地变量留出一定空间,把SP减去适当的数值。

下面举个例子:
example1.c:
------------------------------------------------------------
void function(int a, int b, int c) {
char buffer1[5];
char buffer2[10];
}

void main() {
function(1,2,3);
}
-----------------------------------------------------------

为了理解程序是怎样调用函数function()的,使用-S选项,在Linux下,用gcc进行编译,产生汇编代码输出:

$ gcc -S -o example1.s example1.c

看看输出文件中调用函数的那部分:

pushl $3
pushl $2
pushl $1
call function

这就将3个参数压到堆栈里了,并调用function()。指令call会将指令指针IP压入堆栈。在返回时,RET要用到这个保存的IP。在函数中,第一要做的事是进行一些必要的处理。每个函数都必须有这些过程:

pushl %ebp
movl %esp,%ebp
subl $20,%esp

这几条指令将EBP,基址指针放入堆栈。然后将当前SP拷贝到EBP。然后,为本地变量分配空间,并将它们的大小从SP里减掉。由于内存分配是以字为单位的,因此,这里的buffer1用了8字节(2个字,一个字4字节)。Buffer2用了12字节(3个字)。所以这里将ESP减了20。这样,现在,堆栈看起来应该是这样的。

低端内存高端内存
buffer2 buffer1 sfp ret a b c
< ------ [ ][ ][ ][ ][ ][ ][ ]
栈顶栈底

缓冲区溢出就是在一个缓冲区里写入过多的数据。那怎样利用呢,看
一下下面程序:

example2.c
-----------------------------------------------------------
void function(char *str) {
char buffer[16];

strcpy(buffer,str);
}

void main() {
char large_string[256];
int i;

for( i = 0; i < 255; i++)
large_string[i] = 'A';

function(large_string);
}
------------------------------------------------------------

这个程序是一个经典的缓冲区溢出编码错误。函数将一个字符串不经过边界检查,拷贝到另一内存区域。当调用函数function()时,堆栈如下:

低内存端buffer sfp ret *str高内存端
< ------ [ ][ ][ ][ ]
栈顶栈底

很明显,程序执行的结果是"Segmentation fault (core mped)"或类似的出错信息。因为从buffer开始的256个字节都将被*str的内容'A'覆盖,包括sfp, ret,甚至*str。'A'的十六进值为0x41,所以函数的返回地址变成了0x41414141, 这超出了程序的地址空间,所以出现段错误。可见,缓冲区溢出允许我们改变一个函数的返回地址。通过这种方式,可以改变程序的执行顺序。

热心网友 时间:2022-04-10 06:23

简单的说就是一个杯子就好象机器内存中的一个模块,杯子的水满了就要益出来,同理,内存中的数据满了也要益出,然后通过指针可以控制想运行的程序。

热心网友 时间:2022-04-10 07:58

攻击者向一个地址区输入这个区间存储不下的大量字符。在某些情况下,这些多余的字符可以作为执行代码来运行,因此足以使攻击者不受安全措施*而获得计算机的控制权。

热心网友 时间:2022-04-10 09:49

缓冲区溢出
语音解释.通俗易懂.
http://www.enet.com.cn/article/2005/0808/A20050808442559.shtml
缓冲溢出是什么意思啊?

缓冲溢出是一种网络安全漏洞,它会导致攻击者能够执行恶意代码或者篡改系统数据。缓冲区溢出是指在向缓冲区中读入数据时,在数据长度超过了缓冲区的容量时,会使得溢出部分的数据被存储到相邻的内存单元上,这就会导致意外的行为,如果攻击者利用了这种情况,就有可能对系统进行攻击。由于缓冲区溢出是一种常...

什么是缓冲区 溢出

而缓冲区溢出,简单的说就是计算机对接收的输入数据没有进行有效的检测(理想的情况是程序检查数据长度并不允许输入超过缓冲区长度的字符),向缓冲区内填充数据时超过了缓冲区本身的容量,而导致数据溢出到被分配空间之外的内存空间,使得溢出的数据覆盖了其他内存空间的数据。

什么叫缓冲区溢出

缓冲区是程序运行时计算机内存中的一个连续的块,它保存了给定类型的数据。问题随着动态分配变量而出现。为了不用太多的内存,一个有动态分配变量的程序在程序运行时才决定给他们分配多少内存。如果程序在动态分配缓冲区放入太多的数据会有什么现象?它溢出了,漏到了别的地方。一个缓冲区溢出应用程序使用这个溢出的数据将...

什么是缓冲区溢出堆栈

缓冲区溢出是指当计算机程序向缓冲区内填充的数据位数超过了缓冲区本身的容量。溢出的数据覆盖在合法数据上。理想情况是,程序检查数据长度并且不允许输入超过缓冲区长度的字符串。但是绝大多数程序都会假设数据长度总是与所分配的存储空间相匹配,这就为缓冲区溢出埋下隐患。操作系统所使用的缓冲区又被称为...

什么叫“缓冲区溢出”啊?谢谢

什么是缓冲区溢出 单的说就是程序对接受的输入数据没有进行有效的检测导致错误,后果可能造成程序崩溃或者执行攻击者的命令,详细的资料可以看unsecret.org的漏洞利用栏目 。缓冲区溢出的概念 缓冲区溢出好比是将十磅的糖放进一个只能装五磅的容器里……堆栈溢出(又称缓冲区溢出)攻击是最常用的黑客技术...

电脑的缓冲区是什么意思啊?它说有什么东西溢出.怎么解决?

缓冲区是解决数据延迟问题的,就是先读数据放在缓冲区,然后再写入磁盘等.溢出说明缓冲区过小,内存容量太小,或虚拟内存设置有问题,而且同时运行太多程序,系统资源耗尽 建议 1 加条内存 2 虚拟内存设置到物理内存的1.5倍,右键 我的电脑-》属性--》高级--》,在性能--设置中设置虚拟内存 3 ...

什么是缓冲区溢出

缓冲区溢出是指当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量溢出的数据覆盖在合法数据上,理想的情况是 程序检查数据长度并不允许输入超过缓冲区长度的字符,但是绝大多数程序都会假设数据长度总是与所分配的储存空间想匹配,这就为缓冲区溢出埋下隐患.操作系统所使用的缓冲区又被称为堆栈. 在...

缓冲区溢出的基本原理是什么

缓冲区溢出(buffer overflow),针对程序设计缺陷,向程序输入缓冲区写入使之溢出的内容(通常是超过缓冲区能保存的最大数据量的数据),从而破坏程序运行、趁著中断之际并获取程序乃至系统的控制权。原理:通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,造成程序崩溃或使...

什么叫做缓冲区溢出

造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数。例如下面程序: void function(char *str) { char buffer[16]; strcpy(buffer,str); } 上面的strcpy()将直接把str中的内容copy到buffer中。这样只要str的长度大于16,就会造成buffer的溢出,使程序运行出错。存在象strcpy这样的问题的标准函数...

缓冲区溢出攻击的1.简介

缓冲区溢出是指当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量,溢出的数据覆盖在合法数据上。理想的情况是:程序会检查数据长度,而且并不允许输入超过缓冲区长度的字符。但是绝大多数程序都会假设数据长度总是与所分配的储存空间相匹配,这就为缓冲区溢出埋下隐患。操作系统所使用的缓冲区,又被...

可靠缓冲区溢出 缓冲区溢出怎么处理 缓冲区溢出的作用 c语言缓冲区溢出什么意思 缓冲溢出漏洞攻击分析 ctfmon堆栈缓冲区溢出 系统检测到缓冲区溢出 计算机监控缓冲区溢出 电脑溢出缓冲区开不了机
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
ipad propro现在的报价是多少钱? 为什么用联想扬天T5900V型的配置的电脑打街头篮球卡得要死 联想杨天T5900v这台电脑 联想扬天T5900V的问题 联想扬天威M5900d 1899元特惠:1T硬盘+4年上门售后,性能如何? 英尺,英尺,寸,英寸,尺寸的 ,关系 我的E家用户怎么进入这个页面? 尿酸高为什么不能喝纯净水 怎么用我的E家无线上网? 长时间饮用纯净水会引起人,体,尿酸,高吗 10月当季水果 地球百子宇宙飞船上的人都死了嘛?女主角的妈妈死了吗 日语N2成绩查询网站? 谁知道2009年7月份的日语等级考试的成绩出来了没,在哪里查呀? 2014好看的美剧,求介绍 这个是谁?地球百子没有她啊! 美剧地球百子里太空站里总共多少人 有谁知道地球百子第六季第六集剧尾,女主角躺在床上按mp3,放的音乐名字, 不是? 有没有人推荐几本好看的末世小说,男主只喜欢一个女主的那种,不要种马? 如何评价美剧《地球百子》 地球百子怎么样 美剧地球百子好看吗?正打算追新剧,有什么推荐吗?不要喜剧! 地球百子中女主角克拉克的扮演者叫什么 地球百子中女主角克拉克的扮演者叫什么? 真爱如血和地球百子的女主角是一个人吗 有没有看过地球百子,看过的推荐一部类似的电影或者电视剧,请附上图片和简介 为什么好多人都不喜欢地球百子的女主 《地球百子》是双女主吗 地球百子女主最后和谁 什么样的花露水驱蚊效果最好? Material Girl怎么切换成中文 网上税务大厅 变更税务登记 怎样在网上税务网站更改办公地址 深圳市税务局网上办理变更基本户怎么操作 跪求下联,上联是:上阿迪、下耐克、背背背靠背。大师们快来帮帮忙啊!谢谢啦! 穿着耐克和阿迪歌词 歌词内容中《穿着阿迪耐克》叫什么歌了? 耐克阿迪混穿 耐克阿迪穿惯了 手表项链想换了 下一句是啥??? 有一句话叫 穷耐克,富阿迪,土豪一身阿玛尼。我就觉得奇怪,为啥穿耐克的反而是穷了?而阿迪是富? 《活着》这首歌里,“他们拿着苹果手机,他们穿着耐克阿迪”什么意思? 每天站在高楼上 看着地上的小蚂蚁 它们的头很大 它们的腿很细 它们拿着苹果手机 它们穿着耐克阿迪 你穿的是耐克阿迪我穿的是老北京这是哪一首歌里的 上身阿迪下身阿迪鞋子耐克穿出去回头率高吗? 穿的起阿迪,踩的起耐克 《活着》这首歌里的穿着耐克阿迪是什么意思 为什么要穿耐克,阿迪达斯? 耐克和阿迪可以一起穿吗 请问大学那些全身都穿真阿迪,耐克的同学家里都是很有钱有个几百万国千万的吗?谁知道的回答一下啊? 他们脚上穿的是耐克和阿迪