Shikata Ga Nai

Private? There is no such things.

クロスサイトスクリプティング(XSS)の「コンテキスト」とは何か?

Hello there, ('ω')ノ

🔍 コンテキストとは?

コンテキストとは以下の2点を指します:

  1. レスポンス中の、ユーザー入力が反映される場所(HTMLのどこか)
  2. その入力に対して、アプリケーション側でどのようなフィルターやサニタイズ処理が行われているか

🧪 なぜ重要?

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)

🧰 効果的な攻撃を行うために

  1. 反映箇所を特定する

    • Burp Suiteやブラウザ開発者ツールで確認
  2. 出力形式・サニタイズ状況を確認

    • 入力をそのまま出力するか?
    • 特殊文字がエスケープされているか?
  3. 適切なXSSペイロードを選択

    • コンテキストに応じた攻撃ベクトルを選ぶ

📘 便利なリファレンス

PortSwiggerでは、XSS Cheat Sheet を提供しています。以下のような機能があります:

  • HTMLタグ・イベント別のフィルター
  • ユーザー操作が必要な攻撃の分類
  • AngularJSのサンドボックス回避手法
  • さまざまなXSSの研究用途に対応

✅ 結論

XSSの調査では「どこに、どのように」入力が反映されているかを見極めることで、より精密で成功率の高い攻撃検証が可能になります。コンテキストを理解することが、実践的な脆弱性診断スキルの第一歩です。

Best regards, (^^ゞ