首页 RPC DCOM堆栈溢出实验

RPC DCOM堆栈溢出实验

举报
开通vip

RPC DCOM堆栈溢出实验实验名称: RPC DCOM堆栈溢出实验 实验要求: [实验目的] ◆ 了解堆栈缓冲区溢出的基本原理及其危害。 ◆ 体会远程缓冲区溢出的常见攻击手法。 ◆ 树立安全编程的思想,从根本上杜绝缓冲区溢出的发生。 [实验环境] ◆ 网络:局域网环境。 ◆ 远程计算机 ◇ 操作系统:Windows 2000 Server ◇ 补丁:\ ◇ 组件:\ ◇ 服务:\ ◆ 本地计算机 ◇ 操作系统:Windows 2000主机 ◇ 软件:DCOM RPC Exploit - GUI v2。 [实...

RPC DCOM堆栈溢出实验
实验名称: RPC DCOM堆栈溢出实验 实验要求: [实验目的] ◆ 了解堆栈缓冲区溢出的基本原理及其危害。 ◆ 体会远程缓冲区溢出的常见攻击手法。 ◆ 树立安全编程的思想,从根本上杜绝缓冲区溢出的发生。 [实验环境] ◆ 网络:局域网环境。 ◆ 远程计算机 ◇ 操作系统:Windows 2000 Server ◇ 补丁:\ ◇ 组件:\ ◇ 服务:\ ◆ 本地计算机 ◇ 操作系统:Windows 2000主机 ◇ 软件:DCOM RPC Exploit - GUI v2。 [实验内容] ◆ 利用RPC DCOM堆栈缓冲区溢出漏洞,对远程目标主机执行一次实际的缓冲区溢出攻击,获取远程Shell。 ◆ 溢出成功获取远程Shell之后,验证所获得的权限。 ◆ 获取远程主机的敏感信息。 实验指导:  运行实验工具目录下的RPCGUI.exe。  在"IP Address"输入目标服务器的IP地址为"192.168.33.111"。  在"Operating System"中选择目标服务器的操作系统类型为"Windows 2000(ALL)"。  在"Exploit Port"中选择目标服务器开放的RPC DCOM端口,默认为135。  在"Shell Port"中任意输入本地开放的监听端口(1024 - 65535),来等待远程服务器的反向连接。  点击"Exploit"按钮发起远程溢出攻击。  等待一会,如果溢出成功,将会获得一个CMD Shell。  在Cmd Shell中进入C:\ServerData目录中,运行whoami程序来查看溢出之后所获得的权限。参考以下一些命令: o C: o cd c:\serverdata o whoami 请将所有获得的信息写入实验 报告 软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载 。  在CMD Shell窗口中输入一些Dos命令来获取远程主机的系统版本、主机名称,网络地址信息、端口连接状况,列举所有用户、管理员组用户,查看系统开放的服务。 参考以下一些命令: o ver o hostname o ipconfig /all o netstat -an o net user o net localgroup administrators o net start 请将所有获得的信息写入实验报告。  试分析在该远程Cmd Shell中还可以执行什么操作,认识缓冲区溢出的强大攻击性和危害。请将心得体会写入实验报告。 实验原理: 一.缓冲区溢出系统基础 计算机程序就是计算机要执行的指令的集合。所有的程序都是用某种计算机语言来编写的。程序运行时,需要先经过编译、链接生成可执行的计算机能识别的机器指令,然后再加载到内存空间运行。 计算机程序在内存空间的影像,可分为3个部分:文本(代码)区、数据区和堆栈区,如图1所示。其中:  文本区用于保存程序执行的指令和只读数据,这些指令指出程序运行的 流程 快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计 。  数据区包括未初始化数据区(BSS)和已初始化数据区,前者用于存储静态分配的变量(static类型),后者用于存储程序的初始化数据。  堆栈区用于实现程序流程的改变,包括堆和栈两个部分。其中,堆用于存储程序运行过程中动态分配的数据块(即调用malloc或calloc函数分配的内存);栈用于存储过程调用和函数调用所传递的参数、返回地址、局部变量等。 图1 程序在内存的基本影像 在传统的程序 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 中,通常借助过程调用和函数调用,改变程序运行的流程。每次进行过程和函数调用时,都要先将返回地址信息压入到堆栈中。过程和函数调用返回时,读取堆栈数据,获取返回地址,将程序的控制权交还给原来的程序,将程序重新定向到原来的流程中。 在堆栈中,使用一种称为“栈帧” 的数据结构保存返回地址信息。栈帧包含下列信息:传递给函数的参数、函数返回后下一条指令的地址、函数中分配的局部变量、恢复前一个栈帧所需的数据(基地址寄存器值)。函数调用前,将栈帧内容压入栈中;函数调用后,将栈帧内容弹出,获取执行的下一条指令的地址。函数在栈中的内存影像如图2所示。 图2 函数在栈中的影像 由图2可以看出,栈是从内存高地址向低地址增长的。也就是说,如果将数据压入,栈顶地址将减小;如果将数据弹出,栈顶地址将增加。在函数的栈帧中,函数局部变量占用的内存空间非常重要,通常,在函数中会使用类似“char buffer[20]”之类的C语言语句定义一个缓冲区。向缓冲区填充数据时,首先填充低地址,然后填充高地址,其增长方向与栈的增长方向相反。如果向缓冲区填充的数据超过缓冲区的大小,那么它将继续向高地址填充数据,很可能覆盖掉“调用函数后的返回地址”,使得函数返回时,程序的执行顺序发生变化。 缓冲区溢出攻击,就是通过向缓冲区填充过量的数据,覆盖“调用函数后的返回地址”,使函数的返回地址变成“攻击程序”的代码地址。这样,当函数返回时,程序的控制权将转到“攻击代码”,实现攻击目的。 二. 缓冲区溢出存在的条件 缓冲区溢出的实质是存放在缓冲区中的数据越界,覆盖了函数的返回地址。但是,为什么会产生这种情况呢?是不是所有的程序都会发生缓冲区溢出呢?缓冲区溢出的发生必须具备若干条件,包括:  使用非类型安全的语言,如C/C++。 缓冲区溢出主要出现在由C和C++编写的程序中,因为这些语言不执行数组边界检查和类型安全检查。如果开发人员编写程序时没有检查数组是否越界,就很有可能会发生缓冲区溢出。此外,C/C++允许开发人员创建非常接近硬件运行的程序,允许直接访问内存和计算机寄存器,从而可以方便地改变程序的流程。 其他语言编写的程序也会发生缓冲区溢出,但相对来讲就比较少了。一般发生缓冲区溢出,都是由于运行时环境的错误,而不是由开发人员造成的。  以不安全的方式访问或复制缓冲区。 编写程序时没有考虑目标缓冲区的大小问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 ,以至当应用程序从用户(或攻击者)那里读取数据,将数据复制到应用程序所维护的目标缓冲区时超出该缓冲区的大小,造成缓冲区溢出。  编译器将缓冲区放在内存中关键数据结构旁边或邻近的位置。 程序编辑完毕,首先要先进行编译,将程序转换成机器可识别的机器指令,然后将程序加载到内存空间中运行。通常,编译器将缓冲区放在“令人感兴趣的”数据结构旁边,如C++ V 表、异常处理程序地址、函数指针等。这样,当缓冲区溢出时,就会改变这些地址信息,继而改变程序的流程。例如,某个函数的缓冲区紧邻堆栈(堆栈中存放着函数的返回地址,见图2),如果攻击者可以使该缓冲区发生溢出,就可以覆盖函数的返回地址,当函数返回时,程序流程就会转到攻击者定义的地址或者攻击程序的地址。 三. 缓冲区溢出的攻击方式 缓冲区溢出攻击的目的在于扰乱具有某些特权运行的程序的功能,使得攻击者取得程序的控制权。如果该程序具有足够的权限,那么整个主机就被控制了。但是攻击者如何才能让程序运行攻击程序呢?要达到该目的,攻击者必须实现以下两个目标: 1. 在程序的地址空间里安排适当的代码。 实现该目标的方法有:植入法和利用已经存在的代码。  植入法 所谓植入法,就是攻击者向被攻击的程序输入一个字符串,该字符串里包含需要运行的指令,程序会将该字符串放到缓冲区中。按照缓冲区的位置不同,可以将缓冲区溢出攻击分为:栈溢出(Stack Overflow)、堆溢出(Heap Overflow)和BSS(静态数据区)溢出。  利用已存在的代码 如果攻击者需要执行的代码已经存在于被攻击程序中,则只需对代码传递一些参数,使程序实现所需的目的。例如,攻击代码要求执行“exec (“/bin/sh”)”,而在libc库中的代码执行“exec (arg)”,其中arg是一个指向一个字符串的指针参数,那么攻击者只要把传入的参数指针改向指向“/bin/sh”。 2. 适当的初始化寄存器和内存,让程序跳转到攻击者安排的地址空间执行。 实现该目标的基本方法是溢出一个没有边界检查或者其它弱点的缓冲区。通过溢出一个缓冲区,攻击者可以用暴力的方法改写相邻的程序空间而直接跳过系统的检查。常见的改变程序指针的方法主要有:  利用活动纪录,即栈帧 通过溢出堆栈中的局部变量,使返回地址指向攻击代码,这样,函数调用结束时,程序就跳转到攻击者设定的地址。这种溢出方式就是常说的“堆栈溢出攻击”,是目前最常用的缓冲区溢出攻击方式。  利用函数指针 函数指针可以用来定位任何地址空间。如果某个函数定义了一个返回值为void的函数指针变量,那么只要在该函数指针附近找到一个能够溢出的缓冲区,溢出该缓冲区改变函数指针。这样,当程序通过函数指针调用函数时,程序的流程自然就会转到攻击程序。例如,Linux系统下的superprobe程序。  利用长跳转缓冲区 在C语言中包含了一个简单的检验/恢复系统,称为setjmp/longjmp。意思是在检验点设定“setjmp(buffer)”,用“longjmp(buffer)”来恢复检验点。如果攻击者能够进入缓冲区的空间,使“longjmp(buffer)”指向攻击代码,然后诱使程序进入恢复程序进入缓冲区模式,就可以使程序执行攻击代码了。 四. RPC DCOM溢出原理 1. 基本概念 远程过程调用(RPC)是Windows 操作系统使用的一个协议。服务名称为RPCSS,描述为:“提供终结点映射程序(endpoint mapper)以及其它RPC服务”。RPC提供一种内部进程通讯机制,允许在一台电脑上运行的程序无缝的执行远程系统中的代码。协议本身源于开放软件基金会(OSF)RPC协议,但添加了一些Microsoft特定的扩展。RPC可以实现代码共享,提高系统资源的利用率,也可以将大量的数值处理的操作放在处理能力较强的系统上运行,从而减轻前端机的负担。 DCOM(Distributed Component Object Model,分布式COM):该协议的前身是OSF RPC 协议,但是增加了微软自己的一些扩展,扩展了组建对象模型技术(COM),使其能够支持在局域网,广域网甚至interent上不同的计算机的对象之间的通讯。RPC的DCOM接口来处理由客户端机器发送给服务器的DCOM对象激活请求。在windows 2000中,我们可以在“开始->运行”中输入命令“dcomcnfg.exe”进入DCOM的配置属性界面进行配置。 2. 漏洞原理分析 在Windows RPC在分布式组件对象模型(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$\1234561111111111111111111111111.doc"这样的形式传递给远程服务器,于是在远程服务器的处理中会先取出servername名,但是这里没做检查,给定了0X20(默认NETBIOS名)大小的空间,于是堆栈溢出产生了。当输入足够多的字符时候,堆栈发生溢出,并且导致可以直接执行构造的shellcode。 此漏洞可以通过135(TCP/UDP)、139、445、593等端口发起攻击。 实验结果: 1.点击“编辑报告”按钮新建Word文档,然后在其中输入实验结果。 2.保存Word文档至本地磁盘。 3.“结束实验”时选择该Word文档提交报告
本文档为【RPC DCOM堆栈溢出实验】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_004626
暂无简介~
格式:doc
大小:314KB
软件:Word
页数:7
分类:互联网
上传时间:2013-05-10
浏览量:31