Shikata Ga Nai

Private? There is no such things.

HTMLタグ間でのXSS攻撃手法(Stored / Reflected)

Hello there, ('ω')ノ

🎯 攻撃の対象:「HTMLタグ間のテキスト」コンテキストとは?

XSSの脆弱性調査中、攻撃対象の入力値がHTML要素のタグとタグの間のテキストとして出力されるケースがあります。

例:

<p>こんにちは、[ユーザー入力]</p>

このような出力場所を「HTMLタグ間のコンテキスト」と呼びます。この場合、新しいHTMLタグを挿入することでJavaScriptを実行するタイプのXSSが有効です。


🧨 よく使われるXSSペイロード

① スクリプトタグを直接挿入

<script>alert(document.domain)</script>
  • 最も基本的な攻撃。
  • document.domain を表示することで、スクリプトが実行されていることを確認できます。

② イメージタグ+onerrorイベント

<img src=1 onerror=alert(1)>
  • ブラウザが画像の読み込みに失敗すると onerror イベントが発火して alert() を実行。
  • <script> タグがフィルタリングされている場合でも有効。

🧪 テスト手順の例

  1. 入力フォームまたはURLパラメータに、上記ペイロードを入力
  2. その入力がページ上に エスケープされずに表示 されていれば、XSS成功
  3. ブラウザ上で alert() ダイアログが表示されればOK

✅ ポイント:エスケープ処理がなければXSS成立

HTMLタグ間に挿入された入力が、

  • <, > のようなタグ記号をそのまま出力
  • JavaScriptのイベント属性やタグがフィルターされていない

こうした場合にXSSが成功します。


📌 まとめ

「HTMLタグ間のコンテキスト」におけるXSSは、新しいHTML要素(特に <script><img>)を注入してJavaScriptを実行させるのが基本です。

おすすめペイロード:

  • <script>alert(1)</script>
  • <img src=1 onerror=alert(1)>

これらを使ってアプリケーションがどのように入力を扱っているかを検証し、XSSの有無をチェックしましょう。

Best regards, (^^ゞ