2024年4月12日发(作者:)
1.什么是缓冲区溢出?
~~~~~~~~~~~~~~~~~~~
buffer overflow,buffer overrun,smash the stack,trash the stack,
scribble the stack, mangle the stack,spam,alias bug,fandango on core,
memory leak,precedence lossage,
指的是一种系统攻击的手段,通过往程序的缓冲区写超出其长度的内容,造成缓冲区
的溢出,从而破坏程序的堆栈,使程序转而执行其它指令,以达到攻击的目的。据统计,
通过缓冲区溢出进行的攻击占所有系统攻击总数的80%以上。 造成缓冲区溢出的原因是
程序中没有仔细检查用户输入的参数。例如下面程序:
example1.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()等。当然,随便往缓冲区中填东西造成它溢出一般只会出现
Segmentation fault 错误,而不能达到攻击的目的。最常见的手段是通过制造缓冲区溢
出使程序运行一个用户shell,再通过shell执行其它命令。如果该程序属于root且有
suid权限的话,攻击者就获得了一个有root权限的shell,可以对系统进行任意操作
了。请注意,如果没有特别说明,下面的内容都假设用户使用的平台为基于Intelx86
CPU的Linux系统。对其它平台来说,本文的概念同样适用,但程序要做相应修改。
2.制造缓冲区溢出
~~~~~~~~~~~~~~~~
一个程序在内存中通常分为程序段,数据端和堆栈三部分。程序段里放着程序的机器
码和只读数据。数据段放的是程序中的静态数据。动态数据则通过堆栈来存放。在内存
中,它们的位置是:
+------------------+ 内存低端
发布者:admin,转转请注明出处:http://www.yc00.com/web/1712932591a2150585.html
评论列表(0条)