网络攻防原理与技术课件最新版第10章缓冲区溢出攻击
网络攻击技术PPT课件

3、Tracert(Traceroute)命令:
命令格式: C:\> tracert [-d] [-h maximum_hops] [-j host-list]
[-w timeout] target_name 简单事例: C:\>tarcert Target
4、ipconfig命令:
命令格式:
注意必须指定适配器。
ipconfig命令(续):
5、netstat命令:
命令格式:
C:\> NETSTAT [-a] [-b] [-e] [-n] [-o] [-p proto] [-r] [-s] [-v] [interval]
参数:
(1)、-s——本选项能够按照各个协议分别显示其统计数据。如果你的应 用程序(如web浏览器)运行速度比较慢,或者不能显示web页之类的 数据,那么你就可以用本选项来查看一下所显示的信息。
NET USE {devicename | *} [password | *] /HOME NET USE [/PERSISTENT:{YES | NO}]
net use(续):
①、建立IPC$空连接:
IPC$(Internet Process Connection)是共享“命名管道”的 资源,它是为了让进程间通信而开放的命名管道,通过提供可信任的用户 名和口令,连接双方可以建立安全的通道并以此通道进行加密数据的交换, 从而实现对远程计算机的访问。
第十讲 攻击与应急响应PPT课件

3. 攻击的层次
一般来说,攻击可分为以下几个层次:
简单拒绝服务; 本地用户获得非授权读访问; 本地用户获得他们本不应该拥有的文件写权限; 远程用户获得了非授权的帐号; 远程用户获得了特许文件的读权限; 远程用户获得了特许文件的写权限; 远程用户拥有了根权限。
4. 攻击的工具
用户命令 脚本或程序 自治主体 工具箱 分布式工具 电磁泄漏
系统发布 漏洞暴露 发布不定
安全漏洞与系统攻击之间的关系是:
新漏洞出现
漏洞暴露 (可能的攻击) 发布补丁
1. 软件的Bug
软件的Bug主要分为以下几类: 缓冲区溢出 意料外的联合使用问题 不对输入内容进行预期检查 文件操作的顺序以及锁定等问题
2. 系统配置
系统配置不当主要有以下几种: 默认配置的不足 管理员的疏忽 临时端口 信任关系
直接检查法:通过直接观察来判断系统是否感染病毒。 特征代码法:☺准确快速、误报率低;不能检测未知病毒 校验和法:☺能发现未知病毒;不能识别病毒名,对隐蔽性病毒无效 行为监测法:☺具备发现未知病毒的能力;可能误报,实现较困难 软件模拟法:用软件方法模拟和分析程序的运行,能检测多态性病毒。
10.4.4 计算机病毒预防 选用正版的系统及软件并及时更新升级 安装杀毒软件并定期扫描 实施合理的安全配置 养成良好的操作习惯 定期检查您的系统 随时保持警惕
10.3.2 端口及端口扫描
端口就是潜在的通信通道。端口可分为:
知名端口:1~255;常见的网络服务都运行于这个端口范围; 受保护端口:256~1023;常见的系统服务都运行于这个端口范围; 用户定义端口(动态端口):1024~65535
通常,端口扫描有如下功能:
发现一个主机或网络的能力; 识别目标系统上正在运行的TCP和UDP服务; 识别目标系统的操作系统类型; 识别某个应用程序或某个特定服务的版本号; 发现系统的漏洞。
「网络安全」常见攻击篇(10)缓冲区溢出攻击

