版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验名称:RPCDCOM堆栈溢出实验实验要求:[实验目的]了解堆栈缓冲区溢出的基本原理及其危害。♦体会远程缓冲区溢出的常见攻击手法。树立安全编程的思想,从根本上杜绝缓冲区溢出的发生。[实验环境]网络:局域网环境。远程计算机操作系统:Windows2000Server◊补丁:\组件:\◊服务:\本地计算机操作系统:Windows2000主机软件:DCOMRPCExploit-GUIv2。[实验内容]利用RPCDCOM堆栈缓冲区溢出漏洞,对远程目标主机执行一次实际的缓冲区溢出攻击,获取远程Shell。溢出成功获取远程Shell之后,验证所获得的权限。获取远程主机的敏感信息。实验指导:运行实验工具目录下的RPCGUI.exe。
在"IPAddress"输入目标服务器的IP地址为"192.168.33.111"。在"OperatingSystem"中选择目标服务器的操作系统类型为"Windows2000(ALL)"。在"ExploitPort"中选择目标服务器开放的RPCDCOM端口,默认为135。在"ShellPort"中任意输入本地开放的监听端口(1024-65535),来等待远程服务器的反向连接。点击"Exploit"按钮发起远程溢出攻击。等待一会,如果溢出成功,将会获得一个CMDShell。在CmdShelI中进入C:\ServerData目录中,运行whoami程序来查看溢出之后所获得的权限。参考以下一些命令:oC:ocdc:\serverdataowhoami请将所有获得的信息写入实验报告。在CMDShelI窗口中输入一些Dos命令来获取远程主机的系统版本、主机名称,网络地址信息、端口连接状况,列举所有用户、管理员组用户,查看系统开放的服务。参考以下一些命令:overohostnameoipconfig/allonetstat-anonetuseronetlocalgroupadministratorsonetstart请将所有获得的信息写入实验报告。•试分析在该远程CmdShelI中还可以执行什么操作,认识缓冲区溢出的强大攻击性和危害。请将心得体会写入实验报告。实验原理:一.缓冲区溢出系统基础计算机程序就是计算机要执行的指令的集合。所有的程序都是用某种计算机语言来编写的。程序运行时,需要先经过编译、链接生成可执行的计算机能识别的机器指令,然后再加载到内存空间运行。计算机程序在内存空间的影像,可分为3个部分:文本(代码)区、数据区和堆栈区,如图1所示。其中•文本区用于保存程序执行的指令和只读数据,这些指令指出程序运行的流程。
数据区包括未初始化数据区(BSS)和已初始化数据区,前者用于存储静态分配的变量(static类型),后者用于存储程序的初始化数据。堆栈区用于实现程序流程的改变,包括堆和栈两个部分。其中,堆用于存储程序运行过程中动态分配的数据块(即调用malloc或calloc函数分配的内存);栈用于存储过程调用和函数调用所传递的参数、返回地址、局部变量等。U(Sl.inkJI:(E!i5>J|i.Ik»PiI V-fiU(Sl.inkJI:(E!i5>J|i.Ik»PiI V-fif-J内&魁矩hi敗据区刊希ij第用切图1程序在内存的基本影像在传统的程序设计中,通常借助过程调用和函数调用,改变程序运行的流程。每次进行过程和函数调用时,都要先将返回地址信息压入到堆栈中。过程和函数调用返回时,读取堆栈数据,获取返回地址,将程序的控制权交还给原来的程序,将程序重新定向到原来的流程中。在堆栈中,使用一种称为“栈帧”的数据结构保存返回地址信息。栈帧包含下列信息:传递给函数的参数、函数返回后下一条指令的地址、函数中分配的局部变量、恢复前一个栈帧所需的数据(基地址寄存器值)函数调用前,将栈帧内容压入栈中;函数调用后,将栈帧内容弹出,获取执行的下一条指令的地址。函数在栈中的内存影像如图2所示。函数中的局部变量调用函数前的曲卩调用函数后的返回地址传谨给函数的实参內存低地址內存高地址函数中的局部变量调用函数前的曲卩调用函数后的返回地址传谨给函数的实参內存低地址內存高地址图2函数在栈中的影像由图2可以看出,栈是从内存高地址向低地址增长的。也就是说,如果将数据压入,栈顶地址将减小;如果将数据弹出,栈顶地址将增加。在函数的栈帧中,函数局部变量占用的内存空间非常重要,通常,在函数中会使用类似“charbuffer[20]”之类的C语言语句定义一个缓冲区。向缓冲区填充数据时,首先填充低地址,然后填充高地址,其增长方向与栈的增长方向相反。如果向缓冲区填充的数据超过缓冲区的大小,那么它将继续向高地址填充数据,很可能覆盖掉“调用函数后的返回地址”,使得函数返回时,程序的执行顺序发生变化。缓冲区溢出攻击,就是通过向缓冲区填充过量的数据,覆盖“调用函数后的返回地址”,使函数的返回地址变成“攻击程序”的代码地址。这样,当函数返回时,程序的控制权将转到“攻击代码”,实现攻击目的。二.缓冲区溢出存在的条件缓冲区溢出的实质是存放在缓冲区中的数据越界,覆盖了函数的返回地址。但是,为什么会产生这种情况呢?是不是所有的程序都会发生缓冲区溢出呢?缓冲区溢出的发生必须具备若干条件,包括:使用非类型安全的语言,如C/C++。缓冲区溢出主要出现在由C和C++编写的程序中,因为这些语言不执行数组边界检查和类型安全检查。如果开发人员编写程序时没有检查数组是否越界,就很有可能会发生缓冲区溢出。此外‘C/C++允许开发人员创建非常接近硬件运行的程序,允许直接访问内存和计算机寄存器,从而可以方便地改变程序的流程。其他语言编写的程序也会发生缓冲区溢出,但相对来讲就比较少了。一般发生缓冲区溢出,都是由于运行时环境的错误,而不是由开发人员造成的。以不安全的方式访问或复制缓冲区。编写程序时没有考虑目标缓冲区的大小问题,以至当应用程序从用户(或攻击者)那里读取数据,将数据复制到应用程序所维护的目标缓冲区时超出该缓冲区的大小,造成缓冲区溢出。编译器将缓冲区放在内存中关键数据结构旁边或邻近的位置。程序编辑完毕,首先要先进行编译,将程序转换成机器可识别的机器指令,然后将程序加载到内存空间中运行。通常,编译器将缓冲区放在''令人感兴趣的”数据结构旁边,如C++V表、异常处理程序地址、函数指针等。这样,当缓冲区溢出时,就会改变这些地址信息,继而改变程序的流程。例如,某个函数的缓冲区紧邻堆栈(堆栈中存放着函数的返回地址,见图2),如果攻击者可以使该缓冲区发生溢出,就可以覆盖函数的返回地址,当函数返回时,程序流程就会转到攻击者定义的地址或者攻击程序的地址。三.缓冲区溢出的攻击方式缓冲区溢出攻击的目的在于扰乱具有某些特权运行的程序的功能,使得攻击者取得程序的控制权。如果该程序具有足够的权限,那么整个主机就被控制了。但是攻击者如何才能让程序运行攻击程序呢?要达到该目的,攻击者必须实现以下两个目标:在程序的地址空间里安排适当的代码。实现该目标的方法有:植入法和利用已经存在的代码。植入法所谓植入法,就是攻击者向被攻击的程序输入一个字符串,该字符串里包含需要运行的指令,程序会将该字符串放到缓冲区中。按照缓冲区的位置不同,可以将缓冲区溢出攻击分为:栈溢出(StackOverflow)、堆溢出(HeapOverflow)和BSS(静态数据区)溢出。利用已存在的代码如果攻击者需要执行的代码已经存在于被攻击程序中,则只需对代码传递一些参数,使程序实现所需的目的。例如,攻击代码要求执行“exec(“/bin/sh”)”,而在libc库中的代码执行“exec(arg)”,其中arg是一个指向一个字符串的指针参数,那么攻击者只要把传入的参数指针改向指向“/bin/sh”。适当的初始化寄存器和内存,让程序跳转到攻击者安排的地址空间执行。实现该目标的基本方法是溢出一个没有边界检查或者其它弱点的缓冲区。通过溢出一个缓冲区,攻击者可以用暴力的方法改写相邻的程序空间而直接跳过系统的检查。常见的改变程序指针的方法主要有:利用活动纪录,即栈帧通过溢出堆栈中的局部变量,使返回地址指向攻击代码,这样,函数调用结束时,程序就跳转到攻击者设定的地址。这种溢出方式就是常说的“堆栈溢出攻击”,是目前最常用的缓冲区溢出攻击方式。利用函数指针函数指针可以用来定位任何地址空间。如果某个函数定义了一个返回值为void的函数指针变量,那么只要在该函数指针附近找到一个能够溢出的缓冲区,溢出该缓冲区改变函数指针。这样,当程序通过函数指针调用函数时,程序的流程自然就会转到攻击程序。例如,Linux系统下的superprobe程序。利用长跳转缓冲区在C语言中包含了一个简单的检验/恢复系统,称为setjmp/longjmp。意思是在检验点设定“setjmp(buffer)”,用“longjmp(buffer)”来恢复检验点。如果攻击者能够进入缓冲区的空间,使“longjmp(buffer)”指向攻击代码,然后诱使程序进入恢复程序进入缓冲区模式,就可以使程序执行攻击代码了。四.RPCDCOM溢出原理1.基本概念远程过程调用(RPC)是Windows操作系统使用的一个协议。服务名称为RPCSS,描述为:''提供终结点映射程序(endpointmapper)以及其它RPC服务”。RPC提供一种内部进程通讯机制,允许在一台电脑上运行的程序无缝的执行远程系统中的代码。协议本身源于开放软件基金会(OSF)RPC协议,但添加了一些Microsoft特定的扩展。RPC可以实现代码共享,提高系统资源的利用率,也可以将大量的数值处理的操作放在处理能力较强的系统上运行,从而减轻前端机的负担。DCOM(DistributedComponentObjectModel,分布式COM):该协议的前身是OSFRPC协议,但是增加了微软自己的一些扩展,扩展了组建对象模型技术(COM),使其能够支持在局域网,广域网甚至interent上不同的计算机的对象之间的通讯。RPC的DCOM接口来处理由客户端机器发送给服务器的DCOM对象激活请求。在windows2000中,我们可以在''开始->运行"中输入命令“dcomcnfg.exe”进入DCOM的配置属性界面进行配置。2.漏洞原理分析在WindowsRPC在分布式组件对象模型(DCOM)接口的处理中存在一个缓冲区溢出漏洞。Windows的DCOM实现在处理一个参数的时候没有检查长度。通过提交一个超长(数百字节)的文件名参数可以导致堆溢出,从而使RpcSS服务崩溃。精心构造提交的数据就可以在系统上以本地系统权限运行代码。攻击者可以在系统中采取任何行为,包括安装程序,窃取更改或删除数据,或以完全权限创建新帐号。分布式组件对象模型(DCOM)通用接口导致问题的调用如下:hr=CoGetInstanceFromFile(pServerInfo,NULL,0,CLSCTX_REMOTE_SERVER,STGM_READWRITE,L"C:\\1234561111111111111111111111111.doc",1,&qi);这个调用的文件名参数(第5个参数,会引起溢出),当这个文件名超长的时候,会导致客户端的本地溢出(在RPCSS中的GetPathForServer函数里只给了0X220堆栈的空间,但是是用lstrcpyw进行拷贝的。在客户端给服务器传递这个参数的时候,会自动转化成如下格式:L“\\servername\c$\123456111111111111
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025广东博创供应链管理有限公司招聘考试及笔试历年备考题库附带答案详解
- 抓落实工作制度
- 张海堂工作制度
- 划价员工作制度
- 疗养工作制度
- 孕前检查工作制度
- 德国短期工作制度
- 各班工作制度
- 妇联单位工作制度
- 厂里工作制度
- 2026广西北海市从“五方面人员”中选拔乡镇领导班子成员25人笔试备考试题及答案解析
- 2026年滁州城市职业学院单招综合素质考试题库含答案详细解析
- 2026年四川省南充市辅警人员招聘考试试题解析及答案
- 博物馆意识形态责任制度
- 2026四川泸州高新控股旗下泸州产城招引商业管理有限公司人员招聘4人考试参考题库及答案解析
- 2026年安徽财贸职业学院单招职业适应性测试题库带答案详解
- 2025年公开选拔副科级领导干部面试题及答案
- 钢结构工厂安全规章制度
- 2026年春季学期升旗仪式安排表及讲话稿(18周):春风作序开新卷步步生花向远方
- 行政事业单位建设项目内部控制制度
- 2026年无锡工艺职业技术学院单招综合素质考试题库附答案解析
评论
0/150
提交评论