上級編へのレベルアップ|実務で使われる脆弱性とは
「CTF実践編」全10話を完走したあなたへ。ここから始まる「CTF上級編」全10話は、CTFの出題テクニックではなく、実際の侵害事例やCVEで繰り返し登場する「脆弱性クラス」そのものに向き合います。第1話は、実践編で学んだ2つの技術を使って、上級編の受講資格を自分の手で証明するウォームアップです。
📋 目次
🔄 「CTF実践編」から「CTF上級編」へ
前作の続き、ここからは「現場の脆弱性」を学びます
実践�話、お疲れさまでした
「CTF実践編」全10話では、IDOR・JWT偽造・プロトタイプ汚染・RSA暗号の弱点・ECBモードのパターン漏洩・メモリフォレンジック・複数ログの相関分析といった、本格的𰚬TFで頻出する中級テーマを、複数ステージを繁ぐ形式で体験してきました。最終回では、それらすべてを1つのインシデント対応シナリオに統合しました。
「CTF上級編」全10話は、その先に進みます。ただしゴールは「もっと難しいCTF問題を解く」ことではありません。本シリーズが扱うのは、実際の大規模な侵害事例の調査報告書や、CVE(共通脆弱性識別子)の解説記事で繰り返し登場する「脆弱性クラス」そのものです。SSRF・SSTI・パディングオラクル攻撃・レースコンディション・クラウドIAMの権限昇格・OAuth/SSOの設計ミス・XXE――これら𰛼TFの世界だけの架空の概念ではなく、現役のペネトレーションテストーやセキュリティ診断員が実務で実際に向き合っている脆弱性です。
この話の前提知識
第1話では、実践編で学んだ次の2つの技術を組み合わせます。不安な場合は先に振り返っておくと、チャレンジがスムーズに進みます。
- 実践編 第2話「IDORで他人の情報を覗く|権限昇格チェーン」
- 実践編 第3話「JWTを偽造する|alg:noneと弱い署名鍵」
本シリーズの対象読者は、『CTF実践編』を読み終えた方、またはIDOR・JWTの基本的な仕組みを知っている方です。実践編の知識を前提に話を進めるため、第2話以降も毎回「前提知識ボックス」で関連する話を案内します。
🧩 なぜ「脆弱性クラス」を学ぶのか|CTFと実務の違い
フラグを取ることと、脆弱性を「説明できる」ことの違い
CTFの問題は、最終的に「1つの正解フラグ」を提出すれば終わりです。しかし実務のセキュリティ診断やバグバウンティでは、フラグの提出に相当する場面はほとんどありません。代わりに求められるのは、「この脆弱性がなぜ生まれたのか」「どこまでの被害につながるのか」「どう直せば再発しないのか」を、開発チームに伝わる言葉で説明することです。
| 観点 | CTFのフラグ探し | 実務の脆弱性診断 |
|---|---|---|
| ゴール | 1つの正解フラグを見つける | 脆弱性の存在と影響範囲を示す |
| 評価基準 | 正解/不正解の二択 | 深刻度(CVSS等)・再現性・修正可能性 |
| 後工程 | フラグ提出で終了 | 報告書化→修正依頼→再テスト |
| 「なぜ起きたか」 | 問われないことが大半 | 報告書の核。再発防止のために必須 |
本シリーズが扱𰑧つの脆弱性クラス(SSRF・SSTI・パディングオラクル攻撃・レースコンディション・クラウドIAM権限昇格・OAuth/SSOの落とし穴・XXE)は、いずれも「なぜ起きるか」という構造そのものに名前がついた攻撃手法です。たとえばSSRFは2019年に大手金融機関で発生した大規模な情報漏洩事件の起点として広く知られるようになりましたし、パディングオラクル攻撃はPOODLE・Lucky13といった名前のついた一連の攻撃手法群の基礎になっています。フラグを取って終わりにせず、「なぜこの種類の脆弱性が生まれるのか」という構造を持ち帰ることが、本シリーズで一番大事にしたいポイントです。
CVE・診断レポートを読めるようになる
セキュリティ系のニュースサイトやCVEの解説記事には、「SSRFにより内部メタデータサービスへの到達が可能」「パディングオラクルにより暗号文の復号が可能」といった専門用語がそのまま使われます。本シリーズで体験する脆弱性クラスの名前と仕組みを知っておくと、こうした記事をニュースとして読み流すのではなく、技術的な内容として理解できるようになります。
📊 上級編の進め方|前提知識とスコアリング
スコアの仕組みは実践編からそのまま縮続
ウィジョットの仕組み(ステージ制のサブフラグ・常時クリック可能なヒント・ヒント1個につき-15点の減点・全ステージ解決時に1回だけ確定するスコア)は、実践編からまったく変更していません。すでに実践編で慣れている方は、そのままの感覚で進めて大丈夫です。
シリーズ合計スコアは本シリーズ専用に1000点満点でリセット
実践編のシリーズ合計スコア(1000点満点)とは別に、本シリーズ専用の合計スコアを1000点満点で新しく数え始めます。localStorageのキーも実践編とは別のctfexp_progressを使うため、互いのスコアが混ざることはありません。
本シリーズではテーマの性質上、「脆弱なサーバーの振る舞いを、ページの中だけで安全に再現したミニチュア環境」を毎話用意します。実際のクラウドAPIや実際のファイルシステムには一切アクセスしません。すべて学習用に作られた、架空の会社・架空のサービスを舞台にしています。
🔐 実践チャレンジ:受講ポージートで受講資格証を発行せよ
IDORで鍵を見つけ、JWTで証明する
架空の𰃌TF上級編 受講者ポージート」には、受講生IDで他の受講生のプロフィールを検索できる機能があります。本来は自分のプロフィールしか見られないはずですが、IDをそのまま変更するだけで他人のプロフィールが見えてしまいます(実践編第2話で学んだIDORと同じ発想です)。あなたのID�です。他のIDを試して、インストラクーのプロフィールを見つけてください。
上のIDで検索してみましょう。
ステージ1をクリアすると、ステージ2が解放されます。両方クリアした時点でスコアが確定します。
📊 ステージ進捗: 0/2|挑戰回数: 0回
上の検索で、インストラクー(指導員)のIDを見つけ、INSTR-〇〇〇〇形式で入力してください(例:INSTR-1234)。
自分のID�)の前後の数字を1つずつ試してみましょう。同じ4桁の範囲には他の受講生もいます。
受講生とインストラクーでは、IDの先頭の数字が違うかもしれません。9001を検索してみてください。
インストラクーのプロフィールクイに書かれていた署名鍵を下に入力し、payloadのroleを"graduate"に書き換えて「発行して提出」を押してください。
参考:現在trainee向けに発行されているサグメント例:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ0cmFpbmVlMDg3Iiwicm9sZSI6InRyYWluZWUifQ.GDYWTUHa9RYDjR5JKECIknWn710zX6NsMFfL7MRjPeU
🎓 受講資格証が発行されました
下の文字列を、この下の送信欄にそのまま入力してください:
CTF符号の文字列がここに表示されます
JWTは「ヘッダーをBase64url化した文字列」+「.」+「カイロードをBase64url化した文字列」を、署名鍵でHMAC-SHA256署名したものです。このラベではそれを自動で行います。
payloadの"role"を"trainee"から"graduate"に書き換えてから、見つけた署名鍵を入力して発行してみましょう。
🔗 IDORとJWT、なぜこの2つが「入口」なのか
「アクセス制御」と「信頼の証明」、2つの土台
IDORは「誰がどのデータにアクセスできるか」というアクセス制御の問題です。JWTは「このトークンは本当にサーバーが発行したものだと、どう証明するか」という信頼の証明の問題です。この2つは見た目も難易度も異なりますが、実は同じ問いに行き着きます――「サーバーは、クライアントが送ってきた情報をどこまで信じてよいのか」という問いです。本シリーズの②以降で扱うSSRF・SSTI・XXEも、根っこにあるのは同じ問いです。サーバーが外部からの入力(URLでも、テンプレート変数でも、XMLでも)をうのみにしてしまうと、思わぬ場所への到達を許してしまいます。
「信頼境界」という考え方
セキュリティの実務では、「どこまでが信頼できる領域で、どこからが信頼できない領域か」という境界線を「信頼境界(トラストバウンダリ)」と呼びます。IDORは「他人のデータへのアクセス」という境界、JWTは「サーバーが発行した情報かどうか」という境界の崩れです。第2話以降で学ぶSSRF・SSTI・XXEも、すべて「信頼境界がどこで崩れるか」という同じレンズで見ると、初めて出会う脆弱性でも構造が読み解きやすくなります。
📝 まとめ+FAQ+次回予告
受講資格証、発行完了
第1話では、新しい技術は教えずに、実践編で学んだIDORとJWT偽造を繁ぐ体験をしました。次回からはSSRFをはじめとした新しい脆弱性クラスが次々登場します。1話ずつ確実にクリアして、シリーズ合計スコアを伸ばしていきましょう。
・CTF上級編は「CTFのテクニック」ではなく「実務の脆弱性クラス」を学ぶシリーズ
・ステージ制サブフラグ+ヒント減点制のスコアリコ゠は実践編からそのまま縮続
・IDORとJWTという実践編の技術を組み合わせて「受講資格証」を発行した
・第2話からはSSRF・SSTI・パディングオラクル攻撃など、新しい脆弱性クラスが続々登場
・進捗・スコアは実践編とは別のlocalStorageキー(ctfexp_progress)に保存、外部送信なし
Q. 実践編を読んでいなくても上級編は理解できますか?
各話の前提となる技術は「前提知識ボックス」で実践編の該当話を明記しています。本話であれば実践編第2話(IDOR)と第3話(JWT偽造)が前提です。不安な場合は先にそちらを読んでから挑戰すると理解がスムーズです。
Q. 上級編で学ぶ脆弱性クラスは、実際の企業のシステムでも今でも見つかるのですか?
はい。SSRF・XXE・レースコンディション・IAM権限昇格などは、バグバウンティプログラムの報奨金対象として今も頻繁に報告されています。脆弱性そのものは何十年も前から知られていますが、新しいクラウドサービスやフレームワークが登場するたびに、同じ構造の問題が形を変えて再発しています。
Q. 今回の「受講資格証」はなぞroleを書き換えるだけで通ってしまうのですか?実際のサービスも同じくらい簡単に偽造できますか?
今回のチャレンジは「署名鍵さえ知っていれば誰でも有効な署名を作れてしまう」というJWTの性質を体験するための設計です。実際のサービスでは、署名鍵は環境変数やシークレット管理サービスで厳重に管理され、漏洩しないことが前提になっています。本話のシナリオは、IDORのような別の脆弱性経由で鍵そのものが漏れてしまった場合に何が起きるかを示しています。
Q. スコアやプロフィール検索の履歴はどこかに送信されますか?
送信されません。実践編・前々作と同様、すべてブラウザのlocalStorage(あなたの端末内)だけに保存され、外部のサーバーには一切送信されません。
SSRFでクラウド内部に侵入|メタデータエンドポイントの罵
サーバーに「代わりにURLを取得させる」機能の危険性と、クラウドの内部メタデータサービスへの到達を体験します。
📚 参考情報
- 𰃌TF実践編」第2話・第3話(本話の前提知識)
- OWASP Top 10(権限管理・認証関連の分類)


コメント