続::JavaScriptでエキセントリックに関数の記述をしてみた

先日、JavaScriptでエキセントリックに関数の記述をしてみた とかいうエントリをしたのですが、その後進展がありました。


2008/02/14追記: 脳内に浮かんでいたものよりもイイ感じのコードが作れました。ISO-8859-1で作動。「+」「=」は使わなくてもよくなったけれど、かわりに「$」を使いました。EUC-JPなら「$」は不要なんだけれども。

とかほざいていましたが、ISO-8859-1でも、「$」は不要であると判明。「:」「(」「)」「{」「}」「[」「]」があれば、ユニコードで表現できる文字列を生成できるようになりました。試しに昨日は、

location.href="http://example.com/"
相当まで実際に作動可能であると確認。(Opera,IE,Firefoxで同一コードで)
あとは、document.cookieをプラスしてもっていけるかどうか確認をする予定です。
これらの遊びはXSS面に限れば攻守双方にとって現実味のあるオハナシではないのですが、yamagataさんも言っているように、WAFあたりのログ機能において、あるいはアラート機能において、事後の監視の目をくぐりぬけるEvadeな一面があるかもと…思い直しました。私の作戦ではどうしてもevalとconcatだけは必須で使わせてもらわないと困るのですが、それ以外はたいがいは自前の、一見それとはわからないへんちくりんな記述でもって任意のコードの実行が可能なのかな?とか思っています。

結論。ログ上で機械の目ではソレとはわかりにくいXSSアタック方法があるのだと実感。人間はエライなぁと。