「网络安全」常见攻击篇(10)——缓冲区溢出攻击什么是缓冲区溢出攻击?▪缓冲区程序用来保存用户输入数据、程序临时数据的内存空间,本质为数组。
▪缓冲区溢出攻击攻击者利用程序漏洞,将自己的攻击代码植入有缓冲区溢出漏洞的程序执行体中,改变该程序的执行过程,来获取目标系统的控制权。
▪缓冲区溢出攻击原理程序员通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其它指令,以达到攻击的目的。
造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数。
缓冲区溢出的攻击方式▪栈溢出(stack smashing)未检查输入缓冲区长度,导致数组越界,覆盖栈中局部变量空间之上的栈桢指针%ebp以及函数返回地址retaddr, 当函数返回执行ret指令时,retaddr从栈中弹出,作为下一条指令的地址赋给%eip寄存器,继而改变原程序的执行流程指向我们的shellcode.▪堆溢出(malloc/free heapcorruption)一种是和传统的栈溢出一样, 当输入超出malloc()预先分配的空间大小,就会覆盖掉这段空间之后的一段存储区域,如果该存储区域有一个重要的变量比如euid,那么我就可以用它来攻击。
另一种是典型的double-free堆腐败,在内存回收操作中,合并相邻空闲块重新插入双向链表时会有一个写4字节内存的操作,如果弱点程序由于编程错误free()一个不存在的块,我们就可以精心伪造这个块,从而覆盖任何我们想要的值:函数的返回地址、库函数的.plt地址等▪格式化字符窜漏洞(format stringvulnerability)如果格式窜由用户定制,攻击者就可以任意伪造格式窜,利用*printf()系列函数的特性就可以窥探堆栈空间的内容,超常输入可以引发传统的缓冲区溢出,或是用”%n”覆盖指针、返回地址等。
▪整形变量溢出(integer variableoverflow)利用整数的范围、符号等问题触发安全漏洞,大多数整形溢出不能直接利用,但如果该整形变量决定内存分配等操作,我们就有可能间接利用该漏洞。
chap3-11-缓冲区溢出攻击-v2.1

缓冲区溢出攻击技术的内涵
程序缓冲区 溢出区
指针指向它外 直接植入代码
�
缓冲区溢出攻击技术
罗森林
信息安全与对抗技术实验室
内容
基本概念,分类 内存模型 工作原理 保护方法 攻击例程
背景
1988 年11月,在美国的一个大学里产生了第一个缓冲区溢出攻击 的例子:Morris蠕虫.它利用了系统OpenSSL 包的缓冲区溢出漏 洞来攻击网络服务器.该蠕虫在很短的时间内感染了美国6000 多
内存模型和工作原理
攻击代码植入目标程序地址空间 改写返回地址为攻击代码地址以获得程序控制权. 常见的缓冲区溢出攻击都是一次完成攻击代码植入和 程序转向攻击代码两种功能.
实际攻击方法
攻击代码中若含有0x00, 需要使用一些汇编程序设计技 巧, 把其转换成不含0x00 的等价代码. 在缓冲区前端填充几百字节NO P 指令, 只要猜测的地 址落在NO P 指令序列中, 仍可执行攻击代码, 从而成百 倍地增加猜中的机会. 当缓冲区太小, 缓冲区起址到返回地址的距离不足以容 纳攻击代码 时, 可以把攻击代码放在环境变量中, 并把 环境变量传入要攻击的程序中,仍然可以对有缓冲区溢 出漏洞的程序进行攻击.
–植入法 –利用已经存在的代码
缓冲区溢出的分类
激活记录
– 将程序调用返回地址指针指向攻击代码.
函数指针
– 函数指针可以定位任何地址空间,找到溢出空间.
长跳缓冲区
– 长跳可以指向任何地址空间
…
缓冲区溢出的保护方法
软件开发阶段
– 强制写正确的代码.C语言(及由其衍生而来的C++语言)本身的 不安全性.安全编程技术包括避免使用非安全的C函数,执行边界检 查,采用非执行堆栈技术等手段 – 避免使用非安全的C函数.如gets(),strcpy() – 采用非可执行堆栈技术,数据段和堆栈数据段地址空间不可执行. – 数组边界检查,对所有数组的读写操作都进行范围检查.如:字符 串的零结尾. – 程序指针完整性检查.程序指针完整性检查在程序指针被引用之前 检测到它的改变. – 改进C语言函数库 – 使堆栈向高地址方向增长 – 函数地址指针和其它数据地址的分离
缓冲区溢出攻击的原理分析与防范.完整版ppt资料

