TSGCTF2023に参加してました。僕と学科のCTF初心者の方と出て32位でした! 1位や3位の方はソロらしく、流石ですね。
問題の難易度が思ったより高く、Cryptoをメインに解いてました。CTF楽しいね。
Upside-Down Cake (Web, Beginner, easy)
1000文字以上の回文を送信すればいいのだが、送信できるデータ量に制限がある。回文チェックはnodejsで行われており、javascriptのガバガバ仕様を使って回文判定をすり抜ける。
const palindrome = { length: "1000", 0: "a", 999: "a" } const res = await fetch('/', { method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify({palindrome}), }); await res.text(); // TSGCTF{pilchards_are_gazing_stars_which_are_very_far_away}
Unique Flag (Crypto, easy)
flagが33文字でuniqueであることがわかっている。TSGCTF{}で8文字わかっているので、25文字がわからない。 処理を読むと25文字の中で隣接している文字の組の候補がわかる。 uniqueかつ隣接している文字の組の候補を使って25文字で作れる文字列を全部列挙して、人力でflagっぽいのを見つけた。
TSGCTF{OK,IsTHi5A_un1qUe-flag?XD}
Graffiti in the Fog (Misc, easy)
u_i, v_iが知りたいのだが、処理を読むと、u_i * vecs[0] + v_i * vecs[1] * 5 + (-250~250) * vecs[2] + (-250~250) * vecs[3]と4次元直交ベクトルvecsを使った和になっている。 よって主成分分析(PCA)で分離してやればu_i, v_iがでてくる。
ところで画像のUがx, Vがyに対応するのが普通なのにこの問題は逆になってた。そんな流派あるんか…? 授業でPCA習ったばっかだったので進研ゼミでやったとこだあああになった。
読みにくいけど、TSGCTF{CARRY_A_FLASHLIGHT_WHEN_YOU_WALK_AT_NIGHT}
この問題はkeymoonの次に解いたので、2番目に解けた。全体で5人しか解いてなかったのでウレシイ。
感想とか
Converter, Converter2(Pwn)は解法は全部わかったんだけど具体的にどれだけメモリアドレスを動かしてNULL文字を破壊すればいいのかがわからず解けなかった、くやしい… Rev, Pwnあたりはツールの使い方がわからず全然解けなかった。 Q??odeというQRCodeの問題のfirst-bloodを狙ったけど無理だった、結局keymoonだけが解いててちいかわになっちゃった。 他のcrypto問はメンバーの方が解いてくれました。
また参加してぇ~!次回はメンバーをもうちょっと集めてわいわいしたい。