Hello there, ('ω')ノ
🔍 コンテキストとは?
コンテキストとは以下の2点を指します:
- レスポンス中の、ユーザー入力が反映される場所(HTMLのどこか)
- その入力に対して、アプリケーション側でどのようなフィルターやサニタイズ処理が行われているか
🧪 なぜ重要?
XSS攻撃の成功可否は、注入する場所(タグ内か、スクリプト内か、属性値かなど)によって必要なペイロードが異なるからです。
たとえば:
コンテキスト | 攻撃例 | 解説 |
---|---|---|
HTML要素の中 | <p>こんにちは、[入力値]</p> |
例: <script>alert(1)</script> でスクリプト実行 |
属性値内 | <input value="[入力値]"> |
例: " autofocus onfocus=alert(1) で発火 |
JavaScript内 | <script>var msg = '[入力値]';</script> |
例: ' ; alert(1)// でJS文を壊してコード注入 |
URLパラメータ内 | <a href="?q=[入力値]">リンク</a> |
例: javascript:alert(1) |
🧰 効果的な攻撃を行うために
反映箇所を特定する
- Burp Suiteやブラウザ開発者ツールで確認
出力形式・サニタイズ状況を確認
- 入力をそのまま出力するか?
- 特殊文字がエスケープされているか?
適切なXSSペイロードを選択
- コンテキストに応じた攻撃ベクトルを選ぶ
📘 便利なリファレンス
PortSwiggerでは、XSS Cheat Sheet を提供しています。以下のような機能があります:
- HTMLタグ・イベント別のフィルター
- ユーザー操作が必要な攻撃の分類
- AngularJSのサンドボックス回避手法
- さまざまなXSSの研究用途に対応
✅ 結論
XSSの調査では「どこに、どのように」入力が反映されているかを見極めることで、より精密で成功率の高い攻撃検証が可能になります。コンテキストを理解することが、実践的な脆弱性診断スキルの第一歩です。
Best regards, (^^ゞ