Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
owasp-ctf — セキュリティ学習イベント向けのセルフホスト型CTFコントロールプレーン:チーム登録、ライブリーダーボード、およびpatch-to-score、クイズ、jeopardy、AIチャレンジの各モジュールを1台のDocker Compose環境で提供。 | Kitploit
ツール/GitHubGitHub/owasp/owasp-ctf
コンテナセキュリティ脆弱性分析セキュリティ仮想化ウェブセキュリティCTFペネトレーションテストDevSecOps学習と教育学習パスとコースラボと実践
GitHubowasp/owasp-ctf

owasp-ctf

セキュリティ学習イベント向けのセルフホスト型CTFコントロールプレーン:チーム登録、ライブリーダーボード、およびpatch-to-score、クイズ、jeopardy、AIチャレンジの各モジュールを1台のDocker Compose環境で提供。

113117時間9分前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
リポジトリを見るウェブサイト

OWASP

OWASP CTF

セキュリティ学習イベントのためのセルフホスト型コントロールプレーン — 1 台のマシン、1 つの無料 GitHub org で完結。
大学、高校、OWASP チャプター、ミートアップで運用できます。

ci docs license MIT

競技者リーダーボードのウォークスルー: スコア推移グラフを走査してその時点での各チームの得点を読み取り、首位チームを展開してそのメンバーとターゲットごとのフラグを表示する。各フラグは patched または open とマークされ、対応する OWASP カテゴリにリンクされている

キットでの作業 (人間とエージェント)

コードを書く前に AGENTS.md を読んでください。これは運用マニュアルであり、 CI が実行する正確なコマンド、このリポジトリがすでに遭遇した障害モード、 そして docs/reviewing.md にあるレビュー不変条件が記載されています。 CLAUDE.md は同じファイルへのポインタです。

変更が準備完了となるのは、CI がグリーンであり かつ 最新コミット上の すべての実行可能な CodeRabbit スレッドが解決済み (または記録上で却下) されたときです。 コミットは Conventional Commits に従い、AI による帰属表示を含みません。

小さく仕様が明確な作業には good first issue タグが付いています。 新しいモジュールは PR ではなく issue として始まります — CONTRIBUTING.md を参照してください。

これは何か

単一のゲームではなく、コントロールプレーンです。 このボックスはイベントに共通の 背骨を与えます — GitHub org、チーム登録、ライブリーダーボード、主催者用 管理パネル、そしてそれを支えるスコアリングパイプラインです。モジュールが チャレンジコンテンツをその背骨に接続し、任意のサブセットを単独または組み合わせて 実行できます: パッチ・トゥ・スコアの Secure Development、Quiz バンク、 Jeopardy ボード、そして外部ホスト型の AI チャレンジ。モジュール 契約 が背骨とコンテンツの境界であり、 そのためこのボックスはさらなるモジュール — フォレンジック、API セキュリティ、クラウド — を 登場し次第ホストできるように作られています。

なぜ存在するのか。 Secure Development モジュールは攻撃ではなく防御を教え、 安全なコーディングを教えるための真に優れた方法です。これまでは、1 回実行するには Vercel、Upstash、Lambda、DynamoDB を立ち上げ、クラウドの請求を負担し、 プライベートなスコアリングイメージへのアクセスが必要でした。予算のあるカンファレンスにとっては 妥当な要求です。しかし大学のセキュリティコース、高校のクラブ、OWASP チャプターの 夜会、週末ワークショップにとっては不合理な要求です。

このキットはそれを取り除きます。すべては、すでに手元にある 1 台のマシン — ノート PC、予備のデスクトップ、小さな VPS — 上の Docker Compose から実行され、 フォーク用に 1 つの無料 GitHub org があれば十分です。6 つのターゲットすべての ルーブリックがボックス内に同梱されているため、要求すべきプライベートイメージも、 書くべきスコアリングコードもありません。課金もなく、外部への通信もなく、 イベントが終わったらリポジトリをアーカイブしてスタックを停止するだけです。

