缓冲区溢出攻击的原理分析与防范
缓冲区溢出攻击

缓冲区溢出攻击网络安全实验报告实验名称:缓冲区溢出攻击姓名:王嘉琳学号:090342228指导教师:付宇一、实验目的1.了解缓冲区溢出攻击的现象2.掌握使用缓冲区溢出攻击工具的方法二、实验环境系统环境:Windows网络环境:交换网络结构实验工具:ms06035漏洞利用工具、ms08025漏洞利用工具、ms06063补丁、ms08025补丁三、实验实际完成内容及结果分析利用ms06035漏洞进行攻击1.进入“ms06035漏洞利用工具”目录主机A单击工具栏中“ms06035工具”按钮,进入“ms06035漏洞利用工具”工作目录。
2.查看当前目录内容主机A用dir命令查看当前目录中的内容,如下图所示:上图中标注的“ms06035.exe”即为ms06035漏洞攻击工具。
3.查看“ms06035工具”的使用方法主机A执行“ms06035.exe”命令,提示ms06035漏洞利用工具的使用方法,如下图所示:4.使用“ms06035工具”进行攻击主机A执行“ms06035.exe 主机B的ip445”命令,发起对主机B的攻击。
5.主机B观察被攻击现象主机B被攻击后出现蓝屏死机的现象(实验结束,主机B用虚拟机“快照X”恢复实验环境)。
利用ms08025漏洞进行攻击以下步骤两主机互相攻击对方,操作相同,故以主机A为例说明实验步骤。
「注」将“C:\ExpNIS\NetAD-Lab\Tools\OverFlow\RemoteOverflow”目录下的“ms08025.exe”复制到D盘的根目录下,以便实验下一步进行。
1.telnet登录系统(1)主机A在命令行下使用telnet登录同组主机,登录账号为“student”,密码为“123456”,登录成功如下图。
(2)主机A依次输入“d:”|“dir”查看同组主机D盘根目录,“ms08025.exe”即为实验工具。
2.使用系统命令添加用户主机A使用“net user student1 /add”命令来试添加一个用户“student1”,执行该命令,出现“发生系统错误5,拒绝访问”的提示,如下图所示:请解释出现上述现象的原因:当前用户为普通用户,普通用户没有添加用户的权限。
缓冲区溢出攻击与防御措施

龙源期刊网
缓冲区溢出攻击与防御措施
作者:高永仁
来源:《计算机时代》2008年第01期
摘要:缓冲区溢出是最常见的安全漏洞,针对缓冲区溢出进行攻击,是很常见的攻击手段,它可以使本地用户获得超级用户权限,也可以让外部攻击者通过网络直接进入系统。
文章主要介绍缓冲区溢出的基本原理及防范措施。
关键词:安全漏洞;缓冲区溢出;攻击手段;用户权限
0引言
针对各种软件中存在的缓冲溢出漏洞,进行相应的攻击,可以破坏栈中的内容,导致程序控制的转移,达到攻击的目的。
所谓缓冲,就是一段存放数据的连续内存,如数组。
由于许多系统程序、应用程序都是用c编写的,所以下面将以c语言为例来说明缓冲溢出。
1缓冲区溢出的基本原理
注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。
远程缓冲区溢出攻击及防护

21 0 0年 1 1月
No . 2 0 v 01
远 程缓 冲 区溢 出攻 击 及 防 护
张之 刚 , 周 宁 , 霜 霞 , 坚松 , 浩 牛 莫 刘
( 河南 电力试验研究 院, 郑州 40 5 ) 5 0 2
摘
要 : 绍 了 Ln x系统 下缓 冲 区溢 出的 原 理 和 se cd 介 i u hl oe具体 实现 方 法 。 阐述 了远 程 l
c i e c d a d a ay e t c to sf m ea p c fS c e sr t . h h I o e h sb e e td h n o e, n n l z sat k meh d o t s e t c s ae T e s e I d a e n tse a r h o u c
ZHANG h — a g, HOU n NI h a g xa, Z ig n Z Ni g, U S u n — i
MO Ja —o g L U Ha in s n , I o
缓冲区溢出原因及解决

