Shikata Ga Nai

Private? There is no such things.

LAB: ドキュメント書き込みのシンクでのDOMベースXSS

Hello there, ('ω')ノ

🔍 このラボの目的

このラボでは、DOMベースのクロスサイトスクリプティング(XSS)脆弱性を突き、alert関数を実行する必要があります。

このアプリは、URLのクエリパラメータ(location.search)の値をJavaScriptで取得し、それを document.write() でHTMLに書き出しています。


🧠 攻撃のポイント

  • location.search(例:?search=文字列)の値が直接 document.write() に渡されている。
  • この値を悪意のあるスクリプトに置き換えることで、HTML要素の一部としてJavaScriptを実行可能。
  • document.write はHTML構文として解釈されるため、タグの中にJSイベント(例:onload)を挿入できる。

✅ 攻略手順

  1. 任意の文字列を検索ボックスに入力し、送信します(例:test)。
  2. DevTools(F12)で要素を検査し、次のようなHTMLが出力されていることを確認します:
   <img src="test">
  1. クエリパラメータに次のようなペイロードを入力してXSSを実行します:
?search="><svg onload=alert(1)>
  1. 最終的なURLは以下のようになります:
https://YOUR-LAB-ID.web-security-academy.net/?search="><svg onload=alert(1)>
  1. このURLをブラウザで開くと、アラートが発生してラボクリアです。

🔒 対策(実際の開発では)

  • クライアント側でユーザー入力を処理する前にバリデーションを行う。
  • document.writeの使用を避け、DOM操作はtextContentsetAttributeなど安全なメソッドを使う。

Best regards, (^^ゞ