対象者: このイベントを運営したいが、そのためにクラウドオペレーターに なりたくない人 — コース講師、クラブ主催者、OWASP チャプターリード、 ワークショップファシリテーター、社内トレーニングデーを運営するセキュリティチーム。

ステータス

デプロイ済みでエンドツーエンドで検証済み。ただし実際のコホート向けにはまだ未実行。 完全なスコアリング経路はキット内に同梱されています — スコアラーの bearer 認証付き POST /score、フォーク用の自己完結型スコアリングワークフロー、ポーリングトランスポート — そして scripts/smoke.sh がそのパイプライン全体をモックに対して駆動します。さらに、 このキットはこのリポジトリが同梱するのと同じ Compose ファイルからホストされたボックス上で 継続的に稼働しており、GET /health はそれを提供している正確なリビジョンを報告し、 そのライブインスタンスに対するエンドツーエンドのパスで、多数の実際の欠陥が 発見・修正されました — モック化されたスイートでは見えない類のものです。

まだ起きていないのは実際のイベントです: 競技者のコホートが実際のフォークに対して 実際の PR を、同時に、何時間も開くこと。これが「パイプラインは動く」と 「パイプラインは 40 人で動く」の間のギャップです。2 つの注意点は埋もれさせず 明示されています: Security Shepherd の結果マッチャーには明記された残存限界があり (異常な言い回しの拒否が依然として solve と読まれる可能性がある — 正しいパッチを 過小評価することはあっても、無償の得点を与えることは決してない)、 完全なコホートの負荷プロファイルは未検証です。詳細と現在の状態: Status and upstream dependencies。

これは何ではないか

  • 汎用 CTF プラットフォームではない。 CTFd は成熟し、 実戦で鍛えられ、大規模なプラグインエコシステムを持っています — 最大限の柔軟性を備えた 従来型の jeopardy や attack-defense イベントを望むなら、CTFd を使ってください。 このキットの Jeopardy モジュールは意図的に CTFd より小さく作られています。
  • ホスト型の練習ジムではない。 picoCTF は 運用ゼロでカリキュラムとチャレンジを提供します — 自分のコンテンツと名簿で 自分のイベントを運営する必要がないなら、そちらの方が良い答えです。
  • 攻撃トレーナーではない。 主力モジュールはエクスプロイトではなく パッチを採点します。競技者は脆弱性を修正し、パイプラインがその修正を証明します。

これらのツールがやらないことを、このキットはやります: GitHub プルリクエストを通じて 採点されるパッチ・トゥ・スコアの防御トレーニング、1 つのリーダーボード上で ゲームタイプを混在させるためのモジュール契約、そしてエンドツーエンドで自分が所有する コントロールプレーン — 1 台のボックス、1 つの無料 org、クラウド請求なし、テレメトリなし。

このプロジェクトは OWASP Foundation と提携しておらず、承認も受けていません。 6 つの脆弱なターゲットのうち 4 つは OWASP プロジェクトです (Juice Shop、WebGoat、 Security Shepherd、VulnerableApp)。DVWA と VAmPI はコミュニティプロジェクトです。

クイックスタート

2 分で動作を確認 — GitHub org も OAuth アプリも不要、設定するものは何もありません。 必要なのは Compose v2 付きの Docker と openssl だけです:```sh git clone https://github.com/dcotelo/owasp-ctf cd owasp-ctf ./scripts/dev-stack up

root@kitploit:~
使い捨てのローカルシークレットを書き込み、スコアラーとアプリのイメージをビルドし、スタックを起動し、スコアラーの実際のスコアリングAPIを通じてデモリーダーボードをシードし、開くべきURLを表示します。シードされたチームとスコアの時系列グラフが表示されたリーダーボードが確認できるはずです。`./scripts/dev-stack score <login> juice-shop 3` でさらに3件のsolveがライブで反映されます。`./scripts/dev-stack down` で破棄します。

**ガイド付きウィザードで実際のイベントを実行する**。**[`gh`
CLI](https://cli.github.com)**(認証済み)を追加し、イベントでSecure Developmentを実施する場合は**無料のGitHub orgを1つ**追加します。`./setup/ctf-setup.sh check` が最初にツールを検証します:```sh
./setup/ctf-setup.sh            # guided, prompts for values, resumable