第三讲缓冲区溢出n1 缓冲区溢出问题简介n2 几种典型的缓冲区溢出n3 防范措施缓冲区溢出1 缓冲区溢出问题简介缓冲区溢出是一种常见的漏洞.据统计,通过缓冲区溢出进行的攻击占所有系统攻击总数的80%以上.这种错误的状态发生在写入内存的数据超过了分配给缓冲区的大小的时候,就像一个杯子只能盛一定量的水,如果放到杯子中的水太多,多余的水就会一出到别的地方。
由于缓冲区溢出,相邻的内存地址空间被覆盖,造成软件出错或崩溃。
如果没有采取限制措施,可以使用精心设计的输入数据使缓冲区溢出,从而导致安全问题。
缓冲区溢出缓冲区溢出问题的历史很长一段时间以来,缓冲区溢出都是一个众所周知的安全问题, C程序的缓冲区溢出问题早在70年代初就被认为是C语言数据完整性模型的一个可能的后果。
这是因为在初始化、拷贝或移动数据时,C语言并不自动地支持内在的数组边界检查。
虽然这提高了语言的执行效率,但其带来的影响及后果却是深远和严重的。
•1988年Robert T. Morris的finger蠕虫程序.这种缓冲区溢出的问题使得Internet几乎限于停滞,许多系统管理员都将他们的网络断开,来处理所遇到的问题. •1989年Spafford提交了一份关于运行在VAX机上的BSD版UNIX的fingerd的缓冲区溢出程序的技术细节的分析报告,引起了部分安全人士对这个研究领域的重视•1996年出现了真正有教育意义的第一篇文章, Aleph One在Underground发表的论文详细描述了Linux系统中栈的结构和如何利用基于栈的缓冲区溢出。
缓冲区溢出Aleph One的贡献还在于给出了如何写开一个shell的Exploit的方法,并给这段代码赋予shellcode的名称,而这个称呼沿用至今,我们现在对这样的方法耳熟能详--编译一段使用系统调用的简单的C程序,通过调试器抽取汇编代码,并根据需要修改这段汇编代码。
•1997年Smith综合以前的文章,提供了如何在各种Unix变种中写缓冲区溢出Exploit更详细的指导原则。
缓冲区溢出攻击实验报告

缓冲区溢出攻击实验报告班级:10网工三班学生姓名:谢昊天学号:1215134046实验目的和要求:1、掌握缓冲区溢出的原理;2、了解缓冲区溢出常见的攻击方法和攻击工具;实验内容与分析设计:1、利用RPC漏洞建立超级用户利用工具scanms.exe文件检测RPC漏洞,利用工具软件attack.exe对172.18.25.109进行攻击。
攻击的结果将在对方计算机上建立一个具有管理员权限的用户,并终止了对方的RPC服务。
2、利用IIS溢出进行攻击利用软件Snake IIS溢出工具可以让对方的IIS溢出,还可以捆绑执行的命令和在对方计算机上开辟端口。
3、利用WebDav远程溢出使用工具软件nc.exe和webdavx3.exe远程溢出。
实验步骤与调试过程:1.RPC漏洞出。
首先调用RPC(Remote Procedure Call)。
当系统启动的时候,自动加载RPC服务。
可以在服务列表中看到系统的RPC服务。
利用RPC漏洞建立超级用户。
首先,把scanms.exe文件拷贝到C盘跟目录下,检查地址段172.18.25.109到172.18.25.11。
点击开始>运行>在运行中输入cmd>确定。
进入DOs模式、在C盘根目录下输入scanms.exe 172.18.25.109-172.18.25.110,回车。
检查漏洞。
2.检查缓冲区溢出漏洞。
利用工具软件attack.exe对172.18.25.109进行攻击。
在进入DOC 模式、在C盘根目录下输入acctack.exe 172.18.25.109,回车。
3,利用软件Snake IIS溢出工具可以让对方的IIS溢出。
进入IIS溢出工具软件的主界面.IP:172.18.25.109 PORT:80 监听端口为813单击IDQ溢出。
出现攻击成功地提示对话框。
4.利用工具软件nc.exe连接到该端口。
进入DOs模式,在C盘根目录下输入nc.exe -vv 172.18.25.109 813 回车。
缓冲区溢出攻击的工作原理及防范策略

