博多電光

blog.hkt.sh

TSG CTF 2021 作問感想

開催記はゆっくり書きますが、とりあえず一言ずつ。

Beginner's Web (Web, 500pts)

本当にすみませんでした

いや、実はあまり反省してないです。とはいえもうちょっと解かれるかな~と思ってました。

Beginnerかどうかと難易度が高いかどうかは別の軸であることは以前の開催記で触れたとおりですが、この問題により実際に「beginner hard」というジャンルが存在しうることを示せました (ほんまか)。

ちなみにWriteupにも書いたんですがガチCTF未経験者のTSG部員の1人がこの問題を3時間で解いてたので、かなり自信を持ってBeginnerとして出したんですが、実際には彼が天才なだけでした。どうしてこんなことに⋯⋯。

想定解は公式Writeupのとおりです。スマホでも解けます。

Welcome to TSG CTF! (Web, 100pts)

実は今回は開催一週間くらい前にTSGの部員を大量に集めて問題を解いてもらうレビュー会を行ったんですが、その最中に「Beginner's Web が難しすぎる」というフィードバックをもらったので急遽作成しました。

Beginner's Web が難しいのはある程度想定通りだったんですが、「解ける問題があるほうが満足度が高いだろう」ということでガチャガチャいじるだけでも解ける問題にしました。ソースコードがWeb問題史上最短くらいの長さで気に入ってます。

Giita (Web, 500pts)

これも 0 solves なのおかしくないですか? おかしいね

想定解は公式Writeupのとおりです。最近のWeberの嗜みとしてDOMPurifyのソースコードを読んでたときに思いついたんですが、最初に return dirty っていう一文を見つけたときはかなり目を疑いました。

これを問題にする過程で Prototype Pollution を使えばいいっていうのは@kcz146に考えてもらいました。

Beginner's Crypto (Crypto, 126pts)

出オチ。

3つ子素数関連の話は知ってる人は知ってるだろうし、そうでなくてもこの問題を解く過程で絶対ググると思うので解けるという想定でした。かなりいい感じに解かれて嬉しいです。

ちなみに@naan4UGeenはファイルを開いた瞬間に解法がわかったらしいです。

Baba is Flag (Crypto, 162pts)

ECDSAを勉強した際にxというパラメーターを注入する必要があることが不思議だったので、試しに消してみたら脆弱になりました。

問題文にある Baba is You のステージはもうちょっと非自明なステージにしたかったんですがBaba力が足りなくて無理でした。

Flag is Win (Crypto, 278pts)

SECCON 2020 で出題した This is RSA の焼き直しです。今度はちゃんと格子を使ってあげる必要があります。

Coppersmith's Attack が可能になる条件の1つに「素数pの連続しないビット列が既知で、その長さがp全体の69.4%以上」というものがあるのですが、これを使ってる問題を見たことがないな~と思って以前からアイデアを温めてたので上の問題にミックスしました。solve数もわりと想定どおりです。

This is DSA (Crypto, 290pts)

Cryptoのボス問なんですが、それにしてはちょっと弱かったかな~って感じです。

想定解は無駄にp進数とか使ってゴリ押しで解いてるので公開するのが恥ずかしいです。

ちなみに利用したpycryptodomeのバグはすでにプルリクを送ってます以前送ったプルリクとあわせてマージしてほしいな~。

Advanced Fisher (Misc, 365pts)

実はFisherを出した段階から考えてました。ちょっと数字を変えただけで全然違う問題になるのが面白いですね。

Lumberjackシリーズ (PPC)

正確にはAuthorじゃないですがかなりのパートで@naan4UGenと共作したので書いておきます。

実は去年の TSG CTF の作問中に「グラハム数の下からN桁目を求めよ (N < 1e100)」という問題を思いついたんですがどうしても解けず、「なんで解けないのか?」という理由をゴリゴリと詰めていったらこの問題ができました。BBPアルゴリズム、本当に賢いです。

againstは格子を使ったすごいWriteupが上がってますが実は非想定です。想定解はもうちょっとゴリゴリと論理的に詰めていきます。