flagって何?点数はどう決まる?
CTFの「答え」の正体と、スコアが動く仕組みを完全解説
第2話では開発者ツールのConsoleタブを使ったミニチャレンジを体験しました。今回は少し立ち止まって「そもそもflagとは何か」「CTFの点数はどのように決まるのか」という基本的な仕組みを丁寧に解説します。
CTFに参加すると「flagを提出する」「flagが通った!」という表現をよく耳にします。flagはCTFにおける「正解の証拠」ですが、その正体・形式・隠され方には決まったパターンがあります。このパターンを知っておくと、問題を解く際に「何を探せばいいか」がぐっと明確になります。
🏁 flagとは何か
CTFにおける「答え」の正体
flagは「問題を解いたことを証明するキー」
CTFにおけるflag(フラグ)とは、問題を解いたことを証明するために提出する「合言葉」のことです。サッカーでいえばゴール、クイズでいえば正解の一言に相当します。問題によって隠し方は様々ですが、flagを見つけて大会のシステムに入力すると、そのチームのスコアが加算される仕組みになっています。
flagの特徴をまとめると、①問題ごとにユニークな文字列である、②形式が決まっている(通常は CTF{...} の形)、③大会のシステムがhash比較などで正誤を判定する、という3点が挙げられます。つまりflagは「その問題を本当に解いた証拠」であり、問題ページや隠しファイル・暗号文の中に仕込まれています。
CTFはチームや個人の実力を試す競技です。flagを他の参加者に共有したり、大会終了前にネットに公開したりすることは、競技の公平性を損なう行為です。CTFコミュニティでは「大会期間中のflag共有・公開はしない」というのが基本的なマナーとして定着しています。大会ルールでも明示的に禁止されていることが多いため、必ず確認しましょう。
なお、flagのタイプには大きく2種類あります。静的flag(Static Flag)は、問題を解いた人全員が同じflagを受け取るタイプです。一方、動的flag(Dynamic Flag)は、参加者ごとに異なるflagが割り当てられます。動的flagは「他のチームからflagを盗む」攻撃を防ぐために設計されており、より高度な大会で使われます。この連載では主に静的flagを前提に解説します。
🔑 flagの正式フォーマット
CTF{…}の中に何が入るのか
ほとんどのCTF大会では、flagは決まった形式を持っています。最も一般的なのが CTF{ここに答え} という形式です。波括弧の前の部分(プレフィックス)は大会によって異なりますが、本文の波括弧 { と } で本体を囲む形は共通しています。
🔍 flag形式の分解図
フラグ本体(Body)の部分は、問題ジャンルによって内容が異なります。Web問題なら「脆弱性を突いて入手したトークン」、暗号問題なら「暗号文を解読して得た文字列」、OSINT問題なら「調査した結果の情報」が入ることが多いです。また、一部の問題では CTF{r4nd0m_str1ng_0nly} のようにランダムな文字列だけがBodyに入るケースもあり、これは「このflagを見つけた」という到達確認が目的です。
| 大会名(例) | flagの形式 | 備考 |
|---|---|---|
| 一般的な大会 | CTF{...} | 最も多い形式 |
| picoCTF | picoCTF{...} | カーネギーメロン大学主催 |
| Google CTF | CTF{...} | Googleが年1回開催 |
| 一部の大会 | flag{...} | プレフィックスが小文字 |
| この連載 | CTF{...} | 標準形式を採用 |
大文字・小文字・数字の混在はよくある
flagのBodyには、英字を数字で置き換えた「leet(リート)文字」がよく使われます。例えば A→4、E→3、I→1、O→0 のように置き換えます。S0URCE(SOURCE)や FR1END(FRIEND)のように読めるので、慣れると楽しくなってきます。入力時はコピー&ペーストを使うとタイポを防げます。
📊 点数はどう決まるのか
固定点数制・動的点数制・First Bloodの仕組み
CTFの採点方式は大会によって異なりますが、主に2種類の方式が使われています。特に近年は「動的点数制」が多くの大会で採用されています。
📈 固定点数制 vs 動的点数制
First Blood(ファーストブラッド)とは
問題を最初に解いたチーム・参加者に与えられる称号が「First Blood」です。血文字で “1st” と表示される大会もあり、コミュニティの中では名誉として扱われます。ボーナス点が加算される大会もありますが、純粋に「最初に解いた」という記録が評価されることも多いです。CTF上達の指標のひとつとして、初心者のうちは「First Bloodは取れなくていい、完走することを目指そう」という姿勢で参加すると気楽に取り組めます。
動的点数制の具体的な計算式は大会ごとに異なりますが、「最大500点・最小100点、解く人が増えるほど線形または指数的に点数が下がる」設計が多く見られます。これにより、簡単な問題(多くの人が解ける)は自動的に低い点数になり、難しい問題(少ない人しか解けない)は高い点数のまま維持されます。参加者の腕前に応じたスコア分散が自然につくられる、よく考えられた仕組みです。
🔍 flagはどこに隠れているか
ジャンル別・典型的な隠し場所を知っておこう
CTFでflagを探すとき、「どこを見ればいいか」を知っていると大きなアドバンテージになります。ジャンルごとに典型的な隠し場所があるので、一覧として把握しておきましょう。
HTMLの中に潜む
HTMLコメント(<!-- -->)・JSファイルの変数・Cookieの値・HTTPレスポンスヘッダーなど。今回のチャレンジもこのパターンです。DevToolsのElementsやNetworkタブが武器になります。
暗号・エンコードの奥に
Base64エンコード・シーザー暗号・XOR暗号などで変換された文字列を解読するとflagが現れます。CyberChefなどのツールで様々な変換を試すのが基本アプローチです。
公開情報の隅っこに
画像のExifメタデータ・SNSの投稿・Webサーバーのrobots.txt・公開されたGitリポジトリのコミット履歴などに隠されています。「調べる力」がそのままスコアに直結します。
ファイルの奥深くに
バイナリファイルの末尾・画像の中に別の画像を隠す「ステガノグラフィー」・削除されたファイルの痕跡など。Wiresharkやバイナリエディタが活躍します。
今回のミニチャレンジは「WebジャンルのHTMLコメント隠し」パターンです。このページのHTMLソースに、今回のflagがコメントとして書かれています。開発者ツールのElementsタブ、またはブラウザのページソース表示(Ctrl+U/Cmd+U)で探してみてください。
「ソースを見る」習慣がWeb CTFの第一歩
HTMLコメントはWeb開発者がメモを残したり、デバッグ情報を仮置きしたりするために使います。CTFではその性質を逆手に取り、わざとコメントの中にflagを隠す問題がよく出題されます。「何か怪しいと思ったらまずソースを見る」という習慣を今から身につけておきましょう。
🧩 5分CTFチャレンジ
Elementsタブでソースを覗いてみよう
今回のflagはこのページのHTMLの中にコメントとして隠されています。前回のConsoleタブに続き、今回は「Elementsタブ」または「ページのソース表示」を使ってflagを探しましょう。実際のCTF Web問題でも定番のパターンです。
探し方の手順
①開発者ツール(F12)を開く → ②「Elements」タブを選択 → ③ページ下部のHTMLを見ていく(または Ctrl+F で「CTF{」を検索) → ④コメント(<!-- ... -->)の中にflagが書かれています。見つけたら下のフォームに入力して送信!
このページのHTMLソースにflagが隠れています。開発者ツールのElementsタブか、ページのソース(Ctrl+U / Cmd+U)を開いて、<!-- ... --> のコメントを探してください。
Windowsは F12、Macは Cmd+Option+I で開発者ツールを開き、「Elements」タブを選びましょう。
Elementsタブ内で Ctrl+F(Mac: Cmd+F)を押して「CTF{」と検索すると素早く見つかります。ページのソース(Ctrl+U)でも同様に検索できます。
📝 まとめ+次回予告
今回のポイントを振り返ろう
第3話では、CTFの「答え」であるflagの正体・形式・点数の仕組みを解説しました。flagのフォーマット(CTF{...})と動的点数制の考え方は、これからCTFに参加するうえで必ず役立つ知識です。また、flagの隠し場所を知っておくことで、問題を解くときの「最初の一手」が見えやすくなります。今回のチャレンジでは「HTMLコメントを探す」という、Web問題の最も基本的なパターンを体験しました。
・flagは「問題を解いたことを証明する合言葉」で、提出するとスコアが加算される
・形式は CTF{...} が標準。大会によってプレフィックスが異なる場合がある
・点数は「固定点数制」または「動的点数制」で決まる。近年は動的が主流
・flagを最初に解くとFirst Bloodと呼ばれる。名誉あるが、完走を目指すことが優先
・Web問題ではHTMLコメント・JS変数・Cookieにflagが隠れていることが多い
・今回のチャレンジで体験した「HTMLコメントを探す」はWeb CTF最頻出パターンのひとつ
Q. flagを入力したのに「不正解」になります。なぜ?
最もよくある原因は、大文字・小文字の入力ミスや、余分なスペースが混入していることです。flagはそのままコピー&ペーストするのが確実です。また、CTF{ と } を含めて入力しているか確認してください。プレフィックスを除いた本体だけを入力しても不正解になります。
Q. 静的flagと動的flagはどちらが多いですか?
入門向けの大会(jsCTF・ICTF・CTFtime掲載の初心者向け大会)では静的flagが多く使われています。一方、SECCONやCODEGATEのような上位大会では動的flagを採用しているケースが増えています。この連載では静的flagを前提に問題を作成しています。
Q. 点数が下がるなら、なるべく早く提出した方がいいですか?
動的点数制の場合、早い提出ほど高い点数を得られる可能性はあります。ただし「確実に解いてから提出する」ことの方が重要です。誤った答えを繰り返し提出するとペナルティを設けている大会もあります。焦りは禁物、しっかり解いてから提出する習慣を大切にしましょう。
Q. flag形式のBodyに使える文字に決まりはありますか?
大会によって異なりますが、アルファベット・数字・アンダースコア(_)が使えることがほとんどです。スペースや記号(@、!など)が含まれる場合は、大会の問題文に明示されることが多いです。この連載では英数字とアンダースコアのみを使用しています。
Webの仕組みをCTF視点でおさらい
HTTP・URL・Cookieなど、Web問題の土台となる知識を整理します。第2章(Web編)の入口です。
📚 参考情報
- CTFtime.org — 大会ルール・得点方式の確認に
- 各大会の公式Rules(flag形式・得点ルールは大会ごとに異なります)
- CTFd公式ドキュメント(動的点数制の仕組みの詳細)


コメント