GCPBucketBrute
Un script pour énumérer les compartiments de stockage Google, déterminer l'accès dont vous disposez et déterminer s'ils peuvent bénéficier d'une élévation de privilèges.
- Ce script accepte (facultatif) les informations d'identification du compte d'utilisateur/de service GCP et un mot-clé.
- Ensuite, une liste de permutations sera générée à partir de ce mot-clé qui sera ensuite utilisée pour rechercher l'existence de compartiments de stockage Google portant ces noms.
- Si les informations d'identification sont fournies, la majorité de l'énumération sera toujours effectuée sans authentification, mais pour tout compartiment découvert via une énumération non authentifiée, il tentera d'énumérer les autorisations du compartiment à l'aide de l'API TestIamPermissions avec les informations d'identification fournies. Cela aidera à trouver les compartiments accessibles lorsqu'ils sont authentifiés, mais pas lorsqu'ils ne sont pas authentifiés.
- Que les informations d'identification soient fournies ou non, le script tentera ensuite d'énumérer les autorisations du compartiment à l'aide de l'API TestIamPermissions sans être authentifié. Cela signifie que si vous ne saisissez pas d'informations d'identification, seuls les privilèges dont dispose un utilisateur non authentifié vous seront affichés, mais si vous saisissez les informations d'identification, vous verrez quel accès les utilisateurs authentifiés ont par rapport aux utilisateurs non authentifiés.
- AVERTISSEMENT : si des informations d'identification sont fournies, votre nom d'utilisateur peut être divulgué dans les journaux d'accès de tous les compartiments que vous découvrez.
TL;DR Résumé
- Étant donné un mot-clé, ce script énumère les compartiments de stockage Google en fonction d'un certain nombre de permutations générées à partir du mot-clé.
- Ensuite, tout compartiment découvert sera affiché.
- Ensuite, toutes les autorisations qui vous sont accordées (le cas échéant) sur tout compartiment découvert seront affichées.
- Ensuite, le script vérifiera ces privilèges pour l'augmentation des privilèges (storage.buckets.setIamPolicy) et affichera tout ce qui est intéressant (comme une liste publique, une écriture publique, une liste authentifiée, une élévation de privilèges, etc.).
Exigences
- Linux/OS X
- Windows ne fonctionne que pour les analyses non authentifiées. Quelque chose ne va pas dans la façon dont le script utilise le module de sous-processus dans la mesure où il échoue lors de l'utilisation d'un client Google authentifié.
- Python3
- Pip3
Installation
-
git clone https://github.com/RhinoSecurityLabs/GCPBucketBrute.git
-
cd GCPBucketBrute/
-
pip3 install -r requirements.txt
ou python3 -m pip install -r requirements.txt
Usage
Tout d’abord, déterminez le type d’authentification que vous souhaitez utiliser pour l’énumération entre un compte utilisateur, un compte de service ou non authentifié. Si vous utilisez un compte de service, fournissez le chemin du fichier vers la clé privée via l'argument -f
/ --service-account-credential-file-path
. Si vous utilisez un compte utilisateur, ne fournissez pas d'argument d'authentification. Vous serez ensuite invité à saisir le jeton d'accès de votre compte utilisateur pour accéder aux API GCP. Si vous souhaitez analyser sans aucune authentification, transmettez l'argument -u
/ --unauthenticated
pour masquer les invites d'authentification.
- Recherchez les buckets à l'aide du mot-clé « test » sans aucune authentification :
python3 gcpbucketbrute.py -k test -u
- Recherchez les compartiments à l'aide du mot-clé « test » lors de l'authentification avec un compte de service (clé privée stockée dans ../sa-priv-key.pem), en affichant les résultats dans out.txt dans le répertoire actuel :
python3 gcpbucketbrute.py -k test -f ../sa-priv-key.pem -o ./out.txt
- Recherchez les compartiments à l'aide du mot-clé « test », à l'aide d'un jeton d'accès au compte utilisateur, exécuté avec 10 sous-processus au lieu de 5 :
python3 gcpbucketbrute.py -k test -s 10
Arguments disponibles
-
-k
/ --keyword
- Cet argument est utilisé pour spécifier avec quel mot-clé sera utilisé pour générer les permutations. Ces permutations sont ce qui sera recherché dans Google Storage.
-
--check
- Cet argument s'exclut mutuellement avec
-k
/ --keyword
et accepte une seule chaîne. Il vous permet de vérifier vos autorisations sur un compartiment particulier, plutôt que de générer une liste de permutations basées sur un mot-clé. Cette opération peut être répétée pour vérifier plusieurs compartiments. Crédit : @BBerastegui
-
--check-list
- Cet argument s'exclut mutuellement avec
-k
/ --keyword
et --check
. Il vous permet de vérifier les autorisations d'une liste de buckets dans un fichier. Ils doivent être répertoriés une par ligne dans un fichier texte. Pour lire à partir de l'entrée standard, transmettez -
comme nom de fichier.
-
-s
/ --subprocesses
- Cet argument spécifie le nombre de sous-processus qui seront utilisés pour l'énumération du compartiment. La valeur par défaut est 5 et plus vous définissez cette valeur, plus l'énumération sera rapide, mais vos requêtes par seconde adressées à Google augmenteront. Ce sont essentiellement des threads, mais le script utilise des sous-processus au lieu de threads pour une exécution parallèle.
-
-f
/ --service-account-credential-file-path
- Cet argument vous permet de spécifier le chemin d'accès au fichier de clé privée du compte de service GCP que vous souhaitez utiliser pour vous authentifier auprès de Google Storage. Ceci est facultatif. Si vous souhaitez utiliser un jeton d'accès à la place, omettez cet argument et vous serez invité à saisir le jeton afin qu'il ne soit pas enregistré dans l'historique de votre ligne de commande. Plus d'informations ici : https://google-auth.readthedocs.io/en/latest/user-guide.html#service-account-private-key-files et ici : https://google-auth.readthedocs.io/ fr/latest/user-guide.html#user-credentials
-
-u
/ --unauthenticated
- Cet argument force une énumération non authentifiée. Avec cet indicateur, vous ne serez pas invité à fournir des informations d'identification et les compartiments valides ne seront pas vérifiés pour les autorisations authentifiées.
-
-o
/ --out-file
- Cet argument vous permet de spécifier un chemin de fichier (relatif ou absolu) vers un fichier journal vers lequel afficher les résultats. Le fichier sera créé s'il n'existe pas déjà et il sera ajouté s'il existe déjà.
-
-w
/ --wordlist
- Cet argument vous permet de spécifier un fichier d'entrée de liste de mots.