实验4缓冲区溢出攻击实验_第1页
实验4缓冲区溢出攻击实验_第2页
实验4缓冲区溢出攻击实验_第3页
实验4缓冲区溢出攻击实验_第4页
实验4缓冲区溢出攻击实验_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

百度文库-让每个人平等地提升自我百度文库-让每个人平等地提升自我PAGEPAGE10百度文库-让每个人平等地提升自我PAGE深圳大学实验报告课程名称:计算机系统(2)实验项目名称:缓冲区溢出攻击实验学院:计算机与软件学院专业:指导教师:罗秋明报告人:学号:班级:实验时间:2017年5月12日实验报告提交时间:2017年5月31日教务处制一、实验目标:理解程序函数调用中参数传递机制;掌握缓冲区溢出攻击方法;进一步熟练掌握GDB调试工具和objdump反汇编工具。二、实验环境:计算机(IntelCPU)Linux32位操作系统(Ubuntu16.04)GDB调试工具objdump反汇编工具三、实验内容本实验设计为一个黑客利用缓冲区溢出技术进行攻击的游戏。我们仅给黑客(同学)提供一个二进制可执行文件bufbomb和部分函数的C代码,不提供每个关卡的源代码。程序运行中有3个关卡,每个关卡需要用户输入正确的缓冲区内容,否则无法通过管卡!要求同学查看各关卡的要求,运用GDB调试工具和objdump反汇编工具,通过分析汇编代码和相应的栈帧结构,通过缓冲区溢出办法在执行了getbuf()函数返回时作攻击,使之返回到各关卡要求的指定函数中。第一关只需要返回到指定函数,第二关不仅返回到指定函数还需要为该指定函数准备好参数,最后一关要求在返回到指定函数之前执行一段汇编代码完成全局变量的修改。实验代码bufbomb和相关工具(sendstring/makecookie)的更详细内容请参考“实验四缓冲区溢出攻击实验.pptx”。本实验要求解决关卡1、2、3,给出实验思路,通过截图把实验过程和结果写在实验报告上。四、实验步骤和结果首先是makecookie:步骤1返回到smoke()解题思路步骤1是要修改getbuf()的返回地址,在执行完getbuf()后不是返回到原来的调用者test(),而是跳到一个叫做smoke()的函数里。只需构造一段字符串让Gets()全部拷贝到buf数组了,从而造成缓冲区溢出。同时最重要的一点是:将smoke()函数的初始地址也放到构造的字符串内,使其恰好覆盖到getbuf()的returnaddress位置。解题过程首先要知道smoke()的初始地址,用objdump查看符号表smoke的初始地址是0x08048eb0。buf第一个元素的地址是-0x18,而returnaddress第一个字节的地址是0x04,两个位置的相差换算成十进制就是0x04-(-0x18)=4+24=28。也就是说我们要构造28个字符,然后加上smoke()的地址就能准确覆盖到returnaddress了。1.3最终结果截图步骤2返回到fizz()并准备相应参数2.1解题思路通过objdump-t查看符号表中fizz()函数的初始地址。拿到了地址0x08048e60,只要用它替换掉之前exploit.raw中smoke()的地址就能让getbuf()执行完毕后返回到fizz()中。然后用makecookie生成我的用户名ylb。以getbuf()调用Gets()为例,看一下调用者的代码和对应的栈。2.2解题过程先分析出从getbuf()函数结束后,到调用fizz()函数前栈的情况:0x0c即将是fizz()栈区0x08即将是fizz()栈区0x04getbuf()的返回地址(即fizz()的地址)<-%esp0x00getbuf()中%ebp的保存值得知,在返回并调用fizz()前,栈指针指向0x04处(相对getbuf()中的%ebp为0x00),随后fizz()调用时,会把fizz()的%ebp值压入栈中,8048e66: 8b4508mov0x8(%ebp),%eax8048e69: 3b05d4a10408 cmp0x804a1d4,%eax再结合这两行代码得知,fizz()函数的传入参数是应该存放在0x8(%ebp)处的,栈的情况应变为:0x0cfizz的传入参数0x08fizz()的返回地址0x04fizz()中%ebp的保存值<-%esp(因为压栈,getbuf()的返回地址被替换)0x00getbuf()中%ebp的保存值01020304050607080910111213141516171819202122232425262728608e0408这串字符串刚覆盖到0x08,即还需要覆盖4个字节,然后传入黑客cookie值../makecookieylb利用该命令获得个人黑客cookie值为0x239772d5黑客cookie值依据小端法调整为963cdf30,cookie值前方还需覆盖4个字节,故得到完整字符串内容为:01020304050607080910111213141516171819202122232425262728608e040801020304d57297230dcatexploit2.txt|./sendstring|./bufbomb–tylb最后通过以上指令来把字符串内容构造并输入到bufbomb程序中。2.3最终结果截图步骤3返回到bang()且修改global_value解题思路因为全局变量与代码不在一个段中,所以我们不能让缓冲区一直溢出到.bss段(因为global_value初始化为0,所以它会被放在.bss而非.data段以节省空间)覆盖global_value的值。若修改了.bss和.text之间某些只读的段会引起操作系统的“警觉”而报错。所以在进入bang()之前我们需要执行一小段我们自己的代码去修改global_value,这一段代码就叫做exploitcode。解题过程a.bang()和global_value地址得到bang()的入口地址0x08048e10,以及global_value的地址0x0804a1c4利用gdb调试获得buf字符数组的首地址,即是注入代码的首地址。gdbbufbomb;调试程序disassgetbuf;查看getbuf的汇编代码给getbuf()设置断点,程序把断点设置在0x8048ad6run–tylb;运行程序p$ebp-0x18;由lea-0x18(%ebp),%eax分析出buf地址为%ebp地址-0x18得出buf地址,也即注入代码地址应为0xbfffb930接下来编写注入代码(汇编代码):.code32;让gcc以32位模式来编译movl$0x333382e2,0x0804a1c4;令global_value=cookie值pushl$0x08048e10;%esp->bang入口地址ret;retbang()gcc–cexploit_code.s//编译汇编文件为可重定位文件.s->.oobjdump–dexploit_code.o//查看可重定位文件的内容最终获得注入代码的16进制机器码,为16字节。在第1题中返回地址前有28个字节的空间,故在注入代码后面仍需补充12个字节的空间,为方便计数定为01~12,紧接着则是buf的地址,让getbuf()返回时跳转到注入代码的首地址,按照小端法,buf地址应为30b9ffff,故完整字符串为:c705c4a10408e282333368108e0408c301020304050607080910111230b9ffbf0d忽略空格(和下划线)后,得到exploit3.txt的内容为:c705c4a10408e282333368108e0408c301020304050607080910111230b9ffbf0dLinux内存地址有随机化机制,若随机化机制打开,那么每次运行程序,%ebp的地址可能是不一样的,即buf地址无法确定(注入代码开始地址无法确定),这样的话,注入代码将无法正确编写。所以需要先关闭Linux内存地址随机化机制,才能完成实验。可以通过设置kernel.randomize_va_space内核参数来设置内存地址随机化的行为。#echo0>/proc/sys/kernel/randomize_va_space3.3最终结果截图将global_value的值设为0x333382e2五、实验总结与体会(1)在做第一题的时候,遇到了一个问题。Error:Unabletosendvalidationinformationtogradingserver.随后在网上查阅了相关的资料,明白了需要先安装sendmail。执行的命令如下:sudoapt-getinstallsendmailsudoapt-getinstallsendmail-cf随后问题得以解决。(2)而第三题,遇到了一个问题。Linux有内存地址随机化机制

温馨提示

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

评论

0/150

提交评论