My XSSMe² bypasses
これは XSSMe² ( http://xssme.html5sec.org/ ) のこれまでの回答です。
Thses are my bypasses of XSSMe² ( http://xssme.html5sec.org/ )
Using XHR from CreateObject() function of VBScript
VBScript は CreateObject()
を組み込み関数として持っていて、これは ActieXコンポーネント (Msxml2.XMLHTTP など)を操作するのに使用可能で、かつ、これは JavaScriptのコードから無効化することが出来ません。
VBScript has CreateObject()
as insintric function. It can be used to use ActiveX component (for example, Msxml2.XMLHTTP), and it is impossible to disable CreateObject from JavaScript Code.
これは、全要素のlanguage
属性を上書きすることで修正されました。
This is fixed by overwriting language attribute of all elements.
<img src=. language=VBScript onerror='Set x=CreateObject("Msxml2.XMLHTTP"):x.open"GET",".":x.send:MsgBox(Mid(x.responseText,759,20))'>
VBScript Proxy Functions
language
属性を上書きしても、いくつかの関数は、文字列をVBScriptのソースコードとして評価する機能があるため、これを使ってVBScriptを実行することが可能でした
Even if all language
attribute is overwritten, Some functions allows to evaluate string as VBSctipr source code.
setTimeout(VBScriptCodeString, interval, "vbscript") setInterval(VBScriptCodeString, interval, "vbscript") execScript(VBScriptCodeString, "vbscript")
これらの関数を無効化することでこの問題は修正されました
This is fixed by sealing these functions.
<script>execScript('Set x=CreateObject("Msxml2.XMLHTTP"):x.open"GET",".":x.send:MsgBox(Split(x.responseText,vblf)(25))',"vbscript")</script>
Event Constructor Hijacking
実は、イベントコンストラクタはJavaScriptから上書きすることが可能だったため、onerror を発火したイベントのコンストラクタで MouseEvent を上書きすることでマウス操作では無いイベントをマウス操作イベントと誤認させることが可能でした。この問題は MouseEvent もシールすることで修正されました
Unfortunately, Event constructor can be overwritten by JavaScript code.
This is fixed by sealing MouseEvent.
<img src=. onerror="MouseEvent=event.constructor;event.isTrusted=true;(function(){alert(Safe.get())})(event)">
Function Source Disclosure (2012-05-13 added)
evelされた関数の内部から、Cookieをセットした関数への参照を得ることが可能であり、toString()を使ってその関数のソースコードを読み取ることが可能でした。この問題は、ECMAScript 6 の strict mode や、Fnction.prototype.toString を上書きすることで修正可能だと思います。
We can get reference of function that sets cookie from code executed by eval.
I think this can be fixed by using strict mode or overwriting Function.prototype.toString.
<script>(function(){alert(arguments.callee.caller.caller.toString())})();</script>
参考:以下のコードだと arguments が存在しないため正常に動作しません。
FYI: Following code does not work because arguments not exist.
<script>alert(arguments.callee.caller.toString())</script>