随着信息与网络技术的开展,以及这些技术在军事领域 的不断渗透,计算机网络已成为连接未来信息化战场的枢纽。 对计算机的攻击,能够获得大量珍贵的情报以及到达其它武 器系统所不能及的效果。因此对以计算机为根底的网络攻击 与防护就自然成为军事领域密切关注的问题。近年来,缓冲 区溢出漏洞的广泛性和破坏性受到国内外信息平安研究领域 的极切关注。从1988年CERT(计算机紧急响应小组)成立以来, 统计到的平安威胁事件每年以指数增长。缓冲区溢出攻击作 为网络攻击一种主要形式占所有系统攻击总数的80%以上[1]。 这种缓冲区溢出漏洞可以发生在不同的操作系统以及不同的 应用程序上。 缓冲区溢出攻击是黑客攻击的主要手段,给网络信息平安带来 了越来越大的危害。已有的防御手段研究相对滞后,目前国 内外的研究大多集中在某个具体漏洞的利用与防范上,缺乏 全面的研究。并且现有的缓冲区溢出防御手段也存在诸多缺 乏之处。论文主要是对缓冲区溢出攻击的原理分析与防范进 行深入研究。 论文首先介绍了缓冲区和堆栈的根本概念,研究并总结了缓冲 区溢出的原理和过程,并介绍了一些常用的攻击方法。在此 根底上,论文研究并总结了目前防御缓冲区溢出攻击的一些 常用方法,主要从主客观两方面来讨论。主观方面,主要是 要提高程序员编写代码的质量,形成良好的编程风格;客观 方面,主要是从系统和软件做一些相关的检查和优化。
该文介绍了Windows CE内存管理,进程等根底知识,初步讨论了Windows CE的缓冲
区溢出问题,只是对Shellcode的解码效率不高。
缓冲区溢出原理概述
• 缓冲区溢出的概念 • 缓冲区是内存中存放数据的地方,一般来说,它是“包
含相同数据类型的实例的一个连续计算机内存块〞[5],它 保存了给定类型的数据。在C和C++中,缓冲区通常是使 用数组和诸如malloc()和new这样的内存分配例程来实现 的。最常见的缓冲区种类是简单的字符数组。 • 缓冲区溢出是指当计算机向缓冲区内填充数据位数时超 过了缓冲区本身的容量,使得溢出的数据覆盖在合法数据 上,理想的情况是程序检查数据长度并不允许输入超过缓 冲区长度的字符,但是绝大多数程序都会假设数据长度总 是与所分配的储存空间相匹配,这就为缓冲区溢出埋下隐 患。操作系统所使用的缓冲区又被称为“堆栈〞.。在各 个操作进程之间,指令会被临时储存在“堆栈〞当中, “堆栈〞也会出现缓冲区溢出。
缓冲区溢出攻击原理及防范_XXX

缓冲区溢出攻击原理及防范作者姓名:XXX 班级:计算机网络XXX学号:2200951XXX 指导教师:XXX教授摘要缓冲区简单来说是一块连续的计算机内存区域,可以保存相同数据类型的多个实例, 缓冲区溢出是指当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量溢出的数据覆盖在合法数据上,理想的情况是程序检查数据长度并不允许输入超过缓冲区长度的字符,但是绝大多数程序都会假设数据长度总是与所分配的储存空间相匹配,这就为缓冲区溢出埋下隐患.操作系统所使用的缓冲区又被称为"堆栈". 在各个操作进程之间,指令会被临时储存在"堆栈"当中,"堆栈"也会出现缓冲区溢出。
缓冲区溢出是最常见的安全漏洞,针对缓冲区溢出的漏洞进行攻击,是很常见的攻击手段,可以使本地用户获得超级用户权限,也可以使外部攻击者通过网络直接进入系统。
本文详细分析了缓冲区溢出的基本原理,描述了利用缓冲区溢出漏洞进行攻击的基本方式,并通过对一段实例程序的溢出和构建攻击语句直观的演示了缓冲区溢出的形成过程及其攻击原理,最后提出了防范缓冲区溢出的有效措施。
关键词:缓冲区溢出堆栈漏洞AbstractSimply ,buffer is a continuous computer memory area, can keep the same data types of multiple instances, buffer overflow is when computer to the buffer filled with data f igures within the capacity of the buffer itself more than the data covered in legal spill data, the ideal situation is not allowed to check the data length program more than the length of the input buffer characters, but most of the program will be always with the assumption that data length distribution of storage space match, this is the buffer overf low buried hidden trouble. Operating system used by buffer is known as the "stack". I n between each operation process, the instructions will be temporarily stored in the "st ack" of "stack" also can appear buffer overflow. Buffer overrun is the most common s ecurity flaws in the buffer overflow vulnerability to attack, it is very common attack method, can make local users get super user permissions, also can make the external a ttackers through the network directly into the system.This paper analyzes the basic principle of buffer overflow, describes the use of buf fer overrun vulnerabilities to attack the basic way of, and through the example of a pr ogram and the construction of overflow attack statement intuitive demonstrates buffer overflow the forming process and the principle of attack, finally puts forward the cou ntermeasures of buffer overflow effective measures.Keywords:buffer overflow Stack shellcod目录摘要 (1)Abstract (2)绪论 (1)第一章缓冲区溢出基本原理 (2)1.1 栈缓冲区溢出 (2)1.2 HEAP/BSS缓冲区溢出 (4)1.2.1重要性 (4)1.2.2相关概念介绍 (4)1.2.3Heap/BSS溢出攻击 (5)第二章缓冲区溢出攻击 (8)2.1 shellcode基础 (9)2.2 可注入shellcode的编写 (11)2.3 远程缓冲区溢出威胁 (15)第三章缓冲区溢出攻击防御 (17)3.1 给有漏洞的程序打补丁 (17)3.2 编写安全的代码 (17)3.3 静态分析 (17)3.4 动态测试 (17)3.5软件开发过程中的防范策略 (18)3.6 缓冲区溢出攻击的抵御 (23)第四章缓冲区溢出攻击与防御实例设计 (25)4.1 缓冲区溢出攻击实例 (25)总结与展望 (27)致谢 (28)参考文献 (29)绪论随着计算机技术、现代通信技术和网络技术的发展,尤其是Internet的广泛使用,计算机网络与人们的工作和生活的联系越来越密切、越来越深入,同时也使网络系统的安全问题日益复杂和突出。
缓冲区溢出攻击原理

