
Single Page Applications向けDOM XSSスキャナー
DOMDigは、Chromiumウェブブラウザ内で動作するDOM XSSスキャナであり、シングルページアプリケーション(SPA)を再帰的にスキャンできます。
他のスキャナとは異なり、DOMDigはDOMの変更やXHR/fetch/websocketリクエストを追跡することで、あらゆるウェブアプリケーション(gmailを含む)をクロールでき、イベントを発火させることで実際のユーザー操作をシミュレートできます。このプロセス中に、XSSペイロードが入力フィールドに挿入され、その実行が追跡されることで、インジェクションポイントと関連するURLの変更が特定されます。
htcrawlをベースにしており、gmailアカウントを簡単にクロールできるほど強力なNodeライブラリです。
git clone https://github.com/fcavallarin/domdig.git
cd domdig && npm i && cd ..
node domdig/domdig.js
node domdig.js -c 'foo=bar' -p http:127.0.0.1:8080 https://fcvl.net/htcap/scanme/domxss.php
DOMDigは3つの異なるチェックを実行できます。
DOM XSSチェックは異なるモードで設定でき、異なる動作を可能にします。デフォルトではすべてのモードが有効です。
モードは以下の通りです。
DOMをクロールし、ユーザーがJavaScriptコードを注入できる場所(テキストボックスなど)を検索します。スキャナでは推測できないインジェクションポイントを発見できます。例としては、入力ボックスのテキストを受け取り、検索をトリガーするためにJSON文字列としてURLのハッシュに格納する検索機能が挙げられます。
URL(クエリパラメータとハッシュ)をファジングし、ページ読み込み時にコードが実行されるかどうかを確認します。コードが実行されない場合は、DOMをクロールしてHTMLイベントをトリガーし、ペイロードを実行する何かを見つけようとします。
また、古典的な反射型XSSも発見できます。
DOM XSSチェックが実行された後、DOMDigは同じページをクロールし、以前使用されたペイロードの実行を待ちます。ペイロードが見つかった場合、それはページのリロード後も永続することを意味します。
テンプレートプレースホルダー(例:{var1})がJavaScriptコードとして評価される可能性のある場所を検索します。
報告される各脆弱性には以下のフィールドが含まれます。
domxss、stored、templateinjのいずれか。DOMDigはクロールエンジンとしてhtcrawlを使用しています。
図は再帰的なクローリングプロセスを示しています。
。
以下の動画は、エンジンがGmailをクロールしている様子です。クロールは数時間続き、約3000のXHRリクエストがキャプチャされました。
ログインシーケンス(または初期シーケンス)は、スキャン開始前に実行するアクションのリストを含むJSONオブジェクトです。 リストの各要素は配列で、最初の要素は実行するアクションの名前、残りの要素はそれらのアクションへの「パラメータ」です。 アクションは以下の通りです。
[
["navigate", "https://target.local/login-page"],
["write", "#username", "demo"],
["write", "#password", "demo"],
["sleep", 2],
["clickToNavigate", "#btn-login"]
]
ペイロードはJSONファイル(-Pオプション)から文字列の配列として読み込むことができます。カスタムペイロードを作成するには、文字列 window.___xssSink({0}) を実行する関数として使用する必要があります(従来の alert(1) の代わりに)。
[
';window.___xssSink({0});',
'<img src="https://raw.githubusercontent.com/fcavallarin/domdig/HEAD/a" onerror="window.___xssSink({0})">'
]