news 2026/4/21 10:00:04

计算机系统基础 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/4/18 8:36:04

RabbitMQ_8_高级特性(完)

延迟队列 概念 延迟队列(Delayed Queue),即消息被发送以后,并不想让消费者立刻拿到消息,而是等待特定时间后,消费者才能拿到这个消息进行消费 应用场景 延迟队列的使用场景有很多,比如&…

作者头像 李华
网站建设 2026/4/18 11:05:19

【电力巡检自动化进阶之路】:从固定路线到自适应动态路径的跃迁策略

第一章:电力巡检Agent路径规划的演进背景随着智能电网建设的不断推进,传统人工电力巡检方式已难以满足高效率、高安全性的运维需求。电力系统覆盖范围广、设备分布复杂,使得巡检任务面临响应延迟、人力成本高和环境风险大等挑战。在此背景下&…

作者头像 李华
网站建设 2026/4/18 12:59:03

每日 AI 评测速递来啦(12.18)

司南Daily Benchmark 专区今日上新!RE2-Bench一个面向真实世界复杂代码的推理评测基准,包含 1,101 个代码推理问题,其中 195 个问题来自成熟的真实世界项目。 https://hub.opencompass.org.cn/daily-benchmark-detail/2512%2014917ViF-Bench …

作者头像 李华
网站建设 2026/4/18 8:56:02

vue和springboot框架开发的拼装模型商城销售管理系统_u6r8w6cp

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

作者头像 李华
网站建设 2026/4/18 8:46:35

1GLOBAL助力Revolut进军波兰移动套餐市场

技术驱动型全球移动通信提供商1GLOBAL深化与Revolut的合作伙伴关系,将这家领先新型银行的移动数据套餐服务拓展至波兰市场。 通过在其多功能应用中集成1GLOBAL的eSIM功能,波兰地区已加入候补名单的Revolut客户只需轻点几下,即可享受捆绑式移…

作者头像 李华