web-dev-qa-db-ja.com

大なり記号と小なり記号がエスケープされた場合のクロスサイトスクリプティング?

Webサイトが_<_を_&lt;_にエンコードし、_>_が_&gt;_になる場合でも、クロスサイトスクリプティングを実行できますか?スクリプトタグを何で囲みますか?

たとえば、私のサイトの1つでは通常<script>alert(1)</script>を使用できますが、エンコードが行われるときに同じようにするにはどうすればよいですか?

19
Bob John

そうそう!

このHTMLについて考えてみましょう。

<a href="{{str}}">

次のような入力を検討してください:

" onmouseover="alert('GOTCHA')"

あなたは写真を取得します。

JavaScriptがタグ内に注入される場合タグ内の場合、山括弧は必要ありません。私はこの同様のS/Oポストからこれを借りました: https://stackoverflow.com/questions/5696244/xss-is-escaping-and-sufficient

このようなフィルター回避に興味がある場合は、以下を参照してください。

https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet

これには一般的なものすべてが含まれています。

安全に関する限り:すべてのものをエンコードしてください!攻撃者がどれほど賢いかは決してわかりません。

20
baordog

クロスサイトスクリプティングに関して言えば、最も重要なことはコンテキストです。反映または保存されるコンテキスト。これを、私の経験からの実際の例で示します。バグを探すときに、URLパラメータが変数内に反映されていることに気付きました。

http://www.example.com/blah.php?id=test&var=101011

Varの値は、スクリプトブロック内で、おおよそ次の形式で、ページの読み込み時にページのソースに反映されていました。

var a = "101011";

そして、 '<'だけを注入すると、要求がWAFに転送され、エラーページがスローされるため、これを処理する実際のペイロードは次のとおりです。

Prompt(1)";eval(a);

これはWAFをバイパスし、反映されたXSSの成功事例となりました。そのため、ペイロードはコンテキストに応じて変更する必要があり、タグが不要な場合があります。お役に立てば幸いです。

3
racec0ndition