news 2026/9/7 2:22:02

计算机系统基础 bufbomb 实验三

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
计算机系统基础 bufbomb 实验三

听报告无事,顺手写下做过的实验报告,话不多说,开始正文

1、实验目的加深对IA-32函数调用规则和栈帧结构的理解。

2、实验原理对目标程序实施缓冲区溢出攻击,通过造成缓冲区溢出来破坏目标程序的栈帧结构,继而执行一些原来程序中没有的行为。

3

实验题目1、Smoke(让目标程序调用smoke函数)

(答案––smoke.txt)

首先查看汇编代码,可以看到调用了gets函数,存在缓冲区溢出漏洞,缓冲查看缓冲区区大小为40,因此偏移量是40+4,查找smoke函数地址,因为没开PIE,所以是固定的绝对地址0x08049655,因此便得出答案,成功截图如上

实验题目2、Fizz(让目标程序使用特定参数调用Fizz函数)

(答案––fizz.txt)

首先是偏移量与前一题相同,找出fizz函数的地址为0x08049681,由汇编截图可以看出fizz函数会将位于ebp+8即第二个参数与cookie值比较,cookie值为0x28eaa8f8,

因此只需要将cookie覆盖到参数的位置,随后跳转到fizz函数时便可作为fizz的参数,因此构造payload如上图,成功截图如下

实验题目3、Bang(让目标程序调用Bang函数,并篡改全局变量)

偏移量不变,题目要求修改全局变量为cookie值并跳到bang函数,因此想到shellcode,缓冲区的权限为可写可执行,因此将shellcode放在缓冲区开头即可,查看全局变量地址为0x0804E120,cookie值为0x28eaa8f8,查看bang函数地址为0x080496D4,

因此先写出需要的汇编代码再将其转为机器指令,如上图,得出需要的shellcode,接下来通过调试得到缓冲区起始位置,调试图如上,eax的值即为缓冲区起始位置 0x55683a58 ,需要将返回地址覆盖为这个值,随后便可执行shellcode,因此答案以及成功截图如下

实验题目4、Boom(让目标程序返回test函数,但不返回1,而是返回cookie值)

这一题和上一题思路类似,也是构造shellcode,需要将返回值修改为cookie值0x28eaa8f8,并且返回到test函数,因为返回原函数的原因,必须保持ebp不变,透过汇编可以看出返回值存在了eax中,因此需要修改eax的值为cookie,并在修改之后返回到原函数call的下一条指令,地址为0x080497FE,缓冲区起始位置不变

接下来通过调试获得ebp的值为0x55683aa0,构造汇编指令并转为机器指令如上图,因此答案以及成功截图如下

实验题目5、Nitro(让目标程序返回testn函数,但不返回1,而是返回cookie值)

这一题每次运行时栈内的地址会变,即缓冲区起始位置不确定,但代码段的地址不变,即函数的绝对地址不变,模仿了ASLR保护机制,NX没开,方法有很多种,比如说将栈迁移到代码段从而获得固定地址,或者利用jmp esp等特殊gadget,也可以使用滑雪橇。

栈迁移有些麻烦,因此舍弃,尝试第二种方法,利用ROPgadget寻找发现没有合适的gadget,因此行不通,结合高达520字节的缓冲区大小,看来这一题的标准答案便是滑雪橇了

由于栈地址不确定,因此不能直接给ebp赋值,因此可以利用esp与ebp的相对偏移来赋值,由如上汇编可知,一个push和一个sub使esp与ebp相差0x14+0x4,当执行完getbuf的leave ret时esp就指向ebp-0x18的位置,之后再执行shellcode时esp也不会变,随后查看call下一条指令的地址为0x08049879, 接下来通过调试确定缓冲区起始地址的大概范围,通过五次运行,地址最大的一次为0x556838e8,因此将这个作为入口点,前面的字节全是90,也就是eip+1(nop)的机器指令,由此一路滑到shellcode并执行,编写汇编代码并转为机器指令如上图,答案与成功截图如下

套盾

第一次在csdn上发表文章,所以文字排版等方面可能不太熟练,实验中有些细节可能说的不太清楚,欢迎反驳本菜鸟或与本菜鸟交流

₍˄·͈༝·͈˄*₎◞ ̑̑

注:这是第二次修改,刚发布完发现图片转存失败,因为是用手机写的,诸多不便,图片可能不清楚,如果因为此而给一些同学造成困扰的话,我很抱歉,请及时告诉我,我会尽快回答_(:з」∠)_

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/5 12:45:40

MyBatis/MyBatis-Plus类型转换器深度解析:从基础原理到自定义实践

目录前言基本概念一、TypeHandlerTypeHandler作用内置 TypeHandler 的自动映射二、jdbcType 的必要性:处理 NULL 值的核心三、自定义 TypeHandler前言 这篇博客主要讲一下mybatis/mybatisplus框架的类型转换器的相关知识和用法,最近项目有一个技术场景&…

作者头像 李华
网站建设 2026/9/6 13:41:43

sql server自动备份

1.在管理中点击维护计划向导 2.填写任务名称,点击更改 3.选择需要的备份时间,点击确定 4.勾选备份完整数据库 5.点击下一步 6.选择指定数据库 7.选择备份路径 8.选择完成后点击下一步 9.选择清除任务 10.点击下一步 11.点击完成 12.点击执行任务测试是否…

作者头像 李华
网站建设 2026/9/5 0:44:45

vue和springboot框架开发的救援物资管理系统_55j08br6

文章目录具体实现截图主要技术与实现手段关于我本系统开发思路java类核心代码部分展示结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!具体实现截图 同行可拿货,招校园代理 vuespringboot_55j08br6 框架开发的救援物资管理系统…

作者头像 李华
网站建设 2026/9/6 4:12:50

制药行业质量与效率双提升:精益六西格玛的应用路径与价值分析

在全球制药行业面临成本压力持续增大、质量监管日趋严格、研发周期长且市场竞争激烈的背景下,制药企业迫切需要系统性的管理方法来提升运营效率和质量控制水平。本报告旨在深入分析精益六西格玛方法论在制药行业的应用价值,探讨其如何帮助企业实现质量与…

作者头像 李华
网站建设 2026/9/6 12:54:39

vue和springboot框架开发的老人健康信息管理系统_42q6c587

文章目录具体实现截图主要技术与实现手段关于我本系统开发思路java类核心代码部分展示结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!具体实现截图 同行可拿货,招校园代理 vuespringboot_42q6c587 框架开发的老人健康信息管理…

作者头像 李华
网站建设 2026/9/6 19:10:15

学习笔记:Kotlin Flow 操作符

Kotlin Flow 操作符 以下文章来源于RockByte ,作者RockByte. 十分钟速览 Kotlin Flow 操作符 一对一转换 map 将 Flow 中发出的每个元素转换为新元素,实现一对一映射。 fun main() runBlocking {flowOf("Kotlin", "Flow").ma…

作者头像 李华