問題の解き方
まず配布されたファイルをダウンロードする
最初にフラグがどこにあるのかを確認する
サーバーを攻撃するWeb問題なら、ソースコードを見てみる
特にフラグの場所が明記されてない場合は、Remote Code Executionをしてからサーバー内のフラグを探すケースが多い。わからない場合は運営にフラグの場所を質問をすることもできる。
クライアントを攻撃するWeb問題なら、botのソースコードを見てみる
XSSなどでブラウザに保存されている情報を抜き出す形の問題が多い
明記されてない場合は大抵Cookieに入っている
Cryptoの問題なら、ソースコードを見てみる
暗号文を復号してフラグを手に入れる問題か、ある条件を満たすとフラグが降ってくる問題のどちらかであることが多い
古典暗号などフラグの場所が明記されてない問題は、大抵は平文がフラグである
Pwnの問題なら、ソースコードに明記されてない場合、Remote Code Executionをしてからフラグを探す必要がある。
Reversingの問題なら、フラグの場所は明記されてないことが多い。問題に合わせてどうしたらフラグが出てくるか考える必要がある
Reversingページを参照。時にはGuessも必要になる
その他のジャンルの問題も、まずはどうやったらフラグが手に入るかを考えるとよい
入力された値がどう処理されるかを追ってみる
Webなら、サーバーがどのようなパラメータを入力として受け入れ、どのように処理されるかを追うことで効率よく脆弱性を探すことができる
Pwnに関しても同様
フラグの場所から、フラグを手に入れるために必要な条件を逆算する
例えば、Webの問題でデータベース内にフラグがあるなら、SQL Injectionやそれより強い攻撃が必要になる
→ つまりSQL Injectionの脆弱性があるのでは?と推測できる
他にも、フラグがファイルとして存在しているならLocal File Inclusion以上の攻撃が必要、フラグがadminユーザーしか見れないような場所に存在するならadminとしてのログインが必要……など
この問題は「何をしろ」と言っているのかを理解することが大事
自分が問題に対してできることを整理する
自分が持っているプリミティブを整理する
それをどのように組み合わせて、あるいは発展させて悪用ができるかを考える
検索エンジンを使う
検索エンジンはCTFにおいて最強のツール
「(脆弱性の名前) CTF」などで検索するとよい
過去の似たような問題のWriteupやブログ記事などを読むことで得られることは多い
CTF, Writeup, Exploit, Vulnerabilityあたりがおすすめの検索ワード
CTF Challenges by Category
* crypto: guess the paper
* web: guess the blog post
* pwn: 猜blog post但是中文版
* rev: seek therapy.
https://twitter.com/gf_256/status/1622275916121645056
メタ読みする
「こんなマイナーなライブラリを使っているのだから解法に関係してくるのだろうな」など
Guessする
時には強力な武器となる
TODO: Guess The Flagのブログ入れる
フラグを取引する、バックドアを仕込む、主催者を脅迫するなど
https://scrapbox.io/files/650cf7bb034aec001bc7776b.jpg
https://twitter.com/gf_256/status/1206393845497376768
余談
cursedCTFという何でもありな悪い身内ノリのCTFでは、作問者と交渉してフラグを手に入れるという出来事もあったよう
https://thesavageteddy.github.io/posts/cursedctf-2024/