GCPBucketBrute
Um script para enumerar intervalos de armazenamento do Google, determinar qual acesso você tem a eles e determinar se eles podem ter privilégios escalonados.
- Este script (opcionalmente) aceita credenciais de conta de usuário/serviço do GCP e uma palavra-chave.
- Em seguida, uma lista de permutações será gerada a partir dessa palavra-chave que será usada para verificar a existência de intervalos de armazenamento do Google com esses nomes.
- Se as credenciais forem fornecidas, a maior parte da enumeração ainda será executada enquanto não estiver autenticada, mas para qualquer bucket descoberto por meio de enumeração não autenticada, ele tentará enumerar as permissões do bucket usando a API TestIamPermissions com as credenciais fornecidas. Isso ajudará a encontrar buckets acessíveis enquanto autenticados, mas não enquanto não autenticados.
- Independentemente de as credenciais serem fornecidas ou não, o script tentará enumerar as permissões do bucket usando a API TestIamPermissions enquanto não estiver autenticado. Isso significa que se você não inserir credenciais, serão mostrados apenas os privilégios de um usuário não autenticado, mas se você inserir credenciais, verá qual acesso os usuários autenticados têm em comparação com usuários não autenticados.
- AVISO: Se as credenciais forem fornecidas, seu nome de usuário poderá ser divulgado nos logs de acesso de qualquer bucket que você descobrir.
Resumo TL;DR
- Dada uma palavra-chave, este script enumera os intervalos do Google Storage com base em uma série de permutações geradas a partir da palavra-chave.
- Então, qualquer bucket descoberto será gerado.
- Em seguida, todas as permissões concedidas a você (se houver) para qualquer bucket descoberto serão geradas.
- Em seguida, o script verificará esses privilégios para escalonamento de privilégios (storage.buckets.setIamPolicy) e produzirá qualquer coisa interessante (como listável publicamente, gravável publicamente, listável autenticado, escalonamento de privilégios, etc.).
Requisitos
- Linux/OS X
- O Windows funciona apenas para verificações não autenticadas. Algo está errado com a forma como o script usa o módulo de subprocesso, pois ele falha ao usar um cliente Google autenticado.
- Python3
- Pip3
Instalação
-
git clone https://github.com/RhinoSecurityLabs/GCPBucketBrute.git
-
cd GCPBucketBrute/
-
pip3 install -r requirements.txt
ou python3 -m pip install -r requirements.txt
Uso
Primeiro, determine o tipo de autenticação que você deseja usar para enumeração entre uma conta de usuário, conta de serviço ou não autenticada. Se você estiver usando uma conta de serviço, forneça o caminho do arquivo para a chave privada por meio do argumento -f
/ --service-account-credential-file-path
. Se você estiver usando uma conta de usuário, não forneça um argumento de autenticação. Em seguida, você será solicitado a inserir o token de acesso da sua conta de usuário para acessar as APIs do GCP. Se você deseja fazer uma varredura completamente não autenticada, passe o argumento -u
/ --unauthenticated
para ocultar os prompts de autenticação.
- Procure buckets usando a palavra-chave "test" enquanto estiver completamente não autenticado:
python3 gcpbucketbrute.py -k test -u
- Procure buckets usando a palavra-chave "test" durante a autenticação com uma conta de serviço (chave privada armazenada em ../sa-priv-key.pem), gerando resultados para out.txt no diretório atual:
python3 gcpbucketbrute.py -k test -f ../sa-priv-key.pem -o ./out.txt
- Procure buckets usando a palavra-chave "test", usando um token de acesso à conta de usuário, executando com 10 subprocessos em vez de 5:
python3 gcpbucketbrute.py -k test -s 10
Argumentos Disponíveis
-
-k
/ --keyword
- Este argumento é usado para especificar qual palavra-chave será usada para gerar permutações. Essas permutações são o que serão pesquisadas no Google Storage.
-
--check
- Este argumento é mutuamente exclusivo com
-k
/ --keyword
e aceita uma única string. Ele permite que você verifique suas permissões em um determinado intervalo, em vez de gerar uma lista de permutações com base em uma palavra-chave. Isto pode ser repetido para verificar vários baldes. Crédito: @BBerastegui
-
--check-list
- Este argumento é mutuamente exclusivo com
-k
/ --keyword
e --check
. Ele permite que você verifique as permissões de uma lista de buckets em um arquivo. Eles devem ser listados um por linha em um arquivo de texto. Para ler a entrada padrão, passe -
como nome do arquivo.
-
-s
/ --subprocesses
- Este argumento especifica quantos subprocessos serão usados para enumeração de bucket. O padrão é 5 e quanto maior você definir esse valor, mais rápida será a enumeração, mas suas solicitações por segundo ao Google aumentarão. São essencialmente threads, mas o script usa subprocessos em vez de threads para execução paralela.
-
-f
/ --service-account-credential-file-path
- Este argumento é onde você especifica o caminho para o arquivo de chave privada da conta de serviço do GCP que deseja usar para autenticar no Google Storage. Isso é opcional. Se você quiser usar um token de acesso, omita esse argumento e o token será solicitado para que ele não seja salvo em seu histórico de linha de comando. Mais informações aqui: https://google-auth.readthedocs.io/en/latest/user-guide.html#service-account-private-key-files e aqui: https://google-auth.readthedocs.io/ en/latest/user-guide.html#user-credentials
-
-u
/ --unauthenticated
- Este argumento força a enumeração não autenticada. Com esse sinalizador, não serão solicitadas credenciais e os buckets válidos não serão verificados quanto a permissões autenticadas.
-
-o
/ --out-file
- Este argumento permite que você especifique um caminho de arquivo (relativo ou absoluto) para um arquivo de log para o qual os resultados serão gerados. O arquivo será criado se ainda não existir e será anexado se já existir.
-
-w
/ --wordlist
- Este argumento permite especificar um arquivo de entrada de lista de palavras.