计算机系统buflab实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程实验报告
课程名称:计算机系统
实验项目名称:buflab
专业班级:计科1708
姓名:
学号:
指导教师:
完成时间:2019 年 5 月29 日
信息科学与工程学院
实验内容及操作步骤:
Level 0:
Level 0是要让test函数调用的getbuf函数返回时不返回到test函数而是返回到smoke函数。

先反汇编getbuf函数
此时栈结构如下
也就是说我们的输入要把smoke的地址覆盖掉返回地址
smoke的反汇编
也就是要输入44个任意字节,然后输入smoke的首地址即可,注意小端
法输入,结果发现错误了,后来发现是因为0a是换行的ASCii码,所以会导致gets函数发生错误的识别,因此把0a 改成0b跳转至smoke函数第二行,然后成功
Level 1:
在level 1中有一个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
运行结果正确!
Level 2:
在level 2中,需要使程序跳转到自己写的一段反汇编代码,将全局变量global_val设置为cookie的值,随后再跳转到bang函数进行验证。

思路:把对应的机器码放入buf数组中,使程序执行bang函数。

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

test函数的反汇编
设置断点查看test的ebp
所以跟之前一样,把写一段代码,修改ebp,修改cookie,然后利用push指令返回到call指令下一条指令
结果通过!
在level 4中涉及到了两个数: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.实验体会
调试中遇到的问题及解决办法;若最终未完成调试,要试着分析原因;调试程序的心得与体会;对课程及实验的建议等。

相关文档
最新文档