0%

buu刷题记录:[pasecactf_2019]tornado_casino

首先打开py文件看一眼,输3退出,输2再输b33_1_4m_b3333会让某个自减的东西加一千,输1时会生成一个32位的随机数,并且将输入的随机数与其自己生成的随机数比较,相等则返回flag。

那么题目的思路就很明确了:生成624个随机数并且使用randcrack库计算第625个随机数上传即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
from pwn import *
from randcrack import RandCrack
import re

context.log_level = 'debug'

sh = remote('node4.buuoj.cn', 29318)
sh.recvuntil('[3] - Exit\n')
sh.sendline(b'2')
sh.recvuntil('Enter your promocode:')
sh.sendline(b'b33_1_4m_b3333')
sh.recvuntil('[3] - Exit\n')
sh.sendline(b'1')
num = []

rc = RandCrack()
for i in range(624):
sh.recvuntil('[$] - $$$SPIN$$$\n')
sh.sendline(b'$')
sh.recvuntil('It will be:')
sh.sendline(b'1234')
data = sh.recvline()
data = str(data)
data1 = ''
for j in range(8):
data1 += data[4 + 2 * j]
rc.submit(int(data1, 16))
aa = rc.predict_getrandbits(32)
sh.recvuntil('[$] - $$$SPIN$$$\n')
sh.sendline(b'$')
sh.recvuntil('It will be:')
sh.sendline(hex(aa).encode())
sh.recvlines(3)
  • flag: flag{b346a745-1b98-4908-8e2e-7b25d3d5a46f}