Shikata Ga Nai

Private? There is no such things.

XSS(クロスサイトスクリプティング)診断マニュアル

Hello there, ('ω')ノ

🎯 1. XSSとは?

XSS(Cross-Site Scripting)は、Webアプリケーションに悪意のあるスクリプトを注入し、 それが他のユーザのブラウザ上で実行される脆弱性です。

主な影響:

  • Cookieの窃取(セッションハイジャック)
  • 偽フォームによる情報搾取
  • ページの見た目改ざん
  • 管理者アカウント奪取(XSS→CSRF連携)

🧭 2. チェックすべき機能・画面

機能・ページ 注入箇所の候補 備考
🔍 検索フォーム 検索語がページに表示される場所
📝 コメント投稿 投稿内容が他ユーザに表示される
📄 プロフィール編集 自己紹介欄などのHTMLが表示される
📥 お問い合わせ メール内容の確認ページなど
📤 URLパラメータ出力 ?name=aaaHello aaa! のような構造

🧪 3. XSSの分類と診断手法

✅ 反射型(Reflected XSS)

  • 入力したスクリプトが即時にレスポンス内で反映される
  • URLや検索ワードに注入

テスト例:

https://example.com/search?q=<script>alert(1)</script>

✅ 永続型(Stored XSS)

  • 投稿などに含めたスクリプトが、他のユーザにも表示される
  • コメント欄、掲示板、プロフィールなど

テスト内容:

コメント欄に以下を投稿し、表示されるか確認:

<script>alert('XSS');</script>

✅ DOMベースXSS

  • JavaScriptがURLや要素をもとに動的にHTMLを書き換える処理で発生
  • 開発者ツールでinnerHTML, document.writeなどを調べる

🔧 4. 基本のペイロード集(初級)

目的 ペイロード
アラート表示 <script>alert(1)</script>
イベント属性利用 <img src=x onerror=alert(1)>
HTML属性の中 " onmouseover="alert(1)
タグの中途挿入 <svg/onload=alert(1)>

📄 5. テスト方法(手順)

  1. 対象ページで、入力 → 表示される場所を探す
  2. 表示に使われるタグ属性・構造を観察
  3. 適切なペイロードを選んで挿入
  4. 実際にスクリプトが実行されるか確認(alertが出るか)

🧰 6. 補助ツール

  • Burp Suite(Repeater + XSS auditor)
  • XSStrike(XSS検出自動化ツール)
  • XSS Hunter / Hunter Pro(OOB型XSS検知)
  • ブラウザの開発者ツール(F12)

⚠️ 7. 注意点・見抜くコツ

ポイント 内容
HTMLエスケープが不十分 >" などがそのまま使える
イベント属性が有効 onload, onerror, onclick など
<script> タグが使える場合は高確率で脆弱性あり
DOMベースはURL断片や location.href に注目

✅ 8. 診断成功のサイン

  • 入力したスクリプトが実際に実行される(アラートやDOM改変)
  • JSのエラーが出る(例:Uncaught SyntaxError)
  • HTML構造が崩れる(タグ未閉じ)

🛡️ 9. サーバ側の防御方法(診断時のチェック)

対策 説明
出力時にHTMLエスケープ <&lt;"&quot; など
WAFや入力フィルタ 攻撃っぽいパターンを除去(ただし過信は禁物)
Content Security Policy (CSP) script-src 'self' で外部スクリプト実行を制限
JavaScriptテンプレート利用時の注意 DOM操作関数に直接出力していないか確認

🔎 10. 見つけやすいヒント

  • URLパラメータやフォーム送信内容がレスポンス内に含まれる
  • innerHTML, document.write, eval() を使っているJSコード
  • コメントやプロフィールなど、他人に表示される投稿可能な要素

🎁 11. おすすめペイロード(応用)

シーン ペイロード
<input value="..."> の中 " autofocus onfocus=alert(1)
href="..."> の中 javascript:alert(1)
CSS内(少数例) <style>@import 'javascript:alert(1)'</style>

Best regards, (^^ゞ