Shikata Ga Nai

Private? There is no such things.

LAB: JavaScript文字列中の反射型XSS(HTMLエンコードされた山括弧)

Hello there, ('ω')ノ

🔍 脆弱性のポイント

  • ユーザーの入力が JavaScriptコード中の文字列リテラル に埋め込まれています。
  • <>&lt;&gt; に変換されており、HTMLタグを直接挿入するXSSは防がれています。
  • しかし、シングルクォート 'セミコロン ; などはサニタイズされておらず、文字列から脱出してコードを実行できます。

🛠️ 攻略手順(Burp Suite利用)

  1. 対象ページの検索ボックスに適当な文字列を入力して「Search」をクリック。

  2. Burp SuiteでHTTPリクエストをインターセプトし、Repeaterに送信。

  3. 応答内容に、自分の入力がJavaScript文字列内に含まれていることを確認(例:var search = 'abc123';)。

  4. 次のペイロードに入力を置き換える:

   '-alert(1)-'
  1. リクエストを送信して、ブラウザ上で結果を確認。アラートが表示されれば成功です。

✅ 解説とコツ

  • '-alert(1)-' はJavaScript文字列を閉じ、alert(1)を実行したあと、文法エラーにならないように無意味な文字列で終わらせています。
  • ///* */ を使って残りのコードをコメントアウトする方法も有効です。
  • このように、HTMLエンコードだけではJavaScriptコンテキストのXSSを防げないことがあります。

🧠 ポイントまとめ

  • JavaScript内でのユーザー入力は、必ず適切にエスケープすべき。
  • HTMLタグをブロックしても、スクリプト内XSSは防げません。
  • このような反射型XSSは、JavaScriptコンテキストの理解が重要です。

Best regards, (^^ゞ