GWS - App Scripts
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
App Scriptsは、編集者権限を持つユーザーがApp Scriptにリンクされたドキュメントにアクセスしたときにトリガーされるコードであり、OAuthプロンプトを受け入れた後に実行されます。 また、App Scriptの所有者によって特定の時間ごとに実行されるように設定することもできます(持続性)。
App Scriptを作成する方法はいくつかありますが、最も一般的な方法はGoogleドキュメント(任意のタイプ)からとスタンドアロンプロジェクトとしてです:
App Scriptを作成することから始めます。このシナリオに対する私の推奨は、Google Sheetを作成し、**拡張機能 > App Scripts
**に移動することです。これにより、シートにリンクされた新しいApp Scriptが開きます。
OAuthトークンへのアクセスを提供するには、サービス +
をクリックし、次のようなスコープを追加する必要があります:
AdminDirectory: ディレクトリのユーザーとグループにアクセス(ユーザーに十分な権限がある場合)
Gmail: Gmailデータにアクセスするため
Drive: Driveデータにアクセスするため
Google Sheets API: トリガーと連携するため
必要なスコープを自分で変更するには、プロジェクト設定に移動し、エディタに「appsscript.json」マニフェストファイルを表示
を有効にします。
リクエストをキャプチャするには、次のように実行するだけです:
Permissions requested to execute the App Script:
外部リクエストが行われると、OAuthプロンプトは外部エンドポイントにアクセスするための権限を要求します。
アプリを読み込んだら、⏰ トリガーをクリックしてトリガーを作成します。関数として**getToken
を選択し、デプロイメントはHead
、イベントソースはFrom spreadsheet
を選択し、イベントタイプはOn open
またはOn edit
**(必要に応じて)を選択して保存します。
デバッグしたい場合は、実行タブでアプリスクリプトの実行を確認できます。
App Scriptをトリガーするためには、被害者が編集者アクセスで接続する必要があります。
App Scriptを実行するために使用されるトークンは、トリガーの作成者のものであり、他のユーザーが編集者としてファイルを開いても変わりません。
誰かがApp Scriptsとトリガーを使用してアプリスクリプトのヘッドを共有した場合(固定デプロイメントではない)、アプリスクリプトのコードを変更(例えば、トークンを盗む関数を追加)し、アクセスすると、アプリスクリプトはドキュメントを共有したユーザーの権限で実行されます! (トリガーが作成されたときに与えられたアクセススコープを持つオーナーのOAuthトークンに注意してください)。
スクリプトの作成者に誰かがスクリプトを変更したことを示す通知が送信されます(アラートを防ぐためにGmailの権限を使用してフィルターを生成するのはどうですか?)
攻撃者がApp Scriptのスコープを変更した場合、更新は新しいトリガーが作成されるまでドキュメントに適用されません。したがって、攻撃者は、作成したトリガーで設定したスコープよりも多くのスコープを持つオーナーのトークンを盗むことはできません。
ドキュメントを共有するためのリンクを作成すると、次のようなリンクが作成されます:https://docs.google.com/spreadsheets/d/1i5[...]aIUD/edit
**"/edit"の部分を"/copy"**に変更すると、Googleはアクセスするのではなく、ドキュメントのコピーを生成するかどうかを尋ねます:
ユーザーがコピーしてアクセスすると、ドキュメントの内容とアプリスクリプトがコピーされますが、トリガーはコピーされないため、何も実行されません。
アプリスクリプトをウェブアプリケーションとして共有することも可能です(アプリスクリプトのエディタで、ウェブアプリケーションとしてデプロイします)が、次のようなアラートが表示されます:
その後、必要な権限を求める典型的なOAuthプロンプトが表示されます。
収集したトークンを使用してメールをリストするには、次のコマンドをテストできます:
ユーザーのカレンダーをリストする:
持続性のための1つのオプションは、ドキュメントを作成し、getToken 関数のトリガーを追加し、攻撃者とドキュメントを共有することです。これにより、攻撃者がファイルを開くたびに、被害者のトークンを抽出します。
また、App Scriptを作成し、X時間ごとにトリガーを設定することも可能です(例えば、毎分、毎時、毎日...)。被害者の資格情報やセッションを侵害した攻撃者は、App Scriptの時間トリガーを設定し、非常に特権のあるOAuthトークンを毎日漏洩させることができます:
App Scriptを作成し、トリガーに移動し、「トリガーを追加」をクリックし、イベントソースとして「時間駆動」を選択し、あなたに最適なオプションを選択します:
これにより、セキュリティアラートメールとモバイルへのプッシュメッセージが作成されます。
さらに、誰かが編集者アクセスを持つドキュメントを共有した場合、そのドキュメント内にApp Scriptsを生成することができ、ドキュメントの所有者(作成者)がApp Scriptの所有者になります。
これは、ドキュメントの作成者が、誰でもその中で作成したApp Scriptの作成者として表示されることを意味します。
また、App Scriptはドキュメントの作成者のWorkspace環境によって信頼されることを意味します。
これは、App Scriptがすでに存在し、人々がアクセスを許可している場合、ドキュメントに編集者権限を持つ誰でもそれを変更し、そのアクセスを悪用できることを意味します。
これを悪用するには、App Scriptをトリガーする人々が必要です。そして、1つの便利なトリックは、スクリプトをウェブアプリとして公開することです。すでにApp Scriptにアクセスを許可した人々がウェブページにアクセスすると、App Scriptをトリガーします(これは<img>
タグを使用しても機能します)。
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)