XSSの出題 回答編

3月7日の出題の解説。
例題のWebアプリケーションもどきは、クエリストリングとして与えた文字列が <input> の value にセットされる、という仕様です。
例えば、"abc"を与えた場合には、出力される HTML は

<input type=text id=q name=q size=40 value=abc>

となります。value属性が引用符で囲まれていませんが

  • 「&」「>」「<」「"」「'」の各文字はHTMLエスケープされる
  • スペースは削除される
  • 0x21から0x7eの範囲にない文字も削除される

というフィルタがかかっているため、一見するとスクリプトの挿入は無理に思えます。
ところが、IE ではバッククォート(`)が引用符として利用可能であるため、これを利用すると簡単にイベントハンドラなどが挿入できます。
ということで、回答としてはこんな感じのクエリを与えることでIE上でスクリプトが発動します。

http://openmya.hacker.jp/hasegawa/test/jxss.html?%60%60onmouseover%3Dalert%28document.location%29

実際にスクリプトを動かしたところ。

もちろん、onmouseover ではなく style=xss:expression(...) のような、まったくの操作なしでのスクリプトの発動も可能です。