计算机系统buflab实验报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

课程实验报告课程名称:计算机系统实验项目名称:buflab专业班级:计科1708姓名:学号:指导教师:完成时间:2019年5月29日信息科学与工程学院实验题目:bufferlab实验目的:此任务将帮助您详细了解IA-32调用约定和堆栈组织。它涉及对实验室目录中的可执行文件bufbomb应用一系列缓冲区溢出攻击。注意:在本实验室中,您将获得五种方法的经验,其中一种方法通常用于利用操作系统和网络服务器中的安全弱点。我们的目的是帮助您了解程序的运行时操作,并了解这种形式的安全弱点的性质,以便在编写系统代码时避免这种情况。实验环境:个人电脑、Ubuntu32位实验内容及操作步骤:Level0:Level0是要让test函数调用的getbuf函数返回时不返回到test函数而是返回到smoke函数。先反汇编getbuf函数此时栈结构如下也就是说我们的输入要把smoke的地址覆盖掉返回地址smoke的反汇编也就是要输入44个任意字节,然后输入smoke的首地址即可,注意小端法输入,结果发现错误了,后来发现是因为0a是换行的ASCii码,所以会导致gets函数发生错误的识别,因此把0a改成0b跳转至smoke函数第二行,然后成功Level1:在level1中有一个fizz函数,我们需要让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指向的是返回地址处,然后第二行mov%esp,%ebp就会把%ebp指向返回地址处,所以cookie的位置是返回地址的位置+8处而如果是要跳转到第二行,那么cookie的位置为返回地址的位置+12运行结果正确!Level2:在level2中,需要使程序跳转到自己写的一段反汇编代码,将全局变量global_val设置为cookie的值,随后再跳转到bang函数进行验证。思路:把对应的机器码放入buf数组中,使程序执行bang函数。bang函数的汇编看到有一个mov的指令和一个cmp的指令,可以肯定一个是global_value一个是cookie查看一下内存地址,所以我们需要先把cookie存进去,然后利用把bang函数的首地址push进栈,然后利用ret指令返回到bang函数,所以用来黑程序的反汇编代码如下,然后利用objdump翻译成机器码这段机器码可以放在buf的首地址设置断点查看eax的值(buf首地址)然后和之前一样,把返回地址的位置设置为buf的首地址跳转到编写的黑代码结果通过!Level3:在level3中,我们需要改变getbuf()函数的返回值,使返回值为cookie值;恢复test函数中的%ebp寄存器内容,并且使test函数正常继续执行接下来的代码。test函数的反汇编设置断点查看test的ebp所以跟之前一样,把写一段代码,修改ebp,修改cookie,然后利用push指令返回到call指令下一条指令结果通过!Level4:在level4中涉及到了两个数:getbufn、testn。从参考文档中可知,这个任务要执行5次getbufn和testn任务是每次要让getbufn返回cookie值,而不是1。由于getbufn旧的ebp会被覆盖,为了保证连续执行,每次执行完要将ebp恢复为testn函数的ebp。然后返回到testn的call的下一条指令。所以恶意代码如下接下里就需要让返回地址跳转到恶意代码,但是5次getbufn要执行5次,这个时候每次执行的ebp都会不一样,buf的首地址也会不一样,所以先设断点查看一下每次执行的buf首地址由于不能够确定首地址到底是什么,所以把全部地址都打印一遍,既然我们跳转到的地址无法确定,那么就可以用nop(机器码90)来填充之前的buf,但是要保证跳转到的位置一定是buf之内,所以要选择最大的首地址。结果通过!实验结果及分析:运行结果全部通过!实验总结:本次实验主要是对于程序运行时栈的结构的知识的复习和运用,一开始我对于栈溢出攻击的理解只是覆盖返回地址,但是往等级后做实验就发现了新的方法,并且在实验过程中也对函数的返回方式也有了更深的理解,我觉得在实验过程中对于栈空间的知识进行了更好的复习,这样的话我觉得要想对知识理解更好,还需要结合运用的,才会对知识认识得更加透彻。实验成绩实验报告撰写说明1.实验题目和目的请从实验指导资料中获取。2.实验步骤和内容包括:(1)本次实验的要求;(2)源程序清单或者主要伪代码;(3)预期结果;(4)上机执行或调试结果:包括原始数据、相应的运行结果和必要的说明(截图);3.实验体会调试中遇到的问题及解决办法;若最终未完成调试,要试着分析原因;调试程序的心得与体会;对课程及实验的建议等。

1 / 10
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功