服 务病毒黑客图1 计算机程序内存存放示意图为了搞清楚“黑客”基于缓冲区溢出漏洞攻击的工作原理,我们先来分析一下计算机程序在内存中的存储和运行方式,计算机程序在内存中通常分为[1]程序段、数据段和堆栈部分,其具体存放策略如图示,程序段存放的是可执行的二进制机器代码或者只读数据,这个段的内容只允许读或者执行操作,不允许写服 务病毒黑客操作如下:首先把参数‘c’,’b’,’a’压入堆栈;然后保存指令寄存器(I P)中的内容,作为返回地址(R E T);第三个放入堆栈的是基址寄存器(F P);接着把当前的栈指针(S P)拷贝到F P,作为新的基地址;最后为函数变量留出一定空间,把S P减去适当的数值,使其指向局部变量的位置;执行完上述函数调用操作后,程序转到函数中继续执行,此时堆栈中的数据如图2所示。
图2 堆栈工作原理示意图函数执行完毕后,执行出栈操作,其中最主要的是将r e t送到I P中[3],正常执行此操作会使程序返回到函数调用指令的下一条指令,继续程序的正常执行,不会产生缓冲区的溢出,那么什么情况下会产生缓冲区的溢出呢?让我们来分析一下面的程序。
Buffer_overflow.c void function(char *str){ char buffer[16]; strcpy(buffer,str);}void main(){ char large_str [512];int i; for( i = 0; i < 512; i++) large_str [i] = \'A\'; function(large_str); }在程序Buffer_overflow.c执行过程中,当调用函数function时,函数将字符串*str不经过边界检查,直接拷贝到内存区域buffer[16]。
此时堆栈结果如图3所示:首先将参数*str压入堆栈,占用512字节的内存,接着将返回地址将指令寄存器IP中的返回地址ret入栈,然后将基址指针FP入栈,最后分配16字节的函数局部变量存储空间,随后程序转入function执行,当执行完strcpy(buffer,str)指令后,溢出产生了,程序执行的结果是从buffer开始的512个字节都将被*str的内容\'A\'覆盖,包括基址指针SFP和程序返回地址ret,甚至部分*str的内容。
缓冲区溢出攻击与防范

个后进先出的队列 ,它 的生长方向与 内存 的生长 方向正好相
反。 缓冲区溢出就是向堆栈 中分配的局邮数据块中写入 了超 出其
件 开 发过 程 中 防 范缓 冲 区溢 出攻 击 的措 施 。
【 关键 词 】缓 冲 区 溢 出 数 组 边 界 检 查 代 码植 入
1 引 言
缓冲区溢 出是一种在各种操作 系统 、 应用软件 中广泛存在且 危险的漏洞 , 利用缓冲区溢出发起的黑客攻击可以导致程序运行
目标 : 在程 序的地址空间 里安排适 当的代码 ; 过适当地初始化 通
4 0
2 6 蠹2期 0年 2 o Nhomakorabea维普资讯
责任编辑: 翌 姚
通 信 论 坛
0 f ̄” o e 来恢复检验点 。如果攻 击者能够进入缓 冲区空 间 , 么 u ) 那 “ nj (u e ” l g b f r 实际上是跳转到攻击 者的代码。象函数指针一 o mp )
3 利 用 缓 冲 区溢 出进 行 攻 击 的 方 式
缓冲区溢出攻击的 目的在于扰乱正在运行 的程序 , 使攻击者 取得该程 序的控 制权 , 果该程序具有足 够的权 限 , 如 那么整个主
机就被控制了。为了达到这 个 目的, 攻击 者必须达 到如下的 2个
收稿 日期 :0 6 0 — 6 20— 92
函数指针可以 用来定位任何地址空间 , 所以攻击者 只需在 任 何空 间内的函数指针附近找到 1 个能够溢 出的缓冲 区 。 过溢 出 通 这个缓冲 区来改变 函数的指针 ,当程序通 过函数 指针调 用函数
缓冲区溢出攻击详细讲解

