# GWS - Phishing sur les plateformes Google

{{#include ../../../banners/hacktricks-training.md}}

## Méthodologie de phishing générique

{{#ref}}
https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html
{{#endref}}

## Phishing sur Google Groups

Apparemment, par défaut, dans workspace, les membres [**peuvent créer des groupes**](https://groups.google.com/all-groups) **et inviter des personnes à ceux-ci**. Vous pouvez ensuite modifier l'email qui sera envoyé à l'utilisateur **en ajoutant des liens.** L'**email proviendra d'une adresse google**, donc il aura l'air **légitime** et les gens pourraient cliquer sur le lien.

Il est également possible de définir l'adresse **FROM** comme l'**email du groupe Google** pour envoyer **plus d'emails aux utilisateurs à l'intérieur du groupe**, comme dans l'image suivante où le groupe **`google--support@googlegroups.com`** a été créé et un **email a été envoyé à tous les membres** du groupe (qui ont été ajoutés sans aucun consentement)

<figure><img src="../../../images/image (5) (1).png" alt=""><figcaption></figcaption></figure>

## Phishing sur Google Chat

Vous pourriez être en mesure de **démarrer un chat** avec une personne simplement en ayant son adresse email ou d'envoyer une **invitation à discuter**. De plus, il est possible de **créer un Espace** qui peut avoir n'importe quel nom (par exemple "Support Google") et **inviter** des membres à celui-ci. S'ils acceptent, ils pourraient penser qu'ils parlent au Support Google :

<figure><img src="../../../images/image (6).png" alt=""><figcaption></figcaption></figure>

> [!TIP]
> **Cependant, lors de mes tests, les membres invités n'ont même pas reçu d'invitation.**

Vous pouvez vérifier comment cela a fonctionné dans le passé ici : [https://www.youtube.com/watch?v=KTVHLolz6cE\&t=904s](https://www.youtube.com/watch?v=KTVHLolz6cE&t=904s)

## Phishing sur Google Doc

Dans le passé, il était possible de créer un **document apparemment légitime** et dans un commentaire **mentionner un email (comme @user@gmail.com)**. Google **a envoyé un email à cette adresse email** pour notifier qu'ils avaient été mentionnés dans le document.\
Aujourd'hui, cela ne fonctionne plus mais si vous **donnez à la victime un accès email au document**, Google enverra un email l'indiquant. Voici le message qui apparaît lorsque vous mentionnez quelqu'un :

<figure><img src="../../../images/image (7).png" alt=""><figcaption></figcaption></figure>

> [!TIP]
> Les victimes pourraient avoir un mécanisme de protection qui n'autorise pas que les emails indiquant qu'un document externe a été partagé avec elles atteignent leur email.

## Phishing sur Google Calendar

Vous pouvez **créer un événement de calendrier** et ajouter autant d'adresses email de l'entreprise que vous attaquez. Planifiez cet événement de calendrier dans **5 ou 15 minutes** à partir de l'heure actuelle. Faites en sorte que l'événement ait l'air légitime et **mettez un commentaire et un titre indiquant qu'ils doivent lire quelque chose** (avec le **lien de phishing**).

Voici l'alerte qui apparaîtra dans le navigateur avec un titre de réunion "Licenciement de personnes", donc vous pourriez définir un titre plus orienté phishing (et même changer le nom associé à votre email).

<figure><img src="../../../images/image (8).png" alt=""><figcaption></figcaption></figure>

Pour le rendre moins suspect :

- Configurez-le de sorte que **les destinataires ne puissent pas voir les autres personnes invitées**
- **NE pas envoyer d'emails notifiant de l'événement**. Ainsi, les gens ne verront que leur avertissement concernant une réunion dans 5 minutes et qu'ils doivent lire ce lien.
- Apparemment, en utilisant l'API, vous pouvez définir sur **True** que **les personnes** ont **accepté** l'événement et même créer **des commentaires en leur nom**.

## Phishing par redirection de scripts d'application

Il est possible de créer un script sur [https://script.google.com/](https://script.google.com/) et **de l'exposer comme une application web accessible par tous** qui utilisera le domaine légitime **`script.google.com`**.\
Avec un code comme le suivant, un attaquant pourrait faire en sorte que le script charge du contenu arbitraire sur cette page sans cesser d'accéder au domaine :
```javascript
function doGet() {
return HtmlService.createHtmlOutput(
'<meta http-equiv="refresh" content="0;url=https://cloud.hacktricks.wiki/en/pentesting-cloud/workspace-security/gws-google-platforms-phishing/index.html#app-scripts-redirect-phishing">'
).setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL)
}
```
Pour accéder à [https://script.google.com/macros/s/AKfycbwuLlzo0PUaT63G33MtE6TbGUNmTKXCK12o59RKC7WLkgBTyltaS3gYuH_ZscKQTJDC/exec](https://script.google.com/macros/s/AKfycbwuLlzo0PUaT63G33MtE6TbGUNmTKXCK12o59RKC7WLkgBTyltaS3gYuH_ZscKQTJDC/exec), vous verrez :

<figure><img src="../../../images/image (4) (1).png" alt=""><figcaption></figcaption></figure>

> [!TIP]
> Notez qu'un avertissement apparaîtra lorsque le contenu sera chargé dans un iframe.

## Phishing OAuth des App Scripts

Il est possible de créer des App Scripts attachés à des documents pour essayer d'accéder au token OAuth d'une victime, pour plus d'informations, consultez :

{{#ref}}
gws-app-scripts.md
{{#endref}}

## Phishing des Apps OAuth

N'importe laquelle des techniques précédentes peut être utilisée pour amener l'utilisateur à accéder à une **application Google OAuth** qui **demande** à l'utilisateur certains **accès**. Si l'utilisateur **fait confiance** à la **source**, il pourrait **faire confiance** à l'**application** (même si elle demande des autorisations très privilégiées).

> [!NOTE]
> Notez que Google présente un prompt peu engageant avertissant que l'application est non fiable dans plusieurs cas et que les administrateurs de Workspace peuvent même empêcher les gens d'accepter des applications OAuth.

**Google** permet de créer des applications qui peuvent **interagir au nom des utilisateurs** avec plusieurs **services Google** : Gmail, Drive, GCP...

Lors de la création d'une application pour **agir au nom d'autres utilisateurs**, le développeur doit créer une **application OAuth à l'intérieur de GCP** et indiquer les scopes (permissions) dont l'application a besoin pour accéder aux données des utilisateurs.\
Lorsqu'un **utilisateur** souhaite **utiliser** cette **application**, il sera **invité** à **accepter** que l'application aura accès à ses données spécifiées dans les scopes.

C'est un moyen très juteux de **phisher** des utilisateurs non techniques en les amenant à utiliser des **applications qui accèdent à des informations sensibles** car ils pourraient ne pas comprendre les conséquences. Cependant, dans les comptes d'organisations, il existe des moyens d'empêcher cela.

### Avertissement d'Application Non Vérifiée

Comme mentionné, Google présentera toujours un **prompt à l'utilisateur pour accepter** les permissions qu'il accorde à l'application en son nom. Cependant, si l'application est considérée comme **dangereuse**, Google affichera **d'abord** un **prompt** indiquant qu'elle est **dangereuse** et **rendant plus difficile** pour l'utilisateur d'accorder les permissions à l'application.

Ce prompt apparaît dans les applications qui :

- Utilisent un scope pouvant accéder à des données privées (Gmail, Drive, GCP, BigQuery...)
- Applications avec moins de 100 utilisateurs (pour les applications > 100, un processus de révision est également nécessaire pour arrêter d'afficher le prompt non vérifié)

### Scopes Intéressants

[**Ici**](https://developers.google.com/identity/protocols/oauth2/scopes) vous pouvez trouver une liste de tous les scopes OAuth de Google.

- **cloud-platform** : Voir et gérer vos données à travers les services de **Google Cloud Platform**. Vous pouvez usurper l'identité de l'utilisateur dans GCP.
- **admin.directory.user.readonly** : Voir et télécharger le répertoire GSuite de votre organisation. Obtenez les noms, téléphones, URLs de calendrier de tous les utilisateurs.

### Créer une Application OAuth

**Commencez à créer un ID Client OAuth**

1. Allez sur [https://console.cloud.google.com/apis/credentials/oauthclient](https://console.cloud.google.com/apis/credentials/oauthclient) et cliquez sur configurer l'écran de consentement.
2. Ensuite, on vous demandera si le **type d'utilisateur** est **interne** (uniquement pour les personnes de votre organisation) ou **externe**. Sélectionnez celui qui convient à vos besoins.
- Interne peut être intéressant si vous avez déjà compromis un utilisateur de l'organisation et que vous créez cette application pour en phisher un autre.
3. Donnez un **nom** à l'application, un **email de support** (notez que vous pouvez définir un email de groupe Google pour essayer de vous anonymiser un peu plus), un **logo**, des **domaines autorisés** et un autre **email** pour les **mises à jour**.
4. **Sélectionnez** les **scopes OAuth**.
- Cette page est divisée en permissions non sensibles, permissions sensibles et permissions restreintes. Chaque fois que vous ajoutez une nouvelle permission, elle est ajoutée dans sa catégorie. Selon les permissions demandées, différents prompts apparaîtront à l'utilisateur indiquant à quel point ces permissions sont sensibles.
- Les permissions **`admin.directory.user.readonly`** et **`cloud-platform`** sont des permissions sensibles.
5. **Ajoutez les utilisateurs de test.** Tant que le statut de l'application est en test, seuls ces utilisateurs pourront accéder à l'application, alors assurez-vous d'**ajouter l'email que vous allez phisher**.

Maintenant, obtenons des **identifiants pour une application web** en utilisant l'**ID Client OAuth précédemment créé** :

1. Retournez sur [https://console.cloud.google.com/apis/credentials/oauthclient](https://console.cloud.google.com/apis/credentials/oauthclient), une option différente apparaîtra cette fois.
2. Sélectionnez pour **créer des identifiants pour une application Web**.
3. Définissez les **origines Javascript** et les **URI de redirection** nécessaires.
- Vous pouvez définir dans les deux quelque chose comme **`http://localhost:8000/callback`** pour les tests.
4. Obtenez vos **identifiants d'application**.

Enfin, exécutons une **application web qui utilisera les identifiants de l'application OAuth**. Vous pouvez trouver un exemple sur [https://github.com/carlospolop/gcp_oauth_phishing_example](https://github.com/carlospolop/gcp_oauth_phishing_example).
```bash
git clone ttps://github.com/carlospolop/gcp_oauth_phishing_example
cd gcp_oauth_phishing_example
pip install flask requests google-auth-oauthlib
python3 app.py --client-id "<client_id>" --client-secret "<client_secret>"
```
Allez à **`http://localhost:8000`**, cliquez sur le bouton Login with Google, vous serez **invité** avec un message comme celui-ci :

<figure><img src="../../../images/image (333).png" alt=""><figcaption></figcaption></figure>

L'application affichera le **jeton d'accès et le jeton de rafraîchissement** qui peuvent être facilement utilisés. Pour plus d'informations sur **comment utiliser ces jetons, consultez** :

{{#ref}}
../../gcp-security/gcp-persistence/gcp-non-svc-persistance.md
{{#endref}}

#### Utilisation de `glcoud`

Il est possible de faire quelque chose en utilisant gcloud au lieu de la console web, consultez :

{{#ref}}
../../gcp-security/gcp-privilege-escalation/gcp-clientauthconfig-privesc.md
{{#endref}}

## Références

- [https://www.youtube-nocookie.com/embed/6AsVUS79gLw](https://www.youtube-nocookie.com/embed/6AsVUS79gLw) - Matthew Bryant - Hacking G Suite: The Power of Dark Apps Script Magic
- [https://www.youtube.com/watch?v=KTVHLolz6cE](https://www.youtube.com/watch?v=KTVHLolz6cE) - Mike Felch et Beau Bullock - OK Google, How do I Red Team GSuite?

{{#include ../../../banners/hacktricks-training.md}}
