2007-08-14
■[SECURITY] Apacheに埋め込まれたイメージファイトと戦う文字コードな方法

このあたりとか見ながら、ImageFightをApacheのない環境でも動くようにしようとか思っている間に*1、さっさと対策されましたがそのまま埋没させておくのももったいないので、ImageFightを破る方法の一案をいちおう書いておきます。なんか説明が適当で日本語がおかしいのはあんまり時間がないからです。ごめんなさい。
攻略に利用できる足がかりとしてはIHDR内の各データですが、唯一CRCのみが4バイト連続で利用可能ですので、ここに 0x1B 0x24 0x42 のような3バイトのバイト列を挿入してやることを考えます。
0x1B 0x24 0x42 などのバイト列を<plaintext> より前に挿入してやることで、HTMLとして解釈されたときの文字エンコーディングをISO-2022-JPと認識させ、なおかつ文字セットをJIS X 0208など(いわゆる全角文字)に切り替えることができます。これにより、<plaintext>などの文字列をIEに解釈させないようにすることができます。
具体的には、Width:0x4B、Height=0x1EA、Bit depth=8、Color type=2、Compression method=0、Filter method=0、Interlace method=0としてやることで、IHDRのCRCがC31B2442となり、以降のサニタイピング部分をJIS X 0208-1983と解釈させることが可能でした…が、現在のmod_imagefight.cでは、antixss[] の部分にちゃんと \x1B(B というバイト列が挿入されており、これにより強制的に ASCII 文字集合に戻されていますので、この手法は通用しないのでした。
*1:それもまだできてないし。(;´Д`)
- 1700 http://www.st.ryukoku.ac.jp/~kjm/security/antenna/
- 677 http://www.tfg.ne.jp/~monkey/hatagoya2/
- 544 http://www.st.ryukoku.ac.jp/~kjm/security/memo/
- 303 http://www.pluto.dti.ne.jp/~rinou/
- 135 http://blue.sakura.ne.jp/~starlightparade/slpmain.html
- 84 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rlz=1T4GGIS_jaJP220JP222&q=葉っぱ
- 79 http://www.st.ryukoku.ac.jp/~kjm/security/memo/2007/08.html
- 45 http://reader.livedoor.com/reader/
- 42 http://search.yahoo.co.jp/search?p=葉っぱ&fr=top_v2&tid=top_v2&ei=euc-jp&search.x=1&x=21&y=16
- 39 http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=Unicodeで拡張子を偽装された実行ファイルの防御&num=50