web-dev-qa-db-ja.com

DOMベースのXSS攻撃:最も危険な例は何ですか?

XSS攻撃(「非永続的」および「永続的」)により、ユーザーセッションの乗っ取り、Webサイトの改ざん、フィッシング攻撃の実行などが可能であることは知っていました。

しかし、DOMベースのXSSが危険であると理解できない場合(ハイジャックセッション、クリックジャッキングなど)?

私は OWSAP DOM Based XSS と、これら2つのメモの概要を示す このページ を確認しました。

  1. 悪意のあるペイロードは、(XSSの他のフレーバーとは異なり)いつでも生のHTMLページに埋め込まれていません。

  2. このエクスプロイトは、ブラウザがURL文字を変更しない場合にのみ機能します。 Mozillaは、ドキュメント内の<と>(それぞれ%3Cと%3Eに)を自動的にエンコードします。

次に、どのような種類の攻撃(XSS DOMベース)が実行できますか?

8
Akam

クロスサイトスクリプティングはクロスサイトスクリプティングです-DOM/persistent/reflectedの違いは、攻撃の実行(および防止)方法のみです。

脅威は同じです。通常、Webサイトのデザインの脆弱性が原因で、攻撃者が制御できないはずのページに何らかの形で悪意のあるJavaScriptを挿入しました。

OWASPの例 を見てください。HTMLページには、インラインJavaScript(タグ内の一部)が含まれています。インラインJavaScriptの目的は、「デフォルト」のクエリパラメータからの変数であり、その値を使用してDOMを変更することです。つまり、最初の_<option>_タグの値をそのクエリパラメータの値に変更します。 。

(ネットワーク経由で送信される)Webページのソースは次のようになります。

_Select your language:
<select><script>    
document.write("<OPTION value=1>"+document.location.href.substring(document.location.href.indexOf("default=")+8)+"</OPTION>");    
document.write("<OPTION value=2>English</OPTION>");    
</script></select>
_

しかし、_http://www.some.site/page.html?default=French_から見た後、DOMは次のようになります。

_Select your language:
<select>    
<OPTION value=1>French</OPTION>
<OPTION value=2>English</OPTION>
</select>
_

Webブラウザーは、DOMを変更するJavaScript(_document.write_への呼び出し)を実行すると、上記のようにネットワーク経由で送信されたWebページを扱うことを意味します。

次に、巧妙な攻撃者は、被害者がhttp://www.some.site/page.html?default=<script>alert(document.cookie)</script>を指すようにクリックするリンクを(電子メール/ Webページのリンクを介して)送信します。次に、ページのWebページ(最初のJavaScriptを_document.write_で処理した後)は次のようになります。

_Select your language:
<select>    
<OPTION value=1><script>alert(document.cookie)</script></OPTION>
<OPTION value=2>English</OPTION>
</select>
_

ここでもalert(document.cookie)は、攻撃者が望む任意のjavascriptになる可能性があります。

おそらく、ページに秘密のユーザー名/パスワード、セッションCookie、またはクレジットカード番号があり、アラートの代わりに送信ボタンの押下をajax呼び出しにバインドして、ユーザーが送信を押すと、すべての秘密データをサーバーに送信するようにします。攻撃者はアクセスできます。

最悪のシナリオは実際には1つではありません-DOM-XSSの脆弱性がある場合に実行できるはずの、javascriptで実行できるすべてのアクション。

13
dr jimbob

DOM XSSは、反映されたXSSと同じくらい危険です。これを悪用するには、攻撃者は常にクライアントに要求を作成するように誘導する必要があります(つまり、考慮されている安全なサイトを指しているリンクをクリックする)。これが完了したら、クライアントのブラウザでJavaScriptを実行できます。これは、ブラウザに対するあらゆる種類の攻撃につながる可能性があります。

1
DavidC