2

Microsoft-IIS/7.5 Web サーバーで実行されている ASP.NET アプリケーションをペンテストしており、次の GET 要求パラメーターを送信しています。

&search=aaa%20%*+,-/;<=>^|"'bbb

パラメータの 1 つは検索で、上に表示されている値を入力しました。次のように、返された応答に値が 2 回出力されます。

最初のパラメーター:

<input name="nn" type="text" value="aaa %* ,-/;&lt;=>^|&quot;&#39;bbb" class="cc" />

最初のエントリで引用符で囲まれたパラメーターは次のとおりです。

  • " ==>&quot;
  • ' ==>&#39;
  • < ==>&lt;

値がエスケープされており、「」文字を正しく入力できないため、そこから抜け出す方法はないと思います。ただし、抜け出すことはできませんが、すべてのパラメーターが適切にエスケープされているわけではありません。

2 番目のパラメーター:

<strong>aaa %* ,-/;<=>^|"'bbb</strong>

すべてのキャラクターがそのまま表示されていることがわかりますが、落とし穴があります。< 文字の後には [a-zA-Z0-9] (おそらく他の文字も) 文字を含めることはできません。これは、おそらく ASP.NET フィルターによってブロックされているためです。

以下を入力すると:

&searchQuery=aaa<#script>alert('Hi');<#/script>bbb

次の出力が得られます。

<strong>aaa<#script>alert('Hi');<#/script>bbb</strong>

それにもかかわらず、制限を打破して任意の JavaScript コードを実行する方法が何かありますか?

ありがとうございました

4

1 に答える 1

0

HTML では、開始タグの開始区切り文字の直後にタグ名が続く必要があります。<

開始タグは次の形式にする必要があります。

  1. 開始タグの最初の文字は、U+003C LESS-THAN SIGN 文字 ( <) でなければなりません。
  2. 開始タグの次の数文字は、要素のタグ名でなければなりません。

[…]

それを超えるものは、ブラウザの解釈の癖次第です。

ただし、要素タグ以外にも、マークアップ宣言タグ ( <!…&gt;)、処理命令タグ ( <?…&gt;)、代替コメント タグ ( <%…%>) など、特定のブラウザーで認識され、特定のハッキングを許可するタグがあります。

OWASP のXSS Filter Evasion Cheat SheetHTML5 Security Cheatsheetなどの一般的な XSS チート シート、または Shazzer などの HTML ファザーをご覧ください

于 2013-01-12T10:24:55.233 に答える