📄 通通透透讲溢出攻击.txt
字号:
发信人: Car (承受), 信区: Hacker
标 题: 通通透透讲溢出攻击
发信站: 哈工大紫丁香 (2001年12月30日21:55:37 星期天), 站内信件
中国E安网络联盟 Ahriman 发布
缓冲区溢出技术基础
在这里强调一下,想完全看的懂这篇文章,至少需要具备一定的汇编语言,C语言和LIN
UX的基础。
缓冲区溢出”在英文中可以解释为:buffer overflow,buffer overrun,smash the
stack,trash the stack,scribble the stack, mangle the stack, memory
leak,overrun screw;
我们通常所说的“溢出”指的是缓冲区溢出,(废话,不然要从那里溢出呀!)先解释
一下什么是缓冲区——缓冲区是内存中存放数据的地方,是程序运行时计算机内存中的
一个连续的块,它保存了给定类型的数据。问题随着动态分配变量而出现。为了不用太
多的内存,一个有动态分配变量的程序在程序运行时才决定给他们分配多少内存。当程
序试图将数据放到计算机内存中的某一位置,但没有足够空间时会发生缓冲区溢出。另
一种说法,就是说程序在动态分配缓冲区放入太多的数据会有什么现象?它会溢出,会
漏到了别的地方。
一个缓冲区溢出应用程序使用这个溢出的数据将汇编语言代码放到计算机的内存中,通
常是产生root权限的地方。单单的缓冲区溢出,并不会产生安全问题。只有将溢出送到
能够以root权限运行命令的区域才行。这样,一个缓冲区利用程序将能运行的指令放在
了有root权限的内存中,从而一旦运行这些指令,就是以root权限控制了计算机。
所以我们更多的时候把缓冲区溢出指的是一种系统攻击的手段,通过往程序的缓冲区写
超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其它指
令,以达到攻击的目的。据统计,通过缓冲区溢出进行的攻击占所有系统攻击总数的80
%以上。
世界上第一个缓冲区溢出攻击——著名的Morris蠕虫,发生在十年前,它曾造成了全世
界6000多台网络服务器瘫痪。我这是我所知的最早的缓冲区溢出攻击程序。
记住,造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数!!!
下面举一个最为常见的,也是最简单的溢出。
void function(char *str){
char buffer[16];
strcpy(buffer,str);
}
在这个例子中上面的buffer的长度被限制在16,而strcpy()将直接把str中的内容copy到
buffer中。这样只要str的长度大于16,就会造成buffer的溢出,使程序运行出错。So,
我们说这个程序溢出了。
在C语言中,静态变量是分配在数据段中的,动态变量是分配在堆栈段的。缓冲区溢出
是利用堆栈段的溢出的。一个正常的程序在内存中通常分为程序段,数据端和堆栈三部
分。程序段里放着程序的机器码和只读数据,这个段通常是只读,对它的写操作是非法
的。数据段放的是程序中的静态数据。动态数据则通过堆栈来存放。在内存中,它们的
位置如下:
。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -