定位参数地址实现缓冲区溢出

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

网络安全实验报告

实验名称:定位参数地址实现缓冲区溢出

姓名:王嘉琳学号: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:\ExpNIS\NetAD-Lab\Projects\OverFlow\Mission2\OverFlowServer.dsw”。该工程包含三个项目:CreateShellCode、OverFlowClient和OverFlowServer。项目功能说明见源文件。

2.生成shellcode功能体

(1)首先设置OverFlowClient项目为启动项。

(2)双击打开OverFlowClient.cpp源文件,在该源文件中需要填写的代码有:kernel32.dll 基址(第21行),LoadlibraryA函数的绝对内存地址(第23行)和shellExecuteA函数(隶属于Shell32.dll动态库)的绝对内存地址(第25行)。使用Depends工具打开C:\ExpNIS\NetAD-Lab\Tools\BufferLeakTools\FindShellBase\FindShellBase.exe文件定位上述内存地址,具体操作参见任务一。

kernel32.dll基址:

LoadlibraryA函数的相对地址:

绝对内存地址为:0x00001E60+0x7C800000=0x7C801E60

shellExecuteA函数的相对地址:

绝对内存地址为: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所示。

相关文档
最新文档