缓冲区溢出攻击详细讲解缓冲区溢出(Buffer Overflow)是计算机安全领域既经典而又古老的话题。
随着计算机系统安全性的加强,传统的缓冲区溢出攻击方式可能变得不再奏效,相应的介绍缓冲区溢出原理的资料也变得“大众化”起来。
其中看雪的《0day安全:软件漏洞分析技术》一书将缓冲区溢出攻击的原理阐述得简洁明了。
本文参考该书对缓冲区溢出原理的讲解,并结合实际的代码实例进行验证。
不过即便如此,完成一个简单的溢出代码也需要解决很多书中无法涉及的问题,尤其是面对较新的具有安全特性的编译器——比如MS的Visual Studio2010。
接下来,我们结合具体代码,按照对缓冲区溢出原理的循序渐进地理解方式去挖掘缓冲区溢出背后的底层机制。
一、代码 <=> 数据顾名思义,缓冲区溢出的含义是为缓冲区提供了多于其存储容量的数据,就像往杯子里倒入了过量的水一样。
通常情况下,缓冲区溢出的数据只会破坏程序数据,造成意外终止。
但是如果有人精心构造溢出数据的容,那么就有可能获得系统的控制权!如果说用户(也可能是黑客)提供了水——缓冲区溢出攻击的数据,那么系统提供了溢出的容器——缓冲区。
缓冲区在系统中的表现形式是多样的,高级语言定义的变量、数组、结构体等在运行时可以说都是保存在缓冲区的,因此所谓缓冲区可以更抽象地理解为一段可读写的存区域,缓冲区攻击的最终目的就是希望系统能执行这块可读写存中已经被蓄意设定好的恶意代码。
按照冯·诺依曼存储程序原理,程序代码是作为二进制数据存储在存的,同样程序的数据也在存中,因此直接从存的二进制形式上是无法区分哪些是数据哪些是代码的,这也为缓冲区溢出攻击提供了可能。
图1 进程地址空间分布图1是进程地址空间分布的简单表示。
代码存储了用户程序的所有可执行代码,在程序正常执行的情况下,程序计数器(PC指针)只会在代码段和操作系统地址空间(核态)寻址。
数据段存储了用户程序的全局变量,文字池等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
随着信息与网络技术的发展,以及这些技术在军事领域 的不断渗透,计算机网络已成为连接未来信息化战场的枢纽 。对计算机的攻击,能够获得大量宝贵的情报以及达到其它 武器系统所不能及的效果。因此对以计算机为基础的网络攻 击与防护就自然成为军事领域密切关注的问题。近年来,缓 冲区溢出漏洞的广泛性和破坏性受到国内外信息安全研究领 域的极切关注。从1988年CERT(计算机紧急响应小组)成立以 来,统计到的安全威胁事件每年以指数增长。缓冲区溢出攻 击作为网络攻击一种主要形式占所有系统攻击总数的80%以 上[1]。这种缓冲区溢出漏洞可以发生在不同的操作系统以及 不同的应用程序上。
中发生函数调用时,计算机做如下操作:首先把参数压入堆栈;然后
保存指令寄存器(IP)中的内容,作为返回地址(RET);第三个放入堆栈
的是基址寄存器(FP);然后把当前的栈指针(SP) 拷贝到FP,作为新
的基地址;最后为本地变量留出一定空间,把SP减去适当的数值。
•
缓冲区溢出攻击作为一种主流的攻击手法,早在20世纪80年代,国外就有人开始
讨论溢出攻击,例如1988年的Morris蠕虫,利用的攻击方法之一就是Fingerd的缓冲区
溢出,这次蠕虫攻击导致全球6000多台机器被感染,损失巨大,由此,缓冲区溢出问
题逐渐得到人们的重视。1989年,Spafford提交了一份分析报告,描述了VAX机上的
据取出。
•
在高级语言中,程序函数调用和函数中的临时变量都用到堆栈
,参数的传递和返回值时也用到了堆栈,通常对局部变量的引用是通
过给出它们对SP的偏移量来实现的。另外还有一个基址指针(FP,
在Intel芯片中是BP),许多编译器实际上是用它来引用本地变量和参
数的。通常,参数的相对FP的偏移是正的,局部变量是负的。当程序
2021/2/22
5
比如
这样 或许 你还 不明 白?
2021/2/22
6
堆栈的定义
•
堆栈是内存中的一个连续的块。一个叫堆栈指针的寄存器(SP)
指向堆栈的栈顶,堆栈的底部是一个固定地址。堆栈有一个特点就是
,后进先出。也就是说,后放入的数据第一个取出。它支持两个操作
,PUSH和POP。PUSH是将数据放到栈的顶端,POP是将栈顶的数
该文介绍了Windows CE内存管理,进程等基础知识,初步讨论了Windows CE的缓冲
区溢出问题,只是对Shellcode的解码效率不高。
2021/2/22
4
缓冲区溢出原理概述
• 缓冲区溢出的概念 • 缓冲区是内存中存放数据的地方,一般来说,它是“包
含相同数据类型的实例的一个连续计算机内存块”[5],它 保存了给定类型的数据。在C和C++中,缓冲区通常是使 用数组和诸如malloc()和new这样的内存分配例程来实现 的。最常见的缓冲区种类是简单的字符数组。 • 缓冲区溢出是指当计算机向缓冲区内填充数据位数时超 过了缓冲区本身的容量,使得溢出的数据覆盖在合法数据 上,理想的情况是程序检查数据长度并不允许输入超过缓 冲区长度的字符,但是绝大多数程序都会假设数据长度总 是与所分配的储存空间相匹配,这就为缓冲区溢出埋下隐 患。操作系统所使用的缓冲区又被称为“堆栈”.。在各个操 作进程之间,指令会被临时储存在“堆栈”当中,“堆栈”也 会出现缓冲区溢出。
3、缓冲区溢出的防御方法
3.1、写正确的代码的方法 3.2、通过操作系统使得缓冲区不可执行,从而阻止攻击者植入攻击代码 3.3、利用编译器的数组边界检查来实现缓冲区的保护 3.4、在程序指针失效前进行完整性检查
4、总结与展望
4.1全文总结
4.2 展望
5、参考文献 2021/2/22
2
本课题的研究意义
详细地介绍了如何利用Windows的溢出,他提出了利用栈指针的方法来完成跳转,返
回固定的指向地址,不论是在出问题的程序中还是在动态链接库中,该固定地址都包
含了用来利用栈指针完成跳转的汇编指令,这是缓冲区溢出利用一个重大的进步。
•
在国内,这方面技术的研究起步较晚,2000年左右,才有部分安全人士和黑客开始
缓冲区溢出的原理和过程,并介绍了一些常用的攻击方法。
在此基础上,论文研究并总结了目前防御缓冲区溢出攻击的
一些常用方法,主要从主客观两方面来讨论。主观方面,主
要是要提高程序员编写代码的质量,形成良好的编程风格;
客观方面,主要是从系统和软件做一些相关的检查和优化。
2021/2/22
3
缓冲区溢出国内外研究现状
ห้องสมุดไป่ตู้
BSD版unix的Fingerd的缓冲区溢出程序的技术细节,从而引起了一部分安全人士对这
个研究领域的重视。1996年AlephOne详细的描述了Linux系统中栈的结构和如何利用
基于栈的缓冲区溢出。1997年,Smith综合以前的文章,提供了如何在各种Unix家庭中
写缓冲区溢出Exploit更详细的指导原则。1998年来自“Cult of the Dead cow”的Dildog
研究这个领域,最早中联绿盟的袁仁广做过一些工作,他使用暴力探索的办法来获取
kernel32.dll的基址,代码量太多,也不够准确,2003年安全焦点峰会上Flashsky做了
关于堆溢出的演讲[3],总结了堆溢出漏洞利用的方法。2005年San写了关于如何溢出
Windows CE的文章[4],Windows CE是PDA和手机上使用非常广泛的嵌入式操作系统,
缓冲区溢出攻击的原理分析与防范
2021/2/22
1
主要目录
1、前言
1.1本课题的研究意义 1.2缓冲区溢出国内外研究现状
2、缓冲区溢出原理概述
2.1、缓冲区溢出的概念 2.2、堆栈的定义 2.3 缓冲区溢出攻击原理 2.4 缓冲区溢出攻击方式 2.4.1在程序的地址空间里安排适当的代码的方法 2.4.2控制程序转移到攻击代码的方法 2.5缓冲区溢出影响及危害
•
缓冲区溢出攻击是黑客攻击的主要手段,给网络信息安全
带来了越来越大的危害。已有的防御手段研究相对滞后,目
前国内外的研究大多集中在某个具体漏洞的利用与防范上,
缺乏全面的研究。并且现有的缓冲区溢出防御手段也存在诸
多不足之处。论文主要是对缓冲区溢出攻击的原理分析与防
范进行深入研究。
•
论文首先介绍了缓冲区和堆栈的基本概念,研究并总结了