各値を順に尋ねます — ボックスの URL、イベント org、管理者 ログイン、Secure Development を実行するかどうか、GitHub 認証情報 — そして .env を書き込み、 自動化可能なすべてのステップを実行し、GitHub UI 上のステップを案内し、 中断して戻ってきても再開します。それ以外のすべて(イベント名、実行する モジュール、対象)は実行時の /admin 設定なので、編集すべき設定ファイルは ありません。実際に必要なものだけを尋ねます。Secure Development のないイベントには org もフォークもスコアラーイメージも不要で、 それらについて尋ねられることはありません。変更を伴うステップは --dry-run で プレビューできます — すでに完成した .env からステップ 4〜9 を説明し、管理者ログインがない場合、または Secure Development がオンで org がない場合には(設計上)拒否します。ウィザードは ./setup/ctf-setup.sh doctor の実行で締めくくられます — これはいつでも再実行できる フォークごとのステータスマトリクスです — その後、オプションの fly.io デプロイ(デフォルトは no)を提供するので、同じイベントを公開ホスト名に載せるのも ガイド付きのフロー — ホスト名、プレビューされたデプロイ、そして確認 — となり、 デプロイドキュメントを読み漁る旅ではなくなります。

The ctf-setup.sh guided wizard: ASCII banner and step-by-step prompts

詳細を知りたいですか? 個々のサブコマンド、各 UI 専用ステップ、そして 2 つの GitHub アプリの違い: docs/hosting.md。 クラウドでやりたい? docs/aws.md(Terraform:ECS Fargate、 ElastiCache、ALB — apply で起動 / destroy で停止)または docs/fly.md(Fly マシン 1 台)。

モジュール

Secure Development — 意図的に脆弱なアプリをフォークし、欠陥を見つけ、 修正し、PR を開きます。フォーク内の GitHub Action が対象のルーブリックを パッチに対して実行し、スコアがリーダーボードに反映されます(ポーリング モードでは約 30 秒後)。6 つの対象、321 のチャレンジ。未修正なら 0 点、正しい パッチはその点数を獲得 — 両方向でゲートされます。GitHub org とスコアリング パイプラインが必要です。

Quiz — 単一選択および複数選択のセキュリティ問題で、回答した瞬間に アプリ内で採点されます(複数選択は全問正解か 0 点か)、試行回数の上限と 再試行クールダウン付き。/admin から 1 問ずつ作成するか、1 つの JSON バンドルとしてインポート・エクスポートできます。GitHub もフォークも パイプラインも不要です。

Jeopardy — カテゴリ別に主催者が作成したフラグのボード。 提出はトリムおよび正規化され、フラグが大文字小文字を区別するよう マークされていない限り(そのカードに明記されています)大文字小文字は 許容され、提出クールダウンとオプションの有料ヒントがあります。クイズと 同じ /admin + JSON バンドルでの作成です。こちらも GitHub は不要です。

AI — ボックスの外部でホストされるプロンプトインジェクションおよび ガードレールのチャレンジ。各参加者のチャレンジページは、外部サイトへの 個人用起動リンクを発行します。解答は、そのサイト自身のコールバックを 通じて、またはアプリに戻って入力されたフラグを通じて、リーダーボードに 報告されます。GitHub もフォークもパイプラインも不要です。

