よくあるバグの発見
IDOR、XSS、SSRF
「よくあるバグの発見」はCoddyKit上の無料Ethical Hacking Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはEthical Hacking Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Ethical Hacking Academyコースには全4レッスンが含まれています。
基本となる脆弱性
脆弱性の種類の中には、よくあるうえに影響も大きいため、バグ報奨金の大部分を占めるものがあります。まずは次の3つを身につけてください。
- IDOR — 予測可能なIDを使って他のユーザーのデータにアクセスする脆弱性
- XSS — ページにスクリプトを注入する脆弱性
- SSRF — 攻撃者が指定したURLをサーバーに取得させる脆弱性
このレッスンでは、それぞれを体系的に探す方法を説明します。
IDORを理解する
Insecure Direct Object Reference (IDOR)は、アプリがユーザーから提供された識別子を使ってオブジェクトを取得する際に、そのユーザーが所有者であるか確認しない場合に発生します。
IDを変更すると他人のデータにアクセスできる状態です。これはインジェクションではなく、アクセス制御の不備です。
# Your own invoice
GET /api/invoices/1001 Authorization: Bearer <your-token>
# Change the ID - do you get someone else's?
GET /api/invoices/1002 Authorization: Bearer <your-token>効果的にIDORを探す
IDORを見つけるには、2つのアカウントを作成して比較します。IDでオブジェクトを参照しているものは、すべて候補になります。
- アカウントAから、Aのデータを取得するリクエストを取得します
- アカウントBのセッションを使い、AのオブジェクトIDを指定して再送します
- BがAのデータを見られた場合、それはIDORです
URL、JSONボディ、ヘッダー、さらにはbase64形式やUUID形式に含まれるIDにも注意してください。
# Original (account A)
POST /api/profile/update
{ "user_id": 5001, "email": "a@example.com" }
# Tamper: use account B's session, keep A's user_id
# If A's profile changes, broken object-level authorization.XSSを理解する
Cross-Site Scripting (XSS)は、別のユーザーのブラウザーで実行されるJavaScriptを注入する攻撃です。主な種類は3つあります。
- Reflected — ペイロードが直ちにレスポンスへ反映されます
- Stored — ペイロードが保存され、他のユーザーに配信されます(影響が最も大きい種類です)
- DOM-based — クライアント側のJSが攻撃者の入力を安全でない形でDOMに書き込みます
XSSをテストする
まず固有のマーカーを注入し、入力がどこに、どのように反映されるかを確認します。その後、コンテキスト(HTML本文、属性、スクリプト)に合ったペイロードを作成します。
どのペイロードで抜け出して実行できるかは、コンテキストによって決まります。
# Probe reflection with a unique canary
?q=xss7391canary
# Basic HTML-context payload
<script>alert(document.domain)</script>
# Attribute breakout
" onmouseover=alert(1) x="XSSの影響を証明する
単純なalert(1)で実行自体は証明できますが、レビュー担当者が求めるのは影響です。攻撃者が実際に何を盗めるか、何を実行できるかを示してください。
- JavaScriptからアクセスできるCSRFトークンやセッション情報を読み取る
document.domainを表示して、オリジンを証明する- Stored XSSの場合は、被害者のアカウントで発火することを示す
実際のユーザーのセッションを決して盗まず、可能性を示すだけにしてください。
アプリにおけるSSRFを理解する
バグバウンティにおけるSSRFとは、自分が制御するURLを取得する機能を見つけることです。候補になりやすいのは次の機能です。
- Webhook URL、コールバックURL
- リモートリソースを取得する画像・PDF生成機能
- URLプレビューやリンクの展開機能
- URLからのインポート機能
これらの機能に内部エンドポイントやメタデータエンドポイントを指定して、影響を証明します。
Out-of-BandでSSRFを確認する
取得された内容がレスポンスに表示されない場合は、out-of-bandサーバーを使って、対象がリクエストを送信したことを確認します。インタラクションのコールバックがあれば、blind SSRFを証明できます。
Burp Collaboratorやinteractshなどのツールを使うと、アクセスを記録する固有のURLを取得できます。
# Give the app your unique OOB URL
POST /api/webhook
{ "callback": "http://abc123.oast.fun/" }
# If abc123.oast.fun logs a DNS/HTTP hit, the server fetched it = SSRF.プロキシを使って探索する
この3種類のバグは、リクエストを傍受して改ざんすることで見つけられます。インターセプトプロキシが中心となるツールです。
- Burp SuiteまたはOWASP ZAPでトラフィックを取得・変更します
- Repeaterで個々のリクエストを再送し、調整します
- Intruderやfuzzerで多数のIDやペイロードをテストします
1つの手法だけを学ぶより、プロキシを深く理解するほうが大きな成果につながります。
連鎖させて影響を拡大する
最も高額な報奨金は、バグを連鎖させた場合に得られます。中程度の深刻度のバグも、別のバグと組み合わせることで重大な問題になることがあります。
- SSRFでクラウドのメタデータに到達すると、認証情報の窃取やアカウント乗っ取りにつながります
- IDORでトークンが漏えいすると、アカウントを完全に侵害される可能性があります
- 管理者パネルのStored XSSは、管理者アカウントの乗っ取りにつながります
常に「このバグは何と組み合わせられるか」と考えてください。
慎重に、スコープ内でテストする
これらのバグは、実際のデータやユーザーに関わります。倫理的に行動してください。
- 自分のテストアカウントを使い、証明に必要な範囲を超えて実際のユーザーのデータを見ないでください
- 実際のユーザーに発火する可能性があるStored XSSのペイロードは避け、自分だけを対象にしてください
- SSRFでは内部システムの奥深くまでピボットせず、成立条件を証明したら停止してください
責任を持って影響を示すことで、セーフハーバーの範囲内にとどまれます。
クイックチェック
ユーザーBとしてログインし、Bのセッションを使ってユーザーAのオブジェクトIDを指定したリクエストを再送したところ、Aの非公開データを受け取りました。これはどの脆弱性ですか?
振り返り:一般的なバグを見つける
価値の高い3種類のバグを探す方法を学びました。
- IDOR:2つのアカウントを比較し、オブジェクトIDを改ざんして所有権の検証を確認します
- XSS:反映を調べ、コンテキストに合ったペイロードを使い、実際の影響を証明します
- SSRF:URL取得機能を探し、blindなケースはout-of-bandで確認します
- バグを連鎖させ、重大な影響につなげます(例:SSRFからクラウドのメタデータへ到達)
- インターセプトプロキシを使い、スコープ内で作業します
次は、発見した問題を報奨金につながるレポートにします。
よくある質問
「よくあるバグの発見」レッスンは無料ですか?
はい。「よくあるバグの発見」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Ethical Hacking Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Ethical Hacking Academyコースには全4レッスンが含まれています。
「よくあるバグの発見」で何を学びますか?
IDOR、XSS、SSRF ブラウザで直接実行するハンズオンコードでEthical Hacking Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Ethical Hacking Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのEthical Hacking Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「よくあるバグの発見」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このEthical Hacking Academyレッスンでコードを書いて実行できますか?
はい。すべてのEthical Hacking Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ターゲットの選定
- 大規模な偵察
- よくあるバグの発見
- 優れたレポートの書き方