DOM XSSのテスト

DOM XSSのテストで入力の流れを追跡する際、多くの場合JavaScriptが複雑でときには数千行に及ぶこともあるため、面倒な作業になることがあります。DOM Invaderはこのプロセスを大幅に簡素化し、入力がたどり着くシンクを関連するコンテキストとともに即座に表示します。

DOM InvaderによるDOM XSSのテスト

拡張機能のDOMビューから、ほとんどの機能にアクセスできます。

カナリアの挿入

DOM InvaderはDOMを自動的に解析し、あらかじめ定義した"カナリア"文字列が出現する箇所を探す動作をします。これは適当かつ独自の文字列で、それぞれを異なるソースに挿入するとどのシンクにたどり着くかを確認できます。

DOM Invaderが追跡している現在のカナリアは、DOMビューの左上隅に表示されています。なお任意のカスタム文字列にカナリアを変更できます。

カナリアを手動でソースに挿入するには:

  1. ブラウザのデベロッパーツールにある、DOM Invaderタブを表示します。

  2. DOMになっていることを確認してください。

  3. Copy canaryをクリックします。DOM Invaderが追跡しているカナリアがクリップボードにコピーされます。

  4. テストしたい入力にカナリアをペーストします。URLのクエリパラメータやフォームのフィールドなどでしょう。

潜在的なソースの詳細は、WebセキュリティアカデミーでDOMベースの脆弱性についてのトピックを参照してください。

Webセキュリティアカデミー

DOMベースの脆弱性

カナリアを複数のソースに挿入

手動でカナリアを複数のソースに一斉にペーストもできますが、これを自動的に行うには次の方法もあります:

すべてのURLパラメータやフォームフィールドに一斉にカナリアを挿入すると、サイトが正常に動作しなくなる可能性があります。最善の結果を得るためには、1回あたり1つのソースのテストをお勧めします。

制御可能なシンクの特定

カナリアを挿入すると、DOM Invaderは自動的にDOMを解析し、カナリアが出現するシンクを見つけます。そして、これらのシンクをDOMビューに、興味深い順にソートして表示します。

XSSコンテキストの判定

制御可能なシンクを特定したら、次のステップは挿入したペイロードが出現するコンテキストの調査です。これには、以下の情報の判断を行います:

DOM Invaderはそのために、挿入したカナリアがDOMでどのように表示されるか、カナリアとその周囲の文字を含むシンクの内容を表示します。次の例では、有用なさまざまな文字をうまく挿入できていることがわかります。

反射型XSSのようにDOM XSSをテスト

また、DOM Invaderが識別したシンクの種類によって、次のような詳細が表示されます:

この情報により、XSSのコンテキストを簡単に確認し、悪用するにはどの文字やイベントが必要かをテストできます。次の例では、ダブルクオートで囲まれた文字列と<span>タグを抜け出し、XSSの概念実証に成功しています。

エクスプロイトの作成

クライアント側のコードの検討

さまざまな挿入を行っていると、突然シンクに入力が流れなくなることがあります。これは、特定の条件分岐をした場合など、特定のコードパスを通る場合しかシンクにたどり付けないのかもしれません。

DOM Invaderは、クライアント側のコードで入力がシンクに渡されるポイントに直接ジャンプできます。そして、入力がシンクにたどり着くためにどのような条件を満たす必要があるのか、直前のコードを確認できます。

コード内の該当行を表示するには:

  1. シンクにたどり着くことが分かっているペイロードを挿入します。
  2. DOM InvaderのDOMビューで、Stack Trace列をクリックします。すると、ブラウザのコンソールにスタックトレースが出力されます。
  3. デベロッパーツールパネルで、コンソールタブに切り替えます。
  4. スタックトレースで、一番上のリンクをクリックします(1つしかない場合もあります)。するとソースタブでクライアント側のJavaScriptが開かれ、入力がシンクに渡される行にフォーカスが移動します。

続きを読む

DOM Invaderは高度な設定が可能です。DOM Invaderの高度な機能と、特定サイト向けに動作を微調整する方法は、DOM Invader設定を参照してください。