有効にしたモジュールの周囲に、プラットフォームは以下を提供します:キャプテン、 参加コード、/join/<code> リンクを備えたチームのセルフ登録(ソロプレイは 1 人のチーム。複数のチームメイトが解いたフラグは 1 回としてカウント)。 実際の解答ごとのタイムスタンプから生成される CTFd スタイルのスコア推移 グラフを備えたライブリーダーボード。許可リスト方式の /admin パネル — フリーズ、スコアリングおよび登録の時間枠、ヒントとコスト、チーム上限、 クールダウン、モジュールコンテンツ、参加者ごとのサポートアクション、 アクティビティストリームとエンゲージメント指標 — すべて実行時で、 再ビルド不要。そしてすべての管理者アクションに対する上限付きの監査ログ。

参加者内訳チャレンジブラウザ
A contestant's row expanded: per-module totals, then per-target progress with each challenge's patched or open stateThe challenge browser: one card per vulnerable app, expandable to every challenge with its point value and OWASP category, searchable by challenge, app or OWASP code
Jeopardy フラグボードQuiz
The Jeopardy board: challenges grouped by category as compact tiles — title, points, and a green check once solved — each opening the challenge's own page with the description and flag formThe quiz: single- and multi-select questions, each showing its point value and remaining attempts, graded on submit

Captured from the contestant app running locally via scripts/dev-stack up with seeded demo players. Targets and fork links are event-config driven; the event name and the rest of its branding are admin-panel settings.

仕組み

