计算机系统buflab实验报告.docx

上传人:b****6 文档编号:12668007 上传时间:2023-06-07 格式:DOCX 页数:10 大小:728.84KB
下载 相关 举报
计算机系统buflab实验报告.docx_第1页
第1页 / 共10页
计算机系统buflab实验报告.docx_第2页
第2页 / 共10页
计算机系统buflab实验报告.docx_第3页
第3页 / 共10页
计算机系统buflab实验报告.docx_第4页
第4页 / 共10页
计算机系统buflab实验报告.docx_第5页
第5页 / 共10页
计算机系统buflab实验报告.docx_第6页
第6页 / 共10页
计算机系统buflab实验报告.docx_第7页
第7页 / 共10页
计算机系统buflab实验报告.docx_第8页
第8页 / 共10页
计算机系统buflab实验报告.docx_第9页
第9页 / 共10页
计算机系统buflab实验报告.docx_第10页
第10页 / 共10页
亲,该文档总共10页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

计算机系统buflab实验报告.docx

《计算机系统buflab实验报告.docx》由会员分享,可在线阅读,更多相关《计算机系统buflab实验报告.docx(10页珍藏版)》请在冰点文库上搜索。

计算机系统buflab实验报告.docx

计算机系统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.实验体会

调试中遇到的问题及解决办法;若最终未完成调试,要试着分析原因;调试程序的心得与体会;对课程及实验的建议等。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2