507. AI Village Capture the Flag @ DEFCON | ai-village-ctf
感谢 Kaggle、AI Village 以及我的竞争对手们,这是一场难以置信的有趣比赛。我很幸运在发现这场比赛时有两周的空闲时间,所以我才能完全沉浸其中,把所有醒着的时间都投入进去。
Hotdog(热狗): 从 Kaggle 上的热狗/非热狗数据集中找了一张真正的热狗图片,这是终极的分类用例。
Math 1-4(数学 1-4): 我已经对这些主题有些模糊的印象,所以在 Google 上搜索了一下,提醒自己如何操作,基本上是按照说明进行的。
WIFI: 我不撒谎,这个问题花了我令人沮丧的大量时间,但最后我尝试根据相关嵌入的最大参数对标记进行排序,这就搞定了。
HOTTERDOG: 我使用了与 THEFT 和 SALT 相同的解决方案,详情请参阅这些部分。
Honorstudent(荣誉学生): 我粗暴地涂黑了一些像素并涂白了一些像素,直到我画的“A”通过为止,非常手工,但也很有成就感!
Secret Sloth(秘密树懒): 我像无头苍蝇一样尝试了一百万种方法,撞了好几天墙,然后比赛主办方提示了信号处理,我尝试了傅里叶变换,但因为我在短时间内尝试了太多东西,我的尝试很草率,没有完成所有步骤,即使那样,我也没玩够它来看到你需要看到的图像部分。然而,在回过头来重新尝试后,注意缩放的 5 行默认逆傅里叶变换让我拿到了 flag。
我也在 Reddit 上找到了原始图像,然后开始在原始图像和加密图像上尝试所有失败的方法,并查看差异。这导致了一组令人不安的图像,我确信我几乎能看到字母。对我来说,这是比赛中相当疯狂的一段时间。
Bad to Good(从坏变好): 这个真的很有趣,我尝试了一些直观的想法,让 Henry 变好,让同学变坏,但无济于事。然后我尝试让它随机游走,看看什么能得到更好的分数,我天真的编码发现最好的游走是当 Henry 有负数的过失时。这给了我一个愚蠢的想法:“如果它对这个最敏感,并且不认为负数是非法的,那就给 Henry -20 个过失,其他的什么都不给”,结果成功了。有趣的挑战。
Inference(推理): 这个很难。我获取了三个不同的手写和打印字符数据集,开始把它们扔给模型,看看哪些字母在 6 个输出中得分最高。起初,我只是寻找任何超过阈值的字母,使用的是未翻转的图像。这是一个糟糕的方法,因为要获得任何有用的字母匹配,你必须将阈值设置得非常高,而且不翻转它们会得到误导性的结果并错过好的字母。正如你从我的解决方案代码中看到的那样,对我最有效的是一种“攀登者”方法,即要作为字母输出候选图像,它必须是迄今为止最好的。另一个关键是翻转图像,正如问题中的提示所暗示的那样。在 Excel 中对候选字母进行了一番疯狂的尝试后,我弄明白了它必须是什么。花了很多功夫,做对了感觉很好。
Baseball(棒球): 一个有趣的问题,没花太长时间,只是通过试错来玩,几乎凭感觉,像玩“冷/热”游戏一样实时调整参数。
WAF: 这很棒,是一个非常有教育意义的研究型谜题。从主办方提供的提示示例字符串中,我发现这是 base64 转换的,他们想要的有效字符串是 'bash'。我不太懂 bash,所以这导致我花了几个小时 Google 和尝试。我明白我的目标是写一个 bash 命令,让 WAF 相信我输入的字符串是一个良性字符串,但我很难以一种真正给我 flag 的方式实现它,要么触发 WAF 检测,要么没做任何酷的事情而只是一个良性字符串。最终,我的搜索让我发现了一个 bash 可以利用的特定且有据可查的弱点:'shellshock',测试该漏洞的代码成功了。链接在我的解决方案代码中。
LEAKAGE(泄漏): 我不撒谎,这个问题暴露了我对 LSTM 和这类模型的不熟悉。我不得不 Google 了几小时,即使那样,起初