
Сканирует публичные конечные точки объектного хранилища в облаках Yandex, VK, Selectel, Sber, Alibaba, Tencent, Huawei и Baidu для поиска бакетов с открытым листингом и доступных объектов.
Сканер открытого облачного объектного хранилища и CLI для работы с хранилищем в режиме только чтения, предназначенный для авторизованного тестирования безопасности, работы по bug bounty и инфраструктуры, которой вы владеете.
BucketBuster проверяет имена-кандидаты бакетов по публичным эндпоинтам Yandex Cloud, VK Cloud, Selectel, SberCloud, Alibaba OSS, Tencent COS, Huawei OBS, Baidu BOS и China Mobile Cloud EOS. Он может выявлять публично доступные для листинга бакеты, сопоставлять имена объектов, связанных с сертификатами, и при необходимости скачивать публично доступные объекты через HTTP GET. Команды работы с хранилищем также поддерживают аутентифицированные листинги, загрузки, метаданные и подписанные URL с использованием нативных учётных данных каждого провайдера.
Требуется авторизация: Используйте этот инструмент только против активов, которыми вы владеете или на тестирование которых у вас есть явное разрешение. Сканирование или скачивание данных из сторонних бакетов может быть незаконным. Вы несёте ответственность за соблюдение применимых законов, договоров, правил bug bounty и политик провайдеров.
scan.git clone <repository-url>
cd bucketbuster
python -m venv .venv
Активируйте виртуальное окружение:
# Linux/macOS
source .venv/bin/activate
# Windows PowerShell
.\.venv\Scripts\Activate.ps1
Установите зависимости:
python -m pip install -r requirements.txt
Создайте список слов, например buckets.txt:
example-company
example-company-backup
example-company-documents
Запустите набор провайдеров по умолчанию, Yandex Cloud и VK Cloud:
python bucketbuster.py scan --wordlist buckets.txt
Сканер сообщает об ответах HTTP 200, публичных листингах, совпадающих именах объектов и эндпоинтах с отказом в доступе, которые, по-видимому, существуют. Ответ 404 игнорируется.
Изменение CLI: Теперь команда обязательна. Существующие вызовы, начинающиеся с
python bucketbuster.py -w ..., должны стать python bucketbuster.py scan -w ....
| Флаг провайдера | Сервис | Включённые семейства эндпоинтов |
|---|---|---|
yandex | Yandex Cloud | Эндпоинты хранилища и веб-сайтов |
vk | VK Cloud | Эндпоинты vkcloud-storage.ru |
selectel | Selectel | Эндпоинты S3 и selstorage.ru |
sber | SberCloud | Эндпоинты OBS и s3.cloud.ru |
aliyun | Alibaba Cloud OSS | Отдельные регионы Китая |
tencent | Tencent Cloud COS | Отдельные регионы Китая и Азии |
huawei | Huawei Cloud OBS | Отдельные регионы Китая |
baidu | Baidu Cloud BOS | Отдельные регионы Китая и Азии |
cmecloud | China Mobile Cloud EOS | 30 регионов из предоставленного инструмента EOS |
Группы провайдеров:
--providers russia # yandex, vk, selectel, sber
--providers china # aliyun, tencent, huawei, baidu, cmecloud
--providers all # every supported provider
Можно также указать список через запятую, например:
python bucketbuster.py scan -w buckets.txt --providers aliyun,tencent
Каждый провайдер использует собственные учётные данные. Ключи одного провайдера никогда не переиспользуются
для другого, а несвязанные профили AWS, метаданные экземпляра или записи .netrc
не используются для аутентификации запросов.
| Провайдер | Аутентифицируемый API |
|---|---|
yandex, vk, selectel, cmecloud | S3 Signature V4 через boto3 |
aliyun | Нативный OSS V4 через oss2 |
tencent | Нативный COS через cos-python-sdk-v5 |
huawei | Нативный OBS через esdk-obs-python |
sber | OBS для obs.*.hc.sbercloud.ru; S3 для s3.cloud.ru |
baidu | Нативная подпись BCE/BOS для регионального BOS; S3 для s3.*.bcebos.com |
Задайте переменные окружения, используя флаг провайдера в верхнем регистре:
BUCKETBUSTER_<PROVIDER>_ACCESS_KEY_ID
BUCKETBUSTER_<PROVIDER>_ACCESS_KEY_SECRET
BUCKETBUSTER_<PROVIDER>_SESSION_TOKEN
BUCKETBUSTER_<PROVIDER>_ENDPOINT
BUCKETBUSTER_<PROVIDER>_REGION
Например, BUCKETBUSTER_CMECLOUD_ACCESS_KEY_ID и
BUCKETBUSTER_CMECLOUD_ACCESS_KEY_SECRET. CMECloud также принимает переменные
автономного инструмента EOS_ACCESS_KEY_ID, EOS_ACCESS_KEY_SECRET, EOS_SESSION_TOKEN,
EOS_ENDPOINT и EOS_REGION в качестве псевдонимов с более низким приоритетом.
Для команд работы с хранилищем явные --access-key-id, --access-key-secret и
необязательный --session-token переопределяют значения переменных окружения для каждого поля. Для сканирования
используйте флаги, специфичные для провайдера, например --cmecloud-access-key-id и
--cmecloud-access-key-secret; тот же шаблон работает для каждого провайдера.
Неполная пара ключей или токен без пары отклоняются.
Предпочитайте переменные окружения: секреты в командной строке могут попасть в историю оболочки и список процессов. Не включайте реальные учётные данные в отчёты или сообщения об ошибках.
Команды выбирают ровно один --provider; им не нужен список слов или проверка
всех регионов. Общие параметры могут указываться до или после команды, как в
предоставленном инструменте EOS:
python bucketbuster.py --provider cmecloud \
--endpoint eos-beijing-1.cmecloud.cn --region beijing-1 list-buckets
python bucketbuster.py list-objects --provider cmecloud \
--endpoint eos.ecso.hecd-1.cmecloud.cn --bucket example-company --key certificates/
python bucketbuster.py list-objects --provider cmecloud \
--bucket example-company --key certificates/ --max-keys 100
python bucketbuster.py list-objects-all --provider cmecloud \
--bucket example-company --prefix documents/
python bucketbuster.py download-bucket --provider cmecloud \
--bucket example-company --prefix documents/ --output-dir ./authorized-downloads
python bucketbuster.py get-object --provider cmecloud \
--bucket example-company --key documents/readme.txt --output ./readme.txt
python bucketbuster.py head-object --provider cmecloud \
--bucket example-company --key documents/readme.txt
python bucketbuster.py presign --provider cmecloud \
--bucket example-company --key documents/readme.txt --expires 600