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 とか見ておくと勉強になります。
os0x
2010/02/03 19:28
スラッシュを使わずに JavaScript を発動は <img onerror=alert(1) src=...> でクロスブラウザに
hasegawayosuke
2010/02/03 22:03
imgのonerrorは常套手段ですね。先日みつけたXSSでは、onxxxがブラックリスト的にフィルタリングされていたので、<marquee onfinish=....> で突破しました。<marquee>つかったXSSは初めてでした。
sonodam
2010/02/04 12:27
こうしてまたシグネチャが増える、ということなのかなw。
masa
2010/02/17 20:05
<bgsound src="javascript:... という手も。
- Cli@ - JavaScript変態文法最速マスター - 葉っぱ日記
- h-ふじた(藤田浩)の日記 - 今日のリスペクト
- なんとなく日記 - (基礎|変態)文法最速マスターシリーズのまとめ
- ネットサービス研究室 - プログラミング基礎文法最速マスターまとめ
- JavaScript変態文法最速マスター (葉っぱ日記)
- JavaScript変態文法最速マスター - 葉っぱ日記
- juner’s Diary - 今日のtwitter発言纏め
- notes plastiques - C#でお世話になっているサイト
- My Bookmark - 2010/02/04(木)の出来事
- 燈明日記 - 基礎文法最速マスターカテゴリ
- 366 http://reader.livedoor.com/reader/
- 315 http://b.hatena.ne.jp/hotentry
- 209 http://pipes.yahoo.com/pipes/pipe.info?_id=faa858a20082ef6d25ad27557e37e011
- 155 http://www.google.com/reader/view/
- 149 http://d.hatena.ne.jp/seikenn/20100203/programmingMaster
- 148 http://www.google.co.jp/reader/view/
- 143 http://www.tfg.ne.jp/~monkey/kagoya/
- 142 http://b.hatena.ne.jp/hotentry/it
- 121 http://d.hatena.ne.jp/tt_clown/20100202/1265096776
- 121 http://twitter.com/