定位参数地址实现缓冲区溢出.doc_第1页
定位参数地址实现缓冲区溢出.doc_第2页
定位参数地址实现缓冲区溢出.doc_第3页
定位参数地址实现缓冲区溢出.doc_第4页
定位参数地址实现缓冲区溢出.doc_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

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

文档简介

2011-2012学年第二学期网络安全课程设计实验报告网络安全实验报告实验名称:定位参数地址实现缓冲区溢出 姓名:王嘉琳 学号:090342228 指导教师: 付宇 一、实验目的1.熟练掌握缓冲区溢出原理2.利用定位参数地址实现缓冲区溢出二、实验环境系统环境:Windows网络环境:交换网络环境实验工具:Depends、FindShellBase、UltraEdit-32、VC+6.0三、实验实际完成内容及结果分析溢出程序演示 (1)进入实验平台,单击工具栏“演示目录”按钮,进入实验目录。进入Mission2目录,该目录中有三个文件: OverFlowClient.exe 该文件是执行体文件,功能是新建Administrators组用户jlcss,用户密码1234。 CreateShellCode.exe 该文件是shellcode生成文件,功能是从OverFlowClient.exe文件中提取功能代码,并最终生成完整的shellcode.shc文件。 OverFlowServer.exe 该文件是漏洞溢出文件,功能是加载shellcode.shc文件,并实现通过缓冲区溢出完成新建Administrators组用户jlcss。 (2)执行OverFlowClient 执行OverFlowClient文件,当出现“ShellCode执行完毕,请按回车退出”提示信息时,表明程序已被成功执行,退出程序。右键单击“我的电脑”,选择“管理”进入“计算机管理”,依次选择“本地用户和组”“用户”,查看右侧“jlcss”用户信息及其隶属组。删除jlcss用户。查看右侧“jlcss”用户信息及其隶属组: (3)执行CreateShellCode 执行CreateShellCode文件,当出现“Shellcode指令集生成完毕,请按回车退出”提示信息时,表明程序已被成功执行,并且shellcode.shc文件已成功生成。右键单击生成的shellcode.shc文件,使用“UltraEdit-32”打开,查看shellcode指令码。这些指令码就是CreateShellCode从OverFlowClient.exe中提取出来的功能码。退出UltraEdit-32。shellcode.shc文件已成功生成:使用“UltraEdit-32”打开,查看shellcode指令码: (4)执行OverFlowServer 执行OverFlowServer.exe,当出现“溢出成功! 请按回车键退出”提示信息时,表明程序已被成功执行,并且缓冲区溢出操作成功。再次打开“计算机管理”查看系统用户jlcss信息。OverFlowServer.exe就是加载了shellcode.shc文件,在缓冲区溢出后执行了其中的指令码。查看系统用户jlcss信息:溢出实现 注 进行此操作步骤前,删除jlcss用户。1进入工程 单击工具栏“VC6”按钮,启动VC+6.0。选择“File”|“Open Workspace”加载工程文件“C:ExpNISNetAD-LabProjectsOverFlowMission2OverFlowServer.dsw”。该工程包含三个项目:CreateShellCode、OverFlowClient和OverFlowServer。项目功能说明见源文件。2生成shellcode功能体 (1)首先设置OverFlowClient项目为启动项。 (2)双击打开OverFlowClient.cpp源文件,在该源文件中需要填写的代码有:kernel32.dll基址(第21行),LoadlibraryA函数的绝对内存地址(第23行)和shellExecuteA函数(隶属于Shell32.dll动态库)的绝对内存地址(第25行)。使用Depends工具打开C:ExpNISNetAD-LabToolsBufferLeakToolsFindShellBaseFindShellBase.exe文件定位上述内存地址,具体操作参见任务一。kernel32.dll基址:LoadlibraryA函数的相对地址:绝对内存地址为:0x00001E60+0x7C800000=0x7C801E60shellExecuteA函数的相对地址:绝对内存地址为:0x0008F6D4+0x7CA10000=0x7CA9F6D4所以,填入程序中如下所示: (3)编译并生成OverFlowClient.exe,执行OverFlowClient.exe,确定系统是否新建了jlcss用户,并隶属Administrators组。查看:3生成shellcode指令码 (1)设置CreateShellCode为启动项。 双击打开CreateShellCode.cpp源文件,CreateShellCode的工作流程是:首先生成shellcode头,并将相关指令码写入shellcode.shc文件中;接下来是生成shellcode功能体,功能体代码来自OverFlowClient.exe中shellcode函数执行体,将功能体代码追加到shellcode.shc中;最后是生成shellcode尾,同样将其指令码追加到shellcode.shc中。 (2)这里需要填写的宏数值有: 第16行SHELLCODE_BODY_START(OverFlowClient.exe中ShellCode主体起始偏移地址); 第17行SHELLCODE_BODY_LEN(OverFlowClient.exe中ShellCode主体代码长度); 第18、66行CORRECT_RETURN_ADDR(OverFlowServer中overflow调用完成后程序正常执行返回地址,即OverFlow正常调用完成后的下一条指令地址); 第72行在OverFlowServer中函数OverFlow调用执行前,ebp基地指针地址; 第76行OverFlow溢出返回地址,即函数溢出后shellcode得以执行的首地址。 获取SHELLCODE_BODY_START、SHELLCODE_BODY_LEN值 调试OverFlowClient.exe(将该项目设置为启动项)确定ShellCode函数入口偏移地址及函数体大小,调试过程参见图22-2-6所示。 根据调试结果填写CreateShellCode.cpp源文件中SHELLCODE_BODY_START宏和SHELLCODE_BODY_LEN宏的值。 其它数值需要通过调试OverFlowServer来获取,而OverFlowServer的执行又依赖于shellcode.shc文件,所以暂且编译生成CreateShellCode.exe文件,执行该文件生成临时shellcode.shc文件。4调用OverFlowServer 上接步骤3,我们已经获得了ShellCode执行体指令码,还需要获取溢出后程序正常返回地址、OverFlow函数调用前ebp基础指针地址和shellcode执行的缓冲区首地址。 (1)OverFlow正常调用返回时的下一条指令地址。 设置OverFlowServer files为启动项,双击打开OverFlowServer.cpp文件。程序首先打开存放shellcode指令码的文件(默认名称为shellcode.shc),读取shellcode.shc的全部内容至接收缓冲区中。接下来就是利用memcpy函数实现接收缓冲区的拷贝,目标地址是OverFlow函数内的局部缓冲区,该缓冲区默认大小为450字节,需要根据实际调试结果重新确定其大小。最后在OverFlow调用完成后程序继续执行(溢出执行后程序依然能够正常继续运行)。 调整TempBuffer缓冲区大小,使其大于临时shellcode指令码长度,这样做的目的是让程序正常执行(不发生溢出),以便我们能够获取OverFlow函数执行调用后的正确返回地址。调试获取OverFlow函数正常调用执行后的下一条指令地址。调试过程如图22-2-7所示。 填写该指针地址到CreateShellCode.cpp文件中。 (2)OverFlow函数调用前ebp基地址指针。 单步调试程序定位到OverFlow函数入口处,获取此时的EBP指针地址,如图22-2-8所示。填写EBP指针地址到CreateShellCode.cpp文件中。 (3)最后我们来确定shellcode的最后4字节,从实验原理中可知需用这4字节数覆盖调用返回地址,使得shellcode得以执行。从OverFlowServer程序又可知shellcode最后被加载到TempBuffer缓冲区,所以只要用TempBuffer缓冲区首地址覆盖调用返回地址,在程序溢出后shellcode便会执行了。调用OverFlowServer.exe确定OverFlow调用执行过程中TempBuffer缓冲区的首地址。此时TempBuffer缓冲区的首地址为:0x0012f954将TempBuffer缓冲区首地址填写到CreateShellCode.cpp文件中。 至此全部的shellcode指令生成完毕,运行Createshellcode.exe生成完整的shellcode.sh文件,使用UltraEdit编辑器对其进行查看。5调试确定TempBuffer缓冲区大小 调试OverFlowServer.exe得到OverFlow调用返回时的地址,将返回地址与shellcode.shc中的十六数相比较,有三种比较结果: (1)返回地址是shellcode最后4字节数据。函数返回时执行shellcode。 (2)返回地址没有在shellcode.sh中,缓冲区空间过大,溢出未发生。可以缩小缓冲区空间或在最后8个字节前用0x90(空指令)补充。 (3)返回地址在shellcode.sh中(不是最后4字节数据),缓冲区空间过小。放大缓冲区空间。 当改变TempBuffer缓冲区大小时,其首地址可能会发生变动,调试确定TempBuffer首地址,重新填写CreateShellCode.cpp,并重新生成shellcode.shc。经过多次调试后确定缓冲区大小,当满足第一种比较结果时,缓冲区溢出就可以执行下去。运行程序,查看系统用户jlcss(若jlcss用户已存在,请先将其删除再运行程序)及其所属用户组。经多次调试,CreateShellCode.cpp中实验程序部分代码为:#define SHELLCODE_BODY_START0x1020#define SHELLCODE_BODY_LEN0x197#define CORRECT_RETURN_ADDR0x0040110Aunsigned char ShellCodeTail = x61, x81, xc4, x2c, x10, x00, x00, xba, x0A, x11, x40, x00, xff, xe2, x90,x90,x90,x90, x80, xFF,x12, x00, x68,xF9,x12,x00;OverFlowServer中实验程序部分代码为:#define OFS_TEMP_BUFFER_LE

温馨提示

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

评论

0/150

提交评论