计算机系统buflab实验报告_第1页
计算机系统buflab实验报告_第2页
计算机系统buflab实验报告_第3页
计算机系统buflab实验报告_第4页
计算机系统buflab实验报告_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

1、精选优质文档-倾情为你奉上课程实验报告 课 程 名 称: 计算机系统 实验项目名称: buflab 专 业 班 级: 计科1708 姓 名: 学 号: 指 导 教 师: 完 成 时 间: 2019 年 5 月 29 日信息科学与工程学院专心-专注-专业实验题目:buffer lab实验目的:此任务将帮助您详细了解IA-32调用约定和堆栈组织。它涉及对实验室目录中的可执行文件bufbomb应用一系列缓冲区溢出攻击。注意:在本实验室中,您将获得五种方法的经验,其中一种方法通常用于利用操作系统和网络服务器中的安全弱点。我们的目的是帮助您了解程序的运行时操作,并了解这种形式的安全弱点的性质,以便在编写

2、系统代码时避免这种情况。实验环境:个人电脑、Ubuntu 32位实验内容及操作步骤:Level 0: Level 0是要让test函数调用的getbuf函数返回时不返回到test函数而是返回到smoke函数。先反汇编getbuf函数此时栈结构如下也就是说我们的输入要把smoke的地址覆盖掉返回地址smoke的反汇编也就是要输入44个任意字节,然后输入smoke的首地址即可,注意小端法输入,结果发现错误了,后来发现是因为0a是换行的ASCii码,所以会导致gets函数发生错误的识别,因此把0a改成0b跳转至smoke函数第二行,然后成功Level 1: 在level 1中有一个fizz函数,我们

3、需要让test函数返回到fizz,并且我们需要把自己的cookie作为传入参数。这题的返回跳转函数部分与上一题一致。Fizz函数如下getbuf函数反汇编Fizz函数反汇编可以看到,fizz函数的传入值就是ebp+8的位置,也就是说需要将ebp+8的位置改为cookie在getbuf函数返回时,执行leave指令(mov %ebp,%esp 和 pop %ebp)和ret(pop %eip)指令后,esp的位置如图在fizz的反汇编中可以看到,需要将新的ebp定位,就需要将返回地址覆盖为fizz函数的第一行或者第二行,如果是第一行,那么先执行一个push %ebp(%esp-4),此时esp指

4、向的是返回地址处,然后第二行mov %esp,%ebp就会把%ebp指向返回地址处,所以cookie的位置是返回地址的位置+8处而如果是要跳转到第二行,那么cookie的位置为返回地址的位置+12运行结果正确!Level 2: 在level 2中,需要使程序跳转到自己写的一段反汇编代码,将全局变量global_val设置为cookie的值,随后再跳转到bang函数进行验证。思路:把对应的机器码放入buf数组中,使程序执行bang函数。bang函数的汇编看到有一个mov的指令和一个cmp的指令,可以肯定一个是global_value一个是cookie查看一下内存地址,所以我们需要先把cookie

5、存进去,然后利用把bang函数的首地址push进栈,然后利用ret指令返回到bang函数,所以用来黑程序的反汇编代码如下,然后利用objdump翻译成机器码这段机器码可以放在buf的首地址设置断点查看eax的值(buf首地址)然后和之前一样,把返回地址的位置设置为buf的首地址跳转到编写的黑代码结果通过!Level 3: 在level 3中,我们需要改变getbuf()函数的返回值,使返回值为cookie值;恢复test函数中的%ebp寄存器内容,并且使test函数正常继续执行接下来的代码。test函数的反汇编设置断点查看test的ebp所以跟之前一样,把写一段代码,修改ebp,修改cooki

6、e,然后利用push指令返回到call指令下一条指令 结果通过!Level 4: 在level 4中涉及到了两个数:getbufn、testn。从参考文档中可知,这个任务要执行5次getbufn和testn任务是每次要让getbufn返回cookie值,而不是1。由于getbufn旧的ebp会被覆盖,为了保证连续执行,每次执行完要将ebp恢复为testn函数的ebp。然后返回到testn的call的下一条指令。所以恶意代码如下接下里就需要让返回地址跳转到恶意代码,但是5次getbufn要执行5次,这个时候每次执行的ebp都会不一样,buf的首地址也会不一样,所以先设断点查看一下每次执行的buf

7、首地址由于不能够确定首地址到底是什么,所以把全部地址都打印一遍,既然我们跳转到的地址无法确定,那么就可以用nop(机器码90)来填充之前的buf,但是要保证跳转到的位置一定是buf之内,所以要选择最大的首地址。结果通过!实验结果及分析:运行结果全部通过!实验总结:本次实验主要是对于程序运行时栈的结构的知识的复习和运用,一开始我对于栈溢出攻击的理解只是覆盖返回地址,但是往等级后做实验就发现了新的方法,并且在实验过程中也对函数的返回方式也有了更深的理解,我觉得在实验过程中对于栈空间的知识进行了更好的复习,这样的话我觉得要想对知识理解更好,还需要结合运用的,才会对知识认识得更加透彻。实验成绩实验报告撰写说明1实验题目和目的请从实验指导资料中获取。2实验步骤和内容包括:(1)本次实验的要求;(2)源程序清

温馨提示

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

评论

0/150

提交评论