1 つの Docker Compose スタック:Caddy が Next.js アプリの前段で TLS を 終端します。アプリは srh(Upstash 互換の REST プロキシ)を通じてのみ Redis と通信します — ネットワークは分割されており、インターネットに 面するものは redis:6379 へのルートを持ちません。 Quiz、Jeopardy、AI はアプリ内で採点し、ポイントを直接 Redis に 記録します。Secure Development はボックスの外部で採点されます: 参加者のフォークが GitHub Action を実行し、対象を起動して、パッチに対して ルーブリックを実行し、PR に機械可読なスコアコメントを投稿します。sync ポーラーがそれらのコメントを取得します — インバウンドのネットワーク サーフェスはゼロなので、ボックスは NAT の背後や会場の wifi でも動作します (これが唯一のトランスポートです:プッシュ取り込みは v0.6 で削除されました。 #377 を参照)。スコアは 単一の監査済みライターを通じて入ります: スコアラーのベアラ認証された POST /score で、これは検証して単調に 書き込みます — 解答が後から失敗した実行によって未解答に戻ることは ありません。

Animated diagram. A contestant answers quiz and Jeopardy challenges in the app, and opens a patch PR against a fork in the event org. The fork's Action runs the rubric and posts a score comment on the PR. Sync pulls that comment about every 30 seconds, needing no inbound network surface: polling is the one score transport, the push branch that once let the Action POST straight to the scorer having been removed in v0.6 per issue 377. The score enters through one audited writer, the scorer's bearer-authed POST /score, which validates and writes monotonically into redis, and the app renders the live leaderboard from it.

全体像 — コンポーネント、9 ステップのスコアデータフロー、セキュリティ モデル — は docs/architecture.md にあります。

Secure Development:対象とルーブリック

このモジュールのコンテンツは、脆弱な対象のセットとその採点用 ルーブリックです。参加者は対象を選び、org のコピーをフォークし、 パッチを当て、PR を開きます。各対象のチャレンジは実行可能な node:test スイートで、難易度によって価格が設定されています。

Counts are maintained by hand and pinned to the vendored rubric by apps/web/src/lib/tests/apps-catalogue.test.ts — re-check them after a vendor-rubric.sh bump. Reference patches that prove a correct fix scores (the positive-direction gate) live separately under patches/.

ルーブリックは scorer/rubric.owasp/ にあり、 OWASP-CTF/dc34-owasp-secure-development-ctf からベンダリングされ、scorer/rubric.owasp/PROVENANCE.md に記録された 単一のアップストリームコミットに固定されています。より新しいコミットに対して 再ベンダリングするには:```sh ./scripts/vendor-rubric.sh --all --ref

root@kitploit:~
2つのルーブリック形式が同時にサポートされており、1つのルーブリックディレクトリで両方を混在させることができます。`<target>.yaml` ファイルは宣言的なHTTPリクエスト/期待値プローブ文法を使用し、`<target>/tests/challenges/` ディレクトリは `catalogue.<target>.json` によって価格設定された実行可能テストを使用します。作成ガイド:
[docs/scorer.md](https://github.com/owasp/owasp-ctf/blob/main/docs/scorer.md)。

**ルーブリックの秘匿性について。** これらのルーブリックは公開されています。ターゲットはオープンソースであり、その解答はすでに公開されているため、このキットはルーブリックの秘匿性を、答えを知られることに対する保護ではなく、チェックゲーミングに対する保護として扱います — これはセルフホスト型イベントにおける許容されたトレードオフです。いつでも独自のプライベートルーブリックで上書きできます:```sh
cp -r /path/to/private-rubric scorer/rubric
docker build -t ghcr.io/<org>/score:latest --build-arg RUBRIC_DIR=rubric scorer/

scorer/rubric/ は gitignore されており、まさにこの用途のために予約されています。

イベントの実行

スタックが EVENT_URL で起動したら:

  • 参加者 は GitHub でサインインし、チームを結成または参加します — スコアを付けるにはチームが 必要で、Play solo を使えばワンクリックで 1 人のチームを作成できます。その後、有効にした モジュールをプレイします: セキュア開発ではパッチ&PR、クイズとクラシックではアプリ内で回答・ 提出、ai では個人用ローンチリンクを開きます。
  • 主催者 は /admin を操作します: リーダーボードの凍結、登録の開始と終了、スケジュールの 設定、クイズ問題・クラシックチャレンジ・ai チャレンジの作成 — そして 1 人の参加者が行き詰まった ときは、イベントをリセットするのではなくその参加者だけを修正します。
  • ポーラーを監視 するには docker compose logs -f sync を使います(secure-development を 有効にして実行されます)。すべての状態は名前付き Docker ボリュームに保存されるため、マシンが 再起動しても何も失われません。
  • 終了したら、./setup/ctf-setup.sh teardown でターゲットリポジトリをアーカイブします — その後、GitHub App をアンインストールし、org の Actions シークレットを自分で削除してください。 secure-development のないイベントにはアーカイブすべきフォークはありません。

チーム、管理パネル、当日前のキット検証、ローカル開発スタックについては docs/operations.md で扱っています。前提条件、スコアの転送、OAuth の設定、 イベント設定については docs/hosting.md を参照してください。

なぜこのように作られているのか

  • 自己完結、クラウド不要。 すべては 1 台のマシン上の Docker Compose と 1 つの無料 GitHub org から実行されます。ルーブリックはキットに同梱されています — 要求する必要のあるプライベート イメージも、書く必要のあるスコアリングコードもありません — そしてすべてが名前付き Docker ボリューム上で再起動を生き延びます。
  • そのままではゼロ点、パッチが点を稼ぐ。 すべてのターゲットはゲートされています: 未パッチ のアプリに対してパスするテストは全参加者にとっての無料点になってしまうため、 ビルドはそれを出荷することを拒否します。
  • インバウンドネットワーク面ゼロ。 あなたのマシンに到達する必要のあるものは何もありません — スコアコメントのために GitHub をポーリングするだけです — そのため、キャンパスネットワーク、 厳重にロックダウンされたラボ、会場の wifi でもファイアウォールの変更なしに動作します。

完全な根拠、代替案、トレードオフは docs/decisions.md に番号付きの ADR として 記録されています。

ドキュメント

dcotelo.github.io/owasp-ctf でレンダリングされています。

コントリビューションとセキュリティ

コントリビューション歓迎です — CONTRIBUTING.md では開発環境、CI ゲート、 モジュールの提案方法を扱っています。CODE_OF_CONDUCT.md が適用されます。

エージェントは AGENTS.md に従うべきです。以下のコマンドは CI と一致しています。 make help は同じターゲットを一覧表示します。

各サービスは独立してテストされます(全体を通して Node 22):```sh (cd sync && npm ci && npm test) (cd scorer && npm ci && npm test && node tools/vacuous-sweep.mjs) ./scripts/acceptance-scorer.sh # from the repo root — the script lives in scripts/ (cd apps/web && corepack pnpm install --frozen-lockfile && corepack pnpm lint && corepack pnpm test) ./scripts/smoke.sh # the full poll pipeline, end to end

root@kitploit:~
キット自体に脆弱性を見つけましたか? **[SECURITY.md](https://github.com/owasp/owasp-ctf/blob/main/SECURITY.md)** — ターゲットの脆弱性は意図的なものであり、対象外です。

## ライセンスとクレジット

MIT — [LICENSE](https://github.com/owasp/owasp-ctf/blob/main/LICENSE) を参照してください。`scorer/rubric.owasp/` 配下のルーブリックコンテンツは、上流の
[OWASP-CTF](https://github.com/OWASP-CTF/dc34-owasp-secure-development-ctf)
イベントからベンダリングされ、`scorer/rubric.owasp/PROVENANCE.md` のコミットに固定されています — このキットが存在するのは、あのイベントが一度以上開催する価値があったからです。脆弱なターゲットはベンダリングされていません。イベントはそれぞれの上流からフォークします
([Juice Shop](https://github.com/juice-shop/juice-shop)、
[WebGoat](https://github.com/WebGoat/WebGoat)、
[DVWA](https://github.com/digininja/DVWA)、
[Security Shepherd](https://github.com/OWASP/SecurityShepherd)、
[VulnerableApp](https://github.com/SasanLabs/VulnerableApp)、
[VAmPI](https://github.com/erev0s/VAmPI))、そしてそれぞれが独自のライセンスを保持しています。
OWASP® は OWASP Foundation の登録商標です。このプロジェクトは同財団と提携しておらず、承認も受けていません。
ツールをダウンロード
対象チャレンジポイント備考
vulnerableapp110187最大の対象;8 並列で採点
webgoat691372 段階ビルド:Maven、次にフォークのランタイム専用 Dockerfile
dvwa55108MariaDB のサイドカーとスキーマ初期化が必要
securityshepherd4079HTTPS、3 コンテナスタック、厳密に直列
juice-shop38141難易度が 6 つ星に達する唯一の対象
vampi916自己完結型;最速のエンドツーエンド検証
合計321668すべてのイベントが 6 つすべてをプロビジョニング;/admin → Secure Development → Targets でサブセットを選択
こんなときに読むドキュメント
キットを立ち上げるときdocs/hosting.md — 前提条件、ウィザードとすべての個別ステップ、スコアがマシンに届く仕組み、GitHub OAuth アプリ、イベント設定
クラウドにデプロイするときdocs/aws.md (Terraform: ECS Fargate + ElastiCache + ALB) · docs/fly.md (Fly マシン 1 台)
開場しようとしているときdocs/security-checklist.md — 1 ページのイベント前ウォークスルー
イベントを運営するときdocs/operations.md — チーム、管理パネル、クイズ/クラシック/ai の主催者ガイド、検証、teardown
システムを理解したいときdocs/architecture.md — 図、スコアデータフロー、Redis キー、セキュリティモデル、テスト戦略
ルーブリックを書くときdocs/scorer.md — serve + judge モード、両方のルーブリック文法、作成とビルド
新しいモジュールを作るときdocs/modules.md — プラットフォーム/モジュールの契約
「なぜこうなっているのか?」と問うときdocs/decisions.md — 番号付き ADR