看了官方 Writeup 之后觉得自己没什么要写的了
这里就更着重强调一些个人的非预期 / 独特 (?) 的解法吧!
本文采用 CC0 1.0 Universal 进行授权
对不起第四问和第六问我是爆破的(对手指)
截取这个部分进行谷歌识图
第一条直接是这个
不能说很像,简直就是一模一样
可是我拿到 0 了耶
__=~ # /players
___=$[] # 0
____=$- # hB
${__:7:1} # s
${____:___:1} # h
${__:7:1}${____:___:1} # sh
其实做的时候是打算打完了洋洋洒洒写一篇博客的,但完赛了发现对于看过龙书的人来说简直 trivial 所以瞬间就不想写了。:(
我使用的是这个积分
结果是
注意由于要满足
最初的想法是对于每一个测试点都可以不断枚举 SIGKILL
试了一下发现题目环境给的测试点所对应的
代码见此
大家都是用 C 写的,这里给一个 Rust 版吧
替换 app.py
没什么好说的;
但笑点解析:
[37, 43, 32, 38, 58, 52, 45, 46, 0, 0, 0, 0, 30, 36, 50, 49, 36, 53, 36, 49, 30, 45, 46, 54, 30, 20, 30, 49, 52, 45, 30, 12, 24, 30, 34, 0, 35, 36, 32, 34, 37, 0, 32, 0, 0, 0, 0, 36, 60]
然后得到 flag{unoAAAA_esrever_now_U_run_MY_cAdeacfAaAAAAe}
全是 A!
因为我偷懒直接输出 answers
变量而不是 answers.json
了,结果拿到的数据全是零蛋!然后我还没反应过来 sanitize 其实是在 app.py
里进行的,以为 answers.json
肯定也被 sanitize 过(有笨蛋)
总之是另寻他路了;ls
了一下发现有个 prerun.py
,看一下发现有这两行
with open("/flag") as f:
flag = f.read().strip()
然后我的手就直接伸到 /flag
那里去了:
flag = open("/flag", "r").read()
flash(f"评测成功,你的平方差为 {flag}")
欢迎来我的博客玩!犬窝闲谭