虎符CTF2022 | MISC | handle
(2022数字中国创新大赛虎符网络安全赛道)
Part of 【COMPASS CTF】 WriteUp
HED CTF HED战队 是 COMPASS 的战队之一
by Frankss@COMPASS
handle (二血 909pt)
思路
(隔壁某show平台上周刚做过某套神类似的题,于是很快就把字典搞出来了,但是交互写了很久丢掉了一血)
思路就是找一个有优势的固定词开头,然后根据返回结果分枝(枝),根据不同枝选择不同的尝试(剪枝),这样接下来要处理的重复量就少很多,重复这个过程两次,几乎每一个可能的词都有对应唯一序列(key)了。
简单统计一下生母韵母音调的频率,但是依据这个找出比较常见的词跑三轮之后会有400+个重复的路线,也就是这400+个词如果抽到大概率失败,算一下成功率pow(1-400/26000,512)是恐怖的万分之三,于是random choice字典里的词开始跑。
跑了十几分钟找到 露己扬才 只有一百多重复,成功率pow(1-100/26000,512)已经提升到了十分之一,决定多跑几次出flag。
P.S.因为成功之后就没有 > 输出了,所以边界条件炸了,在第512轮强制进交互赌第二轮出结果。
脚本
首先是生成字典的函数,kk是第一个固定的开头词,根据每次返回的文本更新键值对,然后对有多个结果的key迭代延长,每次选择第一个可能的结果,最后的重复个数即为有可能失败的词的数量:
# 其余内容和源代码完全一样,节省空间就不粘贴了
with open('idioms.txt', 'r', encoding='utf8') as f: # utf8
idioms = [x.strip() for x in f.readlines()]
def check(guess, answer): # 魔改的check,改返回值为输出内容 方便到时候直接用服务器返回内容更新
guesspy = get_pinyin(guess)
answerpy = get_pinyin(answer)
r = ""
py_results = [check_part(guesspy[i], answerpy[i]) for i in range(3)]
for i in range(4):
for j in

这篇博客介绍了参与2022数字中国创新大赛虎符网络安全赛道的经历,特别是关于一个名为handle的题目。作者利用之前某平台的类似题目创建字典,并通过迭代和剪枝策略减少尝试次数。经过统计和优化,最终通过随机选择和多次尝试成功解题。文章还分享了生成字典和交互脚本的代码,以及提高交互速度的技巧。
最低0.47元/天 解锁文章
1096

被折叠的 条评论
为什么被折叠?



