强网杯2023

4月份报名的比赛终于姗姗来迟,感觉自己终于有点用了

eazyfuzz

发现要我输十个字节让coverage全覆盖

不知道怎么做,乱输一通,发现第五个输入b的时候会覆盖3个1,于是写了一个脚本想爆破出最终的结果:

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
from itertools import product
import string
from pwn import *
context.log_level = 'debug'

letters = string.ascii_lowercase[:26]

perms = product(letters, repeat=8)

p = remote('101.200.122.251',12199)

for perm in perms:
full_perm = ''.join((''.join(perm[:4]), 'b', ''.join(perm[4:])))
print(full_perm)
p.recvuntil('bytes):')
p.sendline(full_perm)
p.recvuntil('rage:')
code = p.recvline('\n')
print(code)
res = 0
for i in code:
if i == 1:
res+=1
else:
res+=0
print(res)
if res > 3:
print(full_perm)
break

但是脚本有点问题,res没有按期望的结果输出,于是我就肉眼观察哪里更改时提高了覆盖率,然后加在脚本里面,经过几轮后发现最后几个字母是Good

于是我就把脚本改成了这样:

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
from itertools import product
import string
from pwn import *
context.log_level = 'debug'

letters = string.ascii_lowercase[:26]

perms = product(letters, repeat=4)

p = remote('101.200.122.251',12199)

for perm in perms:
full_perm = ''.join((''.join(perm[:4]), 'b', ''.join(perm[4:]),'Good'))
print(full_perm)
p.recvuntil('bytes):')
p.sendline(full_perm)
p.recvuntil('rage:')
code = p.recvline('\n')
print(code)
res = 0
for i in code:
if i == 1:
res+=1
else:
res+=0
print(res)
if res > 3:
print(full_perm)
break

后面又肉眼观察了一会得到结果:

aaqwbGood

6cPJu.png

Happy Chess

非常凑巧,前几周看到了b站上的一个翻转棋的视频

那么思路如下:

首先对于初始棋盘来说,只要把白棋或者黑棋的位置都点一遍就可以变成相同颜色

但是规定要240步之内赢10局,所以每局就有步数限制,要在大约24步之内赢一局

所以要进行步骤的优化,优化思路如下:

对于9*9的棋盘如果把一整行或者一整列全部翻转,就会把整个棋盘直接翻转

所以对于每一个可行解,可以通过观察来进行步骤的优化

把每一次的步骤优化到24步以内之后通关即可:

6cXfd.png