DOM XSSのテストで入力の流れを追跡する際、多くの場合JavaScriptが複雑でときには数千行に及ぶこともあるため、面倒な作業になることがあります。DOM Invaderはこのプロセスを大幅に簡素化し、入力がたどり着くシンクを関連するコンテキストとともに即座に表示します。
拡張機能のDOMビューから、ほとんどの機能にアクセスできます。
DOM InvaderはDOMを自動的に解析し、あらかじめ定義した"カナリア"文字列が出現する箇所を探す動作をします。これは適当かつ独自の文字列で、それぞれを異なるソースに挿入するとどのシンクにたどり着くかを確認できます。
DOM Invaderが追跡している現在のカナリアは、DOMビューの左上隅に表示されています。なお任意のカスタム文字列にカナリアを変更できます。
カナリアを手動でソースに挿入するには:
ブラウザのデベロッパーツールにある、DOM Invaderタブを表示します。
DOMになっていることを確認してください。
Copy canaryをクリックします。DOM Invaderが追跡しているカナリアがクリップボードにコピーされます。
テストしたい入力にカナリアをペーストします。URLのクエリパラメータやフォームのフィールドなどでしょう。
潜在的なソースの詳細は、WebセキュリティアカデミーでDOMベースの脆弱性についてのトピックを参照してください。
手動でカナリアを複数のソースに一斉にペーストもできますが、これを自動的に行うには次の方法もあります:
すべてのURLパラメータやフォームフィールドに一斉にカナリアを挿入すると、サイトが正常に動作しなくなる可能性があります。最善の結果を得るためには、1回あたり1つのソースのテストをお勧めします。
カナリアを挿入すると、DOM Invaderは自動的にDOMを解析し、カナリアが出現するシンクを見つけます。そして、これらのシンクをDOMビューに、興味深い順にソートして表示します。
制御可能なシンクを特定したら、次のステップは挿入したペイロードが出現するコンテキストの調査です。これには、以下の情報の判断を行います:
HTMLやJavaScriptが実行されるシンクかどうか。
入力した文字が特殊文字で囲まれていて、そこから抜け出す必要があるかどうか。これは引用符、タグ、属性などです。
入力がシンクに到達する前に、入力に対して検証、サニタイズ、その他の処理がWebサイトで行われているかどうか。
DOM Invaderはそのために、挿入したカナリアがDOMでどのように表示されるか、カナリアとその周囲の文字を含むシンクの内容を表示します。次の例では、有用なさまざまな文字をうまく挿入できていることがわかります。
また、DOM Invaderが識別したシンクの種類によって、次のような詳細が表示されます:
Outer HTML - カナリアを囲むHTML要素。
Frame path - カナリアがシンクにたどり着くフレーム。
Event - カナリアがシンクにたどり着いたときに発生するJavaScriptイベント。
この情報により、XSSのコンテキストを簡単に確認し、悪用するにはどの文字やイベントが必要かをテストできます。次の例では、ダブルクオートで囲まれた文字列と<span>
タグを抜け出し、XSSの概念実証に成功しています。
さまざまな挿入を行っていると、突然シンクに入力が流れなくなることがあります。これは、特定の条件分岐をした場合など、特定のコードパスを通る場合しかシンクにたどり付けないのかもしれません。
DOM Invaderは、クライアント側のコードで入力がシンクに渡されるポイントに直接ジャンプできます。そして、入力がシンクにたどり着くためにどのような条件を満たす必要があるのか、直前のコードを確認できます。
コード内の該当行を表示するには:
DOM Invaderは高度な設定が可能です。DOM Invaderの高度な機能と、特定サイト向けに動作を微調整する方法は、DOM Invader設定を参照してください。