XSSチャレンジのすゝめ


タイトルに特に意味はありません。ヤマノススメでは主人公のあおいちゃんが好きです。
今回は某所で見つけたXSSチャレンジのwriteupでも書いてみようかと思います。

使用環境はMacのFirefox34.0(ブログ投稿時最新)でお送りします。
今回挑戦したのはこの問題です。
http://avlidienbrunn.se/xsschallenge/?xss=XSS%20me!
スクリーンショット 2014-12-20 1.06.23
「xss」というクエリパラメータに何かストリングを入れてアラートを出せばいいんだと思います。XSSチャレンジは大抵そういうものです。
ただし、XSS対策が施されていてそれをかいくぐらないとアラートは出せないようです。

まずは適当なストリングをxssパラメータに与えてHTMLソースを観察してみようかと思います。
http://avlidienbrunn.se/xsschallenge/?xss=zzz”‘`><s>;//
こんな感じになりました。
スクリーンショット 2014-12-20 1.14.37
どうやらシングルクォートで抜けることが出来そうですね。タグは使い物にならなくなるようです。

じゃあ次は
http://avlidienbrunn.se/xsschallenge/?xss=’;alert(1)//
でやってみましょう。何もなければこれでアラートが出るはず・・・。
スクリーンショット 2014-12-20 1.21.31
うーん、何も出ません。静かなもんです(笑)

この問題、HTMLソースの下の方を見るとどんな文字が使えないか書いてあります。なるほどセミコロンやカッコ、改行は使えないようです。
U+2028、U+2029まで使えないようになってます。
流石最短解答17文字の問題。伊達ではありません。
スクリーンショット 2014-12-20 1.23.11

ここまで見てて「じゃあどうするんだよ」ってなった方もいると思いますが、まあ早い話が使えなければ使わなきゃいいんです。
制限のかかっていない文字だけでアラートを出すことが出来ます。
http://avlidienbrunn.se/xsschallenge/?xss=’+alert`1`//
スクリーンショット 2014-12-20 1.28.14

HTMLソースを見てみるとこんな感じになってます。
スクリーンショット 2014-12-20 1.30.22
これ、他のブラウザで試した所ChromeやIE、Safariでは動きませんでした。FirefoxではこういうJavascriptの書き方が許されるようです(ChromeではSyntaxError)。

ちなみに1という文字を出さなければもう少し削ることも出来ます。
http://avlidienbrunn.se/xsschallenge/?xss=’%2balert``//
スクリーンショット 2014-12-20 1.43.18

これで11文字です。他の方の最短記録である17文字を更新してしまいました。
スクリーンショット 2014-12-20 1.44.56

惜しむらくはアラートがFirefoxでしか出せないということでしょうか。

他の方の解答が気になったのでこの記事を書いている最中に探してみたらありました。
http://www.avlidienbrunn.se/xsschallenge/solvers.txt

こういう方々の答え、僕のような駆け出しの人間からするとものすごい参考になります。
もっと公開して欲しいです(小学生並みの感想)。

2014/12/24追記:
あ、こんなんあったんですね。知らなかった・・・。
https://html5sec.org/#140