缓冲区溢出
缓冲区溢出目录[隐藏]1.概念2.危害3.缓冲区攻击一. 缓冲区溢出的原理二、缓冲区溢出的漏洞和攻击三、 缓冲区溢出攻击的实验分析四、缓冲区溢出攻击的防范方法1.概念 2.危害 3.缓冲区攻击 一.
缓冲区溢出目录[隐藏]
1.概念
2.危害
3.缓冲区攻击一. 缓冲区溢出的原理
二、缓冲区溢出的漏洞和攻击
三、 缓冲区溢出攻击的实验分析
四、缓冲区溢出攻击的防范方法
1.概念
2.危害
3.缓冲区攻击 一. 缓冲区溢出的原理
二、缓冲区溢出的漏洞和攻击
三、 缓冲区溢出攻击的实验分析
四、缓冲区溢出攻击的防范方法
缓冲区溢出是一种非常普遍、非常危险的漏洞,在各种操作系统、应用软件中广泛存在。利用缓冲区溢出攻击,可以导致程序运行失败、系统宕机、重新启动等后果。更为严重的是,可以利用它执行非授权指令,甚至可以取得系统特权,进而进行各种非法操作。缓冲区溢出攻击有多种英文名称:buffer overflow,buffer overrun,smash the stack,trash the stack,scribble the stack, mangle the stack, memory leak,overrun screw;它们指的都是同一种攻击手段。第一个缓冲区溢出攻击--Morris蠕虫,发生在二十年前,它曾造成了全世界6000多台网络服务器瘫痪。
[编辑本段]1.概念
缓冲区溢出是指当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量溢出的数据覆盖在合法数据上,理想的情况是程序检查数据长度并不允许输入超过缓冲区长度的字符,但是绝大多数程序都会假设数据长度总是与所分配的储存空间相匹配,这就为缓冲区溢出埋下隐患.操作系统所使用的缓冲区 又被称为"堆栈". 在各个操作进程之间,指令会被临时储存在"堆栈"当中,"堆栈"也会出现缓冲区溢出。
[编辑本段]2.危害
在当前网络与分布式系统安全中,被广泛利用的50以上都是缓冲区溢出,其中最著名的例子是1988年利用fingerd漏洞的蠕虫。而缓冲区溢出中,最为危险的是堆栈溢出,因为入侵者可以利用堆栈溢出,在函数返回时改变返回程序的地址,让其跳转到任意地址,带来的危害一种是程序崩溃导致拒绝服务,另外一种就是跳转并且执行一段恶意代码,比如得到shell,然后为所欲为。
[编辑本段]3.缓冲区攻击
一. 缓冲区溢出的原理
通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其它指令,以达到攻击的目的。造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数。例如下面程序:
void function(char *str) {
char buffer[16];
strcpy(buffer,str);
}
上面的strcpy()将直接吧str中的内容copy到buffer中。这样只要str的长度大于16,就会造成buffer的溢出,使程序运行出错。存在象strcpy这样的问题的标准函数还有strcat(),sprintf(),vsprintf(),gets(),scanf()等。
当然,随便往缓冲