




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2011-2012学年第二学期网络安全课程设计实验报告网络安全实验报告实验名称:定位参数地址实现缓冲区溢出姓名:王嘉琳学号:090342228指导教师:付宇一、实验目的1. 熟练掌握缓冲区溢出原理2. 利用定位参数地址实现缓冲区溢出二、实验环境系统环境:Win dows网络环境:交换网络环境实验工具:Depends、FindShellBase、UltraEdit-32 、VC+6.0三、实验实际完成内容及结果分析溢出程序演示(1)进入实验平台,单击工具栏演示目录”按钮,进入实验目录。进入Mission2目录,该目录中有三个文件:OverFlowClie nt.exe该文件是执行体文件,功能是新
2、建Administrators组用户jlcss,用户密码1234。CreateShellCode.exe该文件是shellcode生成文件,功能是从OverFlowClient.exe文件中提取功能代码,并最终生成完整的shellcode.shc文件。OverFlowServer.exe该文件是漏洞溢出文件,功能是加载shellcode.shc文件,并实现通过缓冲区溢出完成新建 Administrators 组用户 jlcss。(2)执行 OverFlowClient执行OverFlowClient文件,当出现“ShellCod执行完毕,请按回车退出”提示信息时,表明程序已被成功执行,退出程序
3、。右键单击我的电脑”,选择 管理”进入 计算机管理”,依次选择 本地用户和组”丨用户”,查看右侧“jlcss用'户信息及其隶属组。删除jlcss用户。查看右侧“ jlcss用户信息及其隶属组:1终耐得1濟文件拔入第规題購于記畳乂件1环環1合恬1(3)执行 CreateShellCode执行CreateShellCode文件,当出现“ Shellcode旨令集生成完毕,请按回车退出"提示信息时,表明程序已被成功执行,并且shellcode.shc文件已成功生成。右键单击生成的shellcode.shc文件,使用 “ UltraEdit32 "打开,查看 shellco
4、de指令码。这些指令码就是 CreateShellCode 从 OverFlowClient.exe 中提取出来的功能码。退出UltraEdit-32 。shellcode.shc文件已成功生成:"ICreateShelCodB.Bxe nOvarFtowdantP7K0173 KB157 KB1 KBOOOOOOOh: Si EC 24 10 00 00 60 SS SB EC 81 ECDb 00 00 00OOOOOOlOh:53S657C745FCOODOSO*?CC?45FB60IE800000002Oh:7CC745F4D4F6A97CCG4SEGS3C645E96S00
5、0003Oh;C645EA65C645EE6CC64SEC6CC645ED330000040b;C645EE32C645EF2EC64SFO64Cfi勺5Fl6COODOOOSOh:C64SF2SCC645F300S>5ES50FF55F8390000060h:45E4C645DC6FC64SDD70C645DE65C64S00000070hiDF6EC64SEO00C64SD86EC645D965C645(4)执行 OverFlowServer执行OverFlowServer.exe,当出现溢出成功!请按回车键退出"提示使用“UltraEdi-32"打开,查看 sh
6、ellcode指令码:已被成功执行,并且缓冲区溢出操作成功。再次打开,表明程序 计算机管理”查看系统用户jlcss信息。jjflsbftllcode.shc2011-2012学年第二学期网络安全课程设计实验报告OverFlowServer.exe就是加载了 shellcode.shc文件,在缓冲区溢出后执行了其中的指令码。 查看系统用户jlcss信息:2011-2012学年第二学期网络安全课程设计实验报告2011-2012学年第二学期网络安全课程设计实验报告运程橙制终喘脱釜色圧文件|拨入魏隶属于配詈文件|环埴1令话烹屋于(1);1flVsers溢出实现注进行此操作步骤前,删除jlcss用户。1
7、.进入工程单击工具栏 “ VC6按钮,启动 VC+6.0。选择“ File ” | “ Woekspace”加载工程文件 “ C:OverFlowServer.dsw 。该工程包含三个项目: CreateShellCode、OverFlowClient 和 OverFlowServer。项目功能说明见源文件。2 .生成shellcode功能体(1)首先设置 OverFlowClient项目为启动项。(2) 双击打开 OverFlowClient.cpp源文件,在该源文件中需要填写的代码有:kernel32.dll基址(第21行),LoadlibraryA 函数的绝对内存地址(第 23行)和sh
8、ellExecuteA函数(隶 属于Shell32.dll动态库)的绝对内存地址(第25行)。使用 Depe nds工具打开 C:ExpNISNetAD-LabToolsBufferLeakToolsFi ndShellBase'Fi ndShellBase.exe文件定位上述内存地址,具体操作参见任务一。kernel32.dll 基址:KERWEL32.DLL | 07/2S/DS 8;COa | 1,205尼牺 | A| IntelxB6 | Wi32 console | Yes | OE7C0aO9aCLoadlibraryA函数的相对地址:H 595(0x0253)5G4 fO
9、xOZSZ) LoadLibrar/AOx0D001E60绝对内存地址为:0x00001E60+0x7C800000=0x7C801E60shellExecuteA函数的相对地址:EI 无0 (00168)药3 (OxflLO?) ShellExecuteAOxOOQSF®4O SHEIL32,DLL | 07/25/05 BiDQa | B.237,5681A| Intel xM | Win32 GUI | Y« | Ox7CA10000 |绝对内存地址为:0x0008F6D4+0x7CA10000=0x7CA9F6D4所以,填入程序中如下所示:23:PUOID pFUH
10、LOdLibraryA = ( PVOID )0x7G801E60;25:PIIOID pFunShellExecuteA = ( PUOlb )0x7CA9FAD4;fl fll lafSiht*t ii bfl .-»ir* IB fl" ji> h-» f®fent T _iF if" hfa fTh H j£ Ci Ila l-»(3) 编译并生成 OverFlowClient.exe ,执行 OverFlowClient.exe,确定系统是否新建了 jlcss 用户,并隶属 Administrators组。查
11、看:E Administrator£ juest £iusr_hostIrtemet来宣临户HOST启动I【5进程她户student£SLPPORT_36.,CN=MKr0$0ft torpor£testtestfivUSRJtetlAVSA Servar Account3. 生成shellcode指令码(1)设置 CreateShellCode 为启动项。双击打开 CreateShellCode.cpp源文件,CreateShellCode的工作流程是:首先生成shellcode 头,并将相关指令码写入shellcode.shc文件中;接下来是生成sh
12、ellcode功能体,功能体代码来自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
13、(OverFlowServer 中 overflow 调用完成后程序 正常执行返回地址,即 OverFlow正常调用完成后的下一条指令地址);第72行在OverFlowServer中函数OverFlow调用执行前,ebp基地指针地址;第76行OverFlow溢出返回地址,即函数溢出后shellcode得以执行的首地址。 获取 SHELLCODE_BODY_START 、SHELLCODE_BODY_LEN 值调试OverFlowClient.exe (将该项目设置为启动项)确定 ShellCode函数入口偏移地址及 函数体大小,调试过程参见图22-2-6所示。void ShellCadef)/
14、 Uindoi HNODULE M/ Window PHO ID pFul / UindoiShellCode:O 00401020 55OSU01O21 8B ECC04O1O23 61 EC A800401020 <=> ShellCodeA 口偏移地址oo oo oosubebp,esp esp. M8hPHO ID pFui5Fpopedi/ 加载計0Q4011B25EpopesiCHAR s/Sh(popebKHHODULf 撷004011B48B E5mouesp,ebp5D004011B6<=> ShellCode 束地址 根据调试结果填写CreateSh
15、ellCode.cpp源文件中 SHELLCODE_BODY_START 宏和SHELLCODE_BODY_LEN 宏的值。 其它数值需要通过调试OverFlowServer来获取,而 OverFlowServer的执行又依赖于shellcode.shc文件,所以暂且编译生成CreateShellCode.exe文件,执行该文件生成临时shellcode.shc 文件。4. 调用 OverFlowServer上接步骤3,我们已经获得了 ShellCode执行体指令码,还需要获取溢出后程序正常返回 地址、OverFlow函数调用前ebp基础指针地址和shellcode执行的缓冲区首地址。(1)O
16、verFlow正常调用返回时的下一条指令地址。设置OverFlowServer files为启动项,双击打开OverFlowServer.cpp文件。程序首先打开存放shellcode指令码的文件(默认名称为 shellcode.shc),读取shellcode.shc的全部内容至接 收缓冲区中。接下来就是利用memcpy函数实现接收缓冲区的拷贝,目标地址是OverFlow函数内的局部缓冲区,该缓冲区默认大小为 450字节,需要根据实际调试结果重新确定其大小。最后在OverFlow调用完成后程序继续执行 (溢出执行后程序依然能够正常继续运行)。调整TempBuffer缓冲区大小,使其大于临时s
17、hellcode指令码长度,这样做的目的是让程 序正常执行(不发生溢出),以便我们能够获取 OverFlow函数执行调用后的正确返回地址。 调试获取OverFlow函数正常调用执行后的下一条指令地址。调试过程如图22-2-7所示。G 0uerFlow( recbuf r ircount );"正常情况下,Ou叶F"誠同用后的程序执行3却:35:/正常情况下,0uerFlo<用后的程序执行 printf(-溢岀成功!请按回车退出。5"3百:=> 004011OApush004011 OA<>OverFl珅调用返回地址604311 OFcall
18、printf (0CU01870)OOH81111Iaddesp,437:gtchar();填写该指针地址到CreateShellCode.cpp文件中。(2)OverFlow函数调用前ebp基地址指针。单步调试程序定位到OverFlow函数入口处,获取此时的EBP指针地址,如图22-2-8所示。2011-2012学年第二学期网络安全课程设计实验报告RegistersEAX = 0012FS80 EBXECX = 00423A90 EDXESI = 0QOI30U00 EDIEIP = 0940192a ESPEBP = O012FF89 EFLDS - 0023 ES = 00237FFD7
19、O0000QQ01B80012FF800012FB1CQ9OQ02O6 C£ = OQ1BSS = 0023 FS = R03E2011-2012学年第二学期网络安全课程设计实验报告GS = 0000 OU=0 UP=0 EI=1 PL=0 ZR=0 AC-0PE=1 CV=0STB =p填写EBP指针地址到CreateShellCode.cpp文件中。(3) 最后我们来确定shellcode的最后4字节,从实验原理中可知需用这4字节数覆盖调用返回地址,使得 shellcode得以执行。从 OverFlowServer程序又可知shellcode最后被加载 到TempBuffer缓冲
20、区,所以只要用TempBuffer缓冲区首地址覆盖调用返回地址,在程序溢出后shellcode便会执行了。调用OverFlowServer.exe确定 OverFlow 调用执行过程中TempBuffer缓冲区的首地址。此时TempBuffer缓冲区的首地址为:0x0012f954将TempBuffer缓冲区首地址填写到CreateShellCode.cpp文件中。至此全部的shellcode指令生成完毕,运行Createshellcode.exe生成完整的 shellcode.sh文件,使用UltraEdit编辑器对其进行查看。OOOOOlOOhccCCCCccccCCCCccccccccc
21、ccccccccc00000 UChcccccccccccccccccccccccccccccc0000012011ccccCCccccccccccccccccccccccccccooaoisohccccCCcccc匚cccccccccccccccccccccOOa014CliccccCCcccc匚匚cc匚亡ccccccccccccccccoooaoisoh匚匚ccCCcccccccc匚uccccccccccccccccaooijoiscuccCGgGCGCXGGccccuuGGgucccccOOOCiDITOhccccccccccCCCCcc(:cccccCt:ccccccCOD 18011
22、匚匚ccCCccccccCCCCcccc匚uccccccccccoooaoIsonccccCCccccccCCcccccccccccc6191OOOOQlaOhzc10000BA0A11DOFF90909090scOOQDOlloOhFF1200STF912005.调试确定TempBuffer缓冲区大小调试OverFlowServer.exe得到OverFlow调用返回时的地址,将返回地址与shellcode.shc中的十六数相比较,有三种比较结果:(1) 返回地址是 shellcode最后4字节数据。函数返回时执行shellcode。(2) 返回地址没有在 shellcode.sh中,缓冲区
23、空间过大,溢出未发生。可以缩小缓冲区 空间或在最后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_ADDR0x0040110Aun sig ned char ShellCodeTail='x61', 'x81', 'xc4', 'x2c', 'x10', 'x00', 'x00', 'xba', 'x0A', 'x11
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 创意农业面试题目及答案
- 反馈技巧测试题及答案
- 微量泵的应用试题及答案
- 2024年纺织品检验员疑难解析试题及答案
- 2024年纺织品设计师证书试题及答案的前沿趋势试题及答案
- 民用航空概论试题及答案
- 后厨燃气安全试题及答案
- 国际美术设计师考试中的视觉创新方法试题及答案
- 建筑识图测试题及答案
- 浅析国际美术设计师考试的试题及答案
- 肥厚型心肌病合并心衰
- 2014-2023年高考数学真题分享汇编:概率统计多选、填空题(理科)(解析版)(全国通用)
- 铅锌矿的矿石加工与冶炼技术改进
- 2024年安徽职校(中职组)中式烹饪赛项参考试题库(含答案)
- 2024年宁夏固原农村电力服务有限公司招聘笔试参考题库含答案解析
- 2024年上海铁路局集团招聘笔试参考题库附带答案详解
- 医患沟通技巧与人文关怀课件
- 招投标顾问服务协议
- 苏教版二年级下册数学《认识角》教学设计(市级公开课)
- 过水箱涵施工方案
- 2023年上半年教师资格证考试《高中音乐专业面试》真题及答案
评论
0/150
提交评论