GCPBucketBrute
Скрипт для перечисления сегментов Google Storage, определения вашего доступа к ним и определения возможности повышения их привилегий.
- Этот скрипт (необязательно) принимает учетные данные пользователя/службы GCP и ключевое слово.
- Затем на основе этого ключевого слова будет создан список перестановок, который затем будет использоваться для сканирования на наличие сегментов хранилища Google с этими именами.
- Если предоставлены учетные данные, большая часть перечисления по-прежнему будет выполняться без проверки подлинности, но для любого сегмента, обнаруженного с помощью перечисления без проверки подлинности, будет предпринята попытка перечислить разрешения сегмента с помощью API TestIamPermissions с предоставленными учетными данными. Это поможет найти сегменты, которые доступны при аутентификации, но не при отсутствии аутентификации.
- Независимо от того, предоставлены учетные данные или нет, сценарий затем попытается перечислить разрешения сегмента с помощью API TestIamPermissions, не пройдя проверку подлинности. Это означает, что если вы не введете учетные данные, вам будут показаны только привилегии, которыми обладает неаутентифицированный пользователь, но если вы введете учетные данные, вы увидите, какой доступ имеют аутентифицированные пользователи по сравнению с неаутентифицированными пользователями.
- ВНИМАНИЕ: Если предоставлены учетные данные, ваше имя пользователя может быть раскрыто в журналах доступа любых обнаруженных вами сегментов.
TL;DR Резюме
- Учитывая ключевое слово, этот скрипт перечисляет сегменты хранилища Google на основе ряда перестановок, сгенерированных на основе ключевого слова.
- Затем будет выведена любая обнаруженная корзина.
- Затем будут выведены все разрешения, предоставленные вам (если таковые имеются) для любого обнаруженного сегмента.
- Затем скрипт проверит эти привилегии на предмет повышения привилегий (storage.buckets.setIamPolicy) и выведет что-нибудь интересное (например, публично доступное для публикации, публично доступное для записи, аутентифицированное перечисление, повышение привилегий и т. д.).
Требования
- Линукс/ОС Х
- Windows работает только для сканирования без проверки подлинности. Что-то не так с тем, как сценарий использует модуль подпроцесса: он не работает при использовании аутентифицированного клиента Google.
- Python3
- Пип3
Установка
-
git clone https://github.com/RhinoSecurityLabs/GCPBucketBrute.git
-
cd GCPBucketBrute/
-
pip3 install -r requirements.txt
или python3 -m pip install -r requirements.txt
Использование
Сначала определите тип аутентификации, который вы хотите использовать для перечисления между учетной записью пользователя, учетной записью службы или неаутентифицированной учетной записью. Если вы используете учетную запись службы, укажите путь к файлу закрытого ключа с помощью аргумента -f
/ --service-account-credential-file-path
. Если вы используете учетную запись пользователя, не указывайте аргумент аутентификации. Затем вам будет предложено ввести токен доступа вашей учетной записи пользователя для доступа к API GCP. Если вы хотите сканировать полностью без аутентификации, передайте аргумент -u
/ --unauthenticated
чтобы скрыть запросы аутентификации.
- Сканируйте сегменты, используя ключевое слово «тест», не аутентифицируясь:
python3 gcpbucketbrute.py -k test -u
- Сканируйте сегменты, используя ключевое слово «test» при аутентификации с помощью учетной записи службы (закрытый ключ хранится в ../sa-priv-key.pem), выводя результаты в out.txt в текущем каталоге:
python3 gcpbucketbrute.py -k test -f ../sa-priv-key.pem -o ./out.txt
- Сканируйте сегменты, используя ключевое слово «тест», используя токен доступа к учетной записи пользователя и выполняя 10 подпроцессов вместо 5:
python3 gcpbucketbrute.py -k test -s 10
Доступные аргументы
-
-k
/ --keyword
- Этот аргумент используется для указания того, какое ключевое слово будет использоваться для создания перестановок. Именно эти перестановки будут искаться в хранилище Google.
-
--check
- Этот аргумент является взаимоисключающим с
-k
/ --keyword
и принимает одну строку. Это позволяет вам проверять ваши разрешения для определенного сегмента, а не создавать список перестановок на основе ключевого слова. Это можно повторить, чтобы проверить несколько сегментов. Кредит: @BBerastegui
-
--check-list
- Этот аргумент является взаимоисключающим с параметрами
-k
/ --keyword
и --check
. Это позволяет вам проверять права доступа к списку сегментов в файле. Они должны быть перечислены по одной строке в текстовом файле. Для чтения со стандартного ввода укажите -
в качестве имени файла.
-
-s
/ --subprocesses
- Этот аргумент указывает, сколько подпроцессов будет использоваться для перечисления сегментов. По умолчанию установлено значение 5, и чем выше вы установите это значение, тем быстрее будет перечисление, но количество запросов в секунду к Google увеличится. По сути, это потоки, но для параллельного выполнения скрипт использует подпроцессы вместо потоков.
-
-f
/ --service-account-credential-file-path
- В этом аргументе вы указываете путь к файлу закрытого ключа учетной записи службы GCP, которую вы хотите использовать для аутентификации в хранилище Google. Это необязательно. Если вместо этого вы хотите использовать токен доступа, опустите этот аргумент, и вам будет предложено ввести токен, чтобы он не сохранялся в истории командной строки. Дополнительную информацию можно найти здесь: https://google-auth.readthedocs.io/en/latest/user-guide.html#service-account-private-key-files и здесь: https://google-auth.readthedocs.io/ ru/latest/user-guide.html#user-credentials
-
-u
/ --unauthenticated
- Этот аргумент вызывает неаутентифицированное перечисление. При использовании этого флага вам не будут запрашиваться учетные данные, а действительные сегменты не будут проверяться на наличие аутентифицированных разрешений.
-
-o
/ --out-file
- Этот аргумент позволяет указать (относительный или абсолютный) путь к файлу журнала, в который будут выводиться результаты. Файл будет создан, если он еще не существует, и будет добавлен, если он уже существует.
-
-w
/ --wordlist
- Этот аргумент позволяет вам указать входной файл списка слов.