それ Unicode で

それ Unicode で
はせがわ
hasegawa@openmya.hacker.jp

それ Unicode で

それ Unicode で
はせがわ
hasegawa@openmya.hacker.jp
Unicode だけじゃないし

(;´Д`)
TEXT HACKS - 役に立たないテクニック10連発 -
TEXT
HACKS
役に立たないテクニック10連発
はせがわ
hasegawa@openmya.hacker.jp
HACK
#1
XSS させたい

→ それ UTF-7 で
UTF-7 を使ってスクリプトを記述
+ADw-SCRIPT+AD4-alert(\'XSS\');+ADw-+AC8-SCRIPT+AD4-

IE は、文字エンコーディングが不明で UTF-7 っぽい文字列があれば、自動判別で UTF-7 となる。
実例
  • Goole の 404 ページ(2005.12)
  • MS06-053 IISのエラー画面(2006.10)
文字エンコーディングを外部から指定
実例
  • Google 検索アプライアンス (2006.11)
    <http://...?oe=utf-7&q=%2BADw-script%20src%2B...>
HACK
#2
もうちょっと XSS させたい

→ それ US-ASCII で
IE では、US-ASCII や ISO-2022-JP のような 7 bit な文字コードでは、最上位ビットは完全に無視される。
s : 0x73 01110011
0xF3 11110011 … どちらも s として扱われる。

< : 0x3C 00111100
0xBC 10111100 … どちらも < として扱われる。
メタキャラクタの検出をバイパスすることが可能。
実例
  • Yahoo! mail (2006.11)
    scriptalert(XSS)/script

    シ … 0xBC → 0x3C → < と同義
    セ … 0xBE → 0x3E → > と同義
    「 … 0xA2 → 0x22 → " と同義
    → <script>alert("XSS")</script> として動作。
HACK
#3
日本語でも XSS させたい

→ それマルチバイト文字で
Shift_JIS や EUC-JP などのマルチバイト文字の1バイト目だけを入力して、 HTML を崩すことが可能。
<input type=text value="(0x82)"><br>
<input type=text value=" onmuseover=alert('xss');(0x82)"><br>
(http://www.atmarkit.co.jp/fsecurity/rensai/hoshino10/hoshino02.html より)
Shift_JIS の1バイト目である 0x82 を与えることで " を無理やり第2バイトとしてブラウザに扱わせている。
実例
  • Yahoo Mail (2006.8)
    Content-Type: text/html; charset=GB2312
    Subject: example
    
    <span
      style='width:expr/*[0x81]*/*/ession(alert())'>
      exploited</span>
  • Hotmail (2006.8)
    Content-Type: text/html; charset=SHIFT_JIS
    Subject: example
    
    <font face="[0x81]"></font><font face=" 
      onmouseover=alert() s=[0x81]">exploited</font>
    
HACK
#4
もっと XSS させたい

→ それ expression で
IE ではスタイルシート内の expression( ) や url( ) に、全角や Unicode 文字を使用可能。
<div style="{left:expression(alert('xss'))}">
         
<div style="{left:expression(alert('xss'))}">
<div style="{background:URL(javascript:alert('xss'))}">
利用可能な文字
R - U+0280 (ʀ)
N - U+0274(ɴ)、U+207F(ⁿ)
L - U+029F(ʟ)
実例
  • はてなダイアリー (2005.12)
  • Hotmail、Windows Live Mail (2006.11)
  • SquirrelMail (2006.12)
HACK
#5
もっともっと XSS させたい

→ それ見えない文字で
IE では HTML 中に含まれるヌル文字(0x00)は、完全に無視される。
<s(0x00)cript>
IE では HTML 中に含まれる 0x0B や 0x0C はスペースと同意に扱われる。
<script(0x0B)>
         
<s (0x0C)onmouseover="...">
Firefox 1.5.0.4 以前のバージョンでは、BOM (U+FEFF; ZERO WIDTH NO-BREAK SPACE) は無視される。
<s(BOM)cript>
MFSA 2006-42: UTF-8 ページで BOM を使ったクロスサイトスクリプティング
<http://www.mozilla-japan.org/security/announce/2006/mfsa2006-42.html>
HACK
#6
メールのコンテンツフィルタをバイパスしたい

→ それ US-ASCII で
OE でも IE と同じくUS-ASCII や ISO-2022-JP のような 7 bit な 文字コードでは、最上位ビットは完全に無視される。
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
 
This is test mail

begin 644 eicar.com
ヘカ#5/(5`E0$%06S1<4%I8-30H4%XI-T-#*3=])
$5)0T%2+5-404Y$05)$+4%.
75$E625)54RU415-4+49)3$4A)$@K2"I#
`
end
         
eicar.com を uuencode 形式で添付。
HACK
#7
同じ名前のファイルを作りたい

→ それ ZERO WIDTH な文字で
ZERO WIDTH 系や制御記号のようなの見えない文字をファイル名の一部に使用することで、 見かけ上同じ名前のように見えるファイル名を作成することができる。
見えない文字
 - U+200B ( ZERO WIDTH SPACE )
 - U+200C ( ZERO WIDTH NON-JOINER )
 - U+200D ( ZERO WIDTH JOINER )
 - U+FEFF ( ZERO WIDTH NO-BREAK SPACE )
 - U+202A ( LEFT-TO-RIGHT EMBEDDING )
HACK
#8
ディレクトリトラバーサルさせたい

→ それ円記号で
- Unicodeにはバックスラッシュ(U+005C)と円記号(U+00A5)が個別に定義されている。
- 円記号(U+00A5)はファイル名として使用可能
- 円記号(U+00A5)が Shift_JIS への変換でバックスラッシュ(0x5C)に置換される。

以上より、ファイル名を Unicode で扱わないアプリケーションではディレクトリトラバーサルが 発生することがある。

ファイルを再帰的に列挙するようなアプリケーションに対して ..\ のようなフォルダを作成しておくと、DoS が発生することもある。
実例
 - Namazu 2.0.15 (Windows版) より前のバージョン
 - Hyper Estraier Version 1.0.2 (Windows版) より前のバージョン
 - Becky! Ver.2.22 より前のバージョン
HACK
#9
存在しないレジストリが存在するように見せかけたい

→ それ ZERO WIDTH な文字で
レジストリのエントリにも Unicode が使用可能なので、ファイル名と同様に ZERO WIDTH 系の文字を使用することで、見た目を偽装可能。
HACK
#10
拡張子を偽装したい

→ それ Bidi で
Unicodeの「双方向性」機能 … 文字列が右から左に表示
見かけ上の拡張子の偽装が可能
ファイル名の途中に U+202E (RIGHT-TO-LEFT OVERRIDE; RLO) を埋め込むと、それより後ろの文字列は逆順に表示される。
本来のファイル名: this-(U+202E)txt.exe
         
表示されるファイル名: this-exe.txt
まとめ

参考情報