缓冲区溢出攻击原理一、缓冲区溢出攻击原理缓冲区溢出是一种非常普遍、非常危险的漏洞,在各种操作系统、应用软件中广泛存在。
利用缓冲区溢出攻击,可以导致程序运行失败、系统当机、重新启动等后果。
更为严重的是,可以利用它执行非授权指令,甚至可以取得系统特权,进而进行各种非法操作。
缓冲区溢出是一种系统攻击的手段,通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其它指令,以达到攻击的目的。
据统计,通过缓冲区溢出进行的攻击占所有系统攻击总数的80%以上。
知道了这个数据我非常震惊,以前进行的活动大都是找各方面的黑客软件然后学习这个软件怎么用,但是众所周知,攻击型的黑客软件都是各大杀毒软件的活靶子,基本上几天就不能用了,所以学习了这些软件的原理,我也能写几行代码,不再依赖黑客软件,就算汇编语言难掌握,也可以保存好常用的代码,其使用方法是比较简单的,下面是我学习的过程,由于没有经验,肯定有不少疏漏,也肯定不少地方绕了弯路,但自己学的过程中也获得了更多乐趣和收货时的喜悦,下面是具体介绍。
我用的是windows xp sp3编程软件是vc6.0。
还用到了olldbg2.0。
都是很常用的工具。
先介绍一下缓冲区溢出攻击的基础知识储备,进程内存空间是我最先接触的,现在看来也是最必要的基础,windows系统核心内存区间0xFFFFFFFF~0x80000000 (4G~2G)为Win32操作系统保留用户内存区间0x00000000~0x80000000 (2G~0G)堆: 动态分配变量(malloc), 向高地址增长进程使用的内存可以按照功能大致分成以下4 个部分。
(1)代码区:这个区域存储着被装入执行的二进制机器代码,处理器会到这个区域取指并执行。
(2)数据区:用于存储全局变量等。
(3)堆区:进程可以在堆区动态地请求一定大小的内存,并在用完之后归还给堆区。
动态分配和回收是堆区的特点。
网络安全5-缓冲区溢出攻击

攻击UNIX
第5章 第3节
UNIX操作系统简介
FreeBSD文件系统的路径组织结构
/ 根文件系统,用于存储系统内核,启动管理和其他文件系统的装载点。 /bin 系统启动时需要的一些通用可执行程序。 /cdrom 光盘驱动器的装载点。 /compat 与系统兼容有关的内容,如系统模拟等。 /dev 设备入口点。在UNIX系统上,每个设备都作为一个文件来看待,这里放着 所有系统能够用到的各个设备 /etc 各种配置文件。非常重要的一个目录,所有的配置文件(可以看成是 WINDOWS的注册表)包括用户密码文档等存放在这里 /mnt 软盘等其他文件系统的装载点。 /modules 内核可装载模块。
16个A 11
第5章 第2节
缓冲区溢出程序原理及要素
为了执行一段精心准备的程序,需要4个步 骤
准备一段SHELLCODE 申请一个缓冲区,并将机器码填入缓冲区的低
端 估算机器码在堆栈中的起始位置,并将这个位
置写入缓冲区的高端 将这个缓冲区作为系统一个有着缓冲区溢出错
误的程序的一个入口参数,并执行这个有错误 的程序
5
第5章 第1节
缓冲区溢出攻击的原理
Morris
1988年,美国康奈尔大学的计算机科学系研究 生、23岁的莫里斯利用Unix fingered程序不限 制输入长度的漏洞,输入512个字符后使缓冲器 溢出,同时编写一段特别大的恶意程序能以root (根)身份执行,并感染到其他机器上。它造 成全世界6000多台网络服务器瘫痪
6
第5章 第2节
缓冲区溢出程序原理及要素
缓冲区溢出程序的原理
众所周知,C语言不进行数组的边界检查 在许多C语言实现的应用程序中,都假定缓冲区
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
缓冲区溢出的根源
溢出的根源在于编程:如果缓冲区被写满,而 程序没有去检查缓冲区边界,也没有停止接收 数据,这时缓冲区溢出就会发生。
1996年,Elias Levy发表文章“Smashing the stack for fun and profit”,显示了很多程序都存在缓冲区溢出的危险。 缓冲区溢出攻击被广泛关注。
1999年,Dark spyrit AKA Barnaby jack提出使用系统核 心dll中的“jmp esp”指令完成shellcode跳转的想法,开创 了Win32平台下缓冲区溢出的新思路,大量windows平台 下缓冲区溢出漏洞被利用。
if(argc>1) copy(argv[1]); }
堆栈溢出示例代码3
sp
buffer[0]
Memory growth
buffer[511]
fptr
fp
previous fp
Return address
argv[1]
attack code
Stack growth
Shell Code
改变程序流程后希望得到Shell
堆栈溢出示例代码2
sp
buffer[0]
Memory growth
buffer[511]
fp
previous fp
Return address
argv[1]
attack code
Stack growth
堆栈溢出示例代码3
改变函数指针变量
堆栈溢出示例代码3
int good (const char* str) { …… }
堆栈顶部(内存低端) 堆栈底部(内存高端)
缓冲区溢出攻击的原理
攻击的原理:
通过往程序缓冲区写入超过其边界的内容,造 成缓冲区溢出,使得程序转而执行攻击者指定 的代码,通常是为攻击者打开远程连接的 ShellCode。
关键点:
存在能够被攻击的数据缓存 要有被执行的攻击代码
堆栈溢出原理
堆栈溢出代码1
的地方; Q的栈帧从保存的帧指针的值开始,后面是
保存的其他寄存器的值。
栈布局
假设有一个程序,其函数调用顺序如下: main() -> func_1() -> func_2() -> func_3()
C语言函数调用例子
void function(int a, int b, int c) {
char buffer1[5]; char buffer2[10]; } void main() { function(1,2,3); }
危害性和普遍性
40
35
Other errors
30
Buffer overflow
25
20
15
10
5
0 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002
安全漏洞数量(CERT)
危害性和普遍性
近年来,虽然缓冲区溢出漏洞的数量占比有 所减少,但仍然是一类危害性极大的、数量 众多的安全漏洞
2001年8月,“红色代码”利用微软IIS漏洞产生缓冲区存 溢出,成为攻击企业网络的“罪魁祸首”。
发展历史
2003年1月,Slammer蠕虫利用微软SQL漏洞产生缓冲区 溢出对全球互联网产生冲击。同年,“冲击波”蠕虫病毒 利用微软RPC远程调用存在的缓冲区漏洞对Windows 2000/XP、Windows Server 2003进行攻击,波及全球网络
Adresses hautes user stack frame
Adresses basses
缓冲区溢出攻击原理
缓冲区溢出的目的在于扰乱具有某些特权的 运行程序的执行流程,让攻击者取得程序的 控制权,两个步骤: (1)在程序的地址空间(堆栈、堆、BSS 段等)里植 入攻击代码,或植入攻击代码 所需的攻击参数(如果攻击代码已存在于 目标程序中); (2)改变程序的执行流程,转去执行攻 击代码
第 十 章 缓冲区溢出攻击
内容提要
1 缓冲区溢出概述 2 缓冲区溢出攻击原理 3 缓冲区溢出攻击防御措施
概念
缓冲区或缓存 (Buffer):用户为程序运行时在 计算机中申请得的一段连续的内存,它保存了给 定类型的数据。
缓冲区溢出(Buffer Overflow):计算机程序向 缓冲区内填充的数据位数超过了缓冲区本身的容 量,溢出的数据覆盖在合法数据上。
function(large_string); }
堆栈溢出示例代码1
Top of Stack
Top of Stack
Buffer (256 bytes)
Return Address Other variables
Attack
Malicious Input data from fget()
Other variables
内容提要
1 缓冲区溢出概述 2 缓冲区溢出攻击原理 3 缓冲区溢出攻击防御措施
三种内存分配模式(1)
静态分配:在进程创建时由系统一次性 分配的整块静态内存,这块空间在进程 运行期间保持不变。包括:
正文( TEXT)段:指令 数据( DATA)段:初始化的全局静态数据 BSS段:未初始化的全局数据 栈空间
退出Func函数后的返回地址
调用Func函数前的EBP
内存低地址 Func函数中的局部变量
最先压入栈 最后压入栈
函数调用过程
函数调用时堆栈处理规定
C语言默认方法
函数调用的栈帧变化
假设过程P调用过程Q:
Q的参数放在P的栈帧中; 当P调用Q时,P中的返回地址被压入栈中,
形成P的栈帧的末尾; 返回地址就是当程序从Q返回时应继续执行
攻击中,有2种是缓冲区溢出。而在1998年CERT的13 份建议中,有9份是是与缓冲区溢出有关的,在1999年 ,至少有半数的建议是和缓冲区溢出有关的。
危害性和普遍性
普遍性1999年,CERT安全建议中50% 以上同它有关。
严重性获得系统最高权限。 没有有效预防措施
C语言问题 程序员编程习惯,安全意识薄弱
缓冲区溢出攻击原理
代码注入攻击
攻击者向缓冲区写入的数据包含了攻击代 码(可执行的二进制代码,通常称为 “shellcode”),当发生缓冲区溢出时,溢 出的数据覆盖掉一个可执行程序的入口地 址(如函数的返回地址,函数指针变量等 等),使得该地址指向shellcode,从而当程 序试图通过该入口地址执行代码时,就会 执行攻击者的shellcode
C语言函数调用过程
按c、b、a的顺序将参数压栈; 把指令指针(IP)压栈,IP也称为返回地址
(RET); 把FP压栈,被保存的FP称为SFP; 将当前的SP复制到FP,成为新的帧指针; 将SP的值减小,为局部变量保留空间。
C语言函数调用过程
buffer2
buffer1
sfp ret a b c
首先把想要执行的代码放到我们想使其溢出的 缓冲区里;
然后覆盖函数的返回地址, 使其指向这个缓冲 区(希望执行的代码,通常是shell Code)
Shell Code
void main() {
char *str[2]={”/bin/sh”,0}; exec (“/bin/sh”,str,0); }
// 主函数
// 函数定义 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';
copy(char* msg) { int (*fptr)(const char* str); char buffer[512]; fptr = (int(*)(const char* str))good; strcpy(buffer, msg); (void)(*fptr)(buffer);
} main(int argc, char* argv[]){
2004年5月爆发的“振荡波”利用了Windows系统的活动 目录服务缓冲区溢出漏洞。
2005年8月利用Windows即插即用缓冲区溢出漏洞的“狙 击波”被称为史上最快利用微软漏洞进行攻击的恶意代码
2008年底至2009年的Conficker蠕虫利用的是Windows处理 远程RPC请求时的漏洞(MS08-067) 。
危害性和普遍性
缓冲区溢出漏洞可以使一个匿名的Internet用户有机会 获得一台主机的部分或全部的控制权。
缓冲区溢出攻击占了远程网络攻击的绝大多数,操作 系统中超过50%的安全漏洞都是由内存溢出引起的。
任何平台、任何程序都可能存在缓冲区溢出的漏洞。 1998年Lincoln实验室用来评点
进程运行时
实体生成者 操作系统
生命期
永久
进程 临时
进程申请/系 统实施
完全可控
访问方式
标识
标识
指针
内存布局
16
内存布局—不同区域
: 堆栈 保存调用程序的地址信息,所需要的变量,其它
帧指针等
执行时
: HEAP 动态内存分配,本地变量
分配
: BSS
符号块起始地址 :未初始化全局数据段,即:int foo; float baz;