GCPCuboBruto
Una secuencia de comandos para enumerar los depósitos de Google Storage, determinar qué acceso tiene a ellos y determinar si se les puede escalar privilegios.
- Este script (opcionalmente) acepta credenciales de cuenta de servicio/usuario de GCP y una palabra clave.
- Luego, se generará una lista de permutaciones a partir de esa palabra clave que luego se usará para buscar la existencia de depósitos de Google Storage con esos nombres.
- Si se proporcionan credenciales, la mayor parte de la enumeración se seguirá realizando sin estar autenticado, pero para cualquier depósito que se descubra mediante una enumeración no autenticada, intentará enumerar los permisos del depósito mediante la API TestIamPermissions con las credenciales proporcionadas. Esto ayudará a encontrar depósitos a los que se pueda acceder mientras se está autenticado, pero no cuando no se está autenticado.
- Independientemente de si se proporcionan las credenciales o no, el script intentará enumerar los permisos del depósito utilizando la API TestIamPermissions sin estar autenticado. Esto significa que si no ingresa las credenciales, solo se le mostrarán los privilegios que tiene un usuario no autenticado, pero si ingresa las credenciales, verá qué acceso tienen los usuarios autenticados en comparación con los usuarios no autenticados.
- ADVERTENCIA: Si se proporcionan credenciales, su nombre de usuario puede revelarse en los registros de acceso de cualquier depósito que descubra.
Resumen de TL;DR
- Dada una palabra clave, esta secuencia de comandos enumera los depósitos de Google Storage en función de una cantidad de permutaciones generadas a partir de la palabra clave.
- Luego, se generará cualquier depósito descubierto.
- Luego, se generarán todos los permisos que se le otorguen (si corresponde) para cualquier depósito descubierto.
- Luego, el script verificará esos privilegios para ver si hay escalada de privilegios (storage.buckets.setIamPolicy) y generará cualquier cosa interesante (como lista pública, escritura pública, lista autenticada, escalada de privilegios, etc.).
Requisitos
- Linux/OSX
- Windows sólo funciona para análisis no autenticados. Algo anda mal con la forma en que el script usa el módulo de subproceso, ya que falla cuando se usa un cliente de Google autenticado.
- Python3
- pip3
Instalación
-
git clone https://github.com/RhinoSecurityLabs/GCPBucketBrute.git
-
cd GCPBucketBrute/
-
pip3 install -r requirements.txt
o python3 -m pip install -r requirements.txt
Uso
Primero, determine el tipo de autenticación que desea utilizar para la enumeración entre una cuenta de usuario, una cuenta de servicio o una cuenta no autenticada. Si está utilizando una cuenta de servicio, proporcione la ruta del archivo a la clave privada mediante el argumento -f
/ --service-account-credential-file-path
. Si está utilizando una cuenta de usuario, no proporcione un argumento de autenticación. Luego se le pedirá que ingrese el token de acceso de su cuenta de usuario para acceder a las API de GCP. Si desea escanear completamente sin autenticar, pase el argumento -u
/ --unauthenticated
para ocultar las solicitudes de autenticación.
- Busque depósitos utilizando la palabra clave "prueba" sin estar completamente autenticado:
python3 gcpbucketbrute.py -k test -u
- Busque depósitos utilizando la palabra clave "prueba" mientras se autentica con una cuenta de servicio (clave privada almacenada en ../sa-priv-key.pem), generando resultados en out.txt en el directorio actual:
python3 gcpbucketbrute.py -k test -f ../sa-priv-key.pem -o ./out.txt
- Busque depósitos utilizando la palabra clave "prueba", utilizando un token de acceso a la cuenta de usuario, ejecutándose con 10 subprocesos en lugar de 5:
python3 gcpbucketbrute.py -k test -s 10
Argumentos disponibles
-
-k
/ --keyword
- Este argumento se utiliza para especificar qué palabra clave se utilizará para generar permutaciones. Esas permutaciones son las que se buscarán en Google Storage.
-
--check
- Este argumento es mutuamente excluyente con
-k
/ --keyword
y acepta una sola cadena. Le permite verificar sus permisos en un depósito en particular, en lugar de generar una lista de permutaciones basadas en una palabra clave. Esto puede repetirse para comprobar varios depósitos. Crédito: @BBerastegui
-
--check-list
- Este argumento es mutuamente excluyente con
-k
/ --keyword
y --check
. Le permite verificar los permisos de una lista de depósitos en un archivo. Deben aparecer uno por línea en un archivo de texto. Para leer desde la entrada estándar, pase -
como nombre de archivo.
-
-s
/ --subprocesses
- Este argumento especifica cuántos subprocesos se utilizarán para la enumeración de depósitos. El valor predeterminado es 5 y cuanto más alto establezca este valor, más rápida será la enumeración, pero sus solicitudes por segundo a Google aumentarán. Estos son esencialmente subprocesos, pero el script utiliza subprocesos en lugar de subprocesos para la ejecución paralela.
-
-f
/ --service-account-credential-file-path
- Este argumento es donde especifica la ruta al archivo de clave privada de la cuenta de servicio GCP que desea utilizar para autenticarse en Google Storage. Esto es opcional. Si desea utilizar un token de acceso, omita este argumento y se le solicitará el token para que no se guarde en su historial de línea de comandos. Más información aquí: https://google-auth.readthedocs.io/en/latest/user-guide.html#service-account-private-key-files y aquí: https://google-auth.readthedocs.io/ es/latest/user-guide.html#user-credentials
-
-u
/ --unauthenticated
- Este argumento fuerza una enumeración no autenticada. Con esta marca, no se le solicitarán credenciales y no se verificarán los permisos autenticados de los depósitos válidos.
-
-o
/ --out-file
- Este argumento le permite especificar una ruta de archivo (relativa o absoluta) a un archivo de registro para generar los resultados. El archivo se creará si aún no existe y se agregará si ya existe.
-
-w
/ --wordlist
- Este argumento le permite especificar un archivo de entrada de lista de palabras.