Hatena::ブログ(Diary)

葉っぱ日記 このページをアンテナに追加

2010-02-03

[] JavaScript変態文法最速マスター  JavaScript変態文法最速マスターを含むブックマーク

Java変態文法最速マスター - プログラマーの脳みそをリスペクト。

JavaScriptの変態文法・技法一覧です。あんまり使わないけど、知ってるとXSSとか攻撃したいのにWAFに妨害されるなど、いろいろ制約があるという場合に便利。

文字列の生成

引用符を使わずにさくっと文字列を作る。fromCharCode とか使ってもいいけどめんどくさいので、正規表現やE4Xを利用。

alert( /string/.source );
alert( <>string</> )

空白文字を使わず記述

文脈上、スペースを書きたいけれどいろいろ制約があって書けない場合にはコメントで代替。実行するコードを作り上げてevalしてもいいけど大袈裟なので。

var/**/x=1;

*/ を含むコードブロックをコメントアウト

コードの塊りをコメントアウトしようと思って /* */ で囲むと、コード内に string.match( /abc*/ ); みたいなのがあって文法エラーになってしまうことがある。

/*
    var s = "abcd";
    if( s.match( /abc*/ ) ){
    }
*/

とりあえず、Firefoxの場合にはE4Xを使ってこの部分をただのリテラルXMLに押し込めることができる。もちろん、コード中に ]]> などが出てこないという前提で。

<><![CDATA[
    var s = "abcd";
    if( s.match( /abc*/ ) ){
    }
]]></>;

[ ] やピリオドを使わずにプロパティにアクセス

忘れられた構文 with を使うと、[ ] やピリオドを使わずにプロパティにアクセスできる。

with( document ){ alert( title ) }

記号だけでJavaScriptを書く。

jjencode - Encode any JavaScript program using only symbols を使うと任意のコードを記号だけのJavaScriptに変換できる。IEでは配列形式で文字列の一部を切り出すこと( "string"[ 1 ] == "t" )ができないので動かない。逆に記号なしでJSを書くというのは無理。

スラッシュを使わずに JavaScript を発動させる

XSSがあるので < や > は注入できるのに、/ は使えないという挙動をするサイトでは、終了要素なしの<script>を記述して onreadystatechange でスクリプトを動かす。IE限定。JSの話じゃないけど。

<script onreadystatechange=alert(1)>

もっとあるような気もするけど、ぱっと思い出せたのはこのくらい。あとは普段から sla.ckers.org とか見ておくと勉強になります。

os0xos0x 2010/02/03 19:28 スラッシュを使わずに JavaScript を発動は <img onerror=alert(1) src=...> でクロスブラウザに

hasegawayosukehasegawayosuke 2010/02/03 22:03 imgのonerrorは常套手段ですね。先日みつけたXSSでは、onxxxがブラックリスト的にフィルタリングされていたので、<marquee onfinish=....> で突破しました。<marquee>つかったXSSは初めてでした。

sonodamsonodam 2010/02/04 12:27 こうしてまたシグネチャが増える、ということなのかなw。

masamasa 2010/02/17 20:05 <bgsound src="javascript:... という手も。