
Быстрый инструмент для перечисления общедоступных блобов Azure Storage.
Goblob — это легковесный и быстрый инструмент для перебора, предназначенный для поиска конфиденциальной информации, публично доступной в Azure Blob, что может быть полезно для различных исследовательских целей, таких как оценка уязвимостей, тестирование на проникновение и разведка.
Предупреждение. Goblob запускает отдельные горутины для каждого имени контейнера в каждой учётной записи хранения, ограничиваясь только максимальным числом одновременных горутин, заданным флагом -goroutines. В большинстве случаев такая реализация может быстро исчерпать пропускную способность сети при использовании стандартного списка слов или потенциально стоить вам больших денег, если вы используете инструмент в облачной среде. Убедитесь, что вы понимаете, что делаете, перед запуском инструмента.
go install github.com/Macmod/goblob@latest
Чтобы использовать goblob, просто выполните следующую команду:
$ ./goblob <storageaccountname>
Где <storageaccountname> — целевая учётная запись хранения для перебора публичных URL Azure Blob Storage.
Вы также можете указать список имён учётных записей хранения для проверки:
$ ./goblob -accounts accounts.txt
По умолчанию инструмент использует список распространённых имён контейнеров Azure Blob Storage для построения потенциальных URL. Однако вы также можете указать собственный список имён контейнеров с помощью опции -containers. Пример:
$ ./goblob -accounts accounts.txt -containers wordlists/goblob-folder-names.txt
Инструмент также поддерживает вывод результатов в файл с помощью опции -output:
$ ./goblob -accounts accounts.txt -containers wordlists/goblob-folder-names.txt -output results.txt
Если вы хотите передать учётные записи для проверки через stdin, вы также можете полностью опустить флаг -accounts (или имя учётной записи):
$ cat accounts.txt | ./goblob
Goblob поставляется с базовыми списками слов, которые можно использовать с опцией -containers:
Goblob предоставляет несколько флагов, которые можно настроить для улучшения процесса перебора:
-goroutines=N — максимальное количество одновременных горутин (по умолчанию: 5000).-blobs=true — выводить URL каждого блоба вместо URL контейнера (по умолчанию: false).-verbose=N — уровень детализации (по умолчанию: 1, мин: 0, макс: 3).-maxpages=N — максимальное количество страниц контейнера для обхода в поисках блобов (по умолчанию: 20, установите -1 для отмены лимита или 0, чтобы вообще не выводить список блобов и только проверять, является ли контейнер публичным).-timeout=N — тайм-аут для HTTP-запросов (секунды, по умолчанию: 90).Например, если вы хотите просто найти публично открытые контейнеры, используя большие списки учётных записей хранения и имён контейнеров, следует установить -maxpages=0, чтобы горутины не разбивали результаты на страницы. Затем снова запустите инструмент на найденном наборе с параметрами -blobs=true и -maxpages=-1, чтобы получить фактические URL блобов.
Если же вы хотите проверить небольшой список очень популярных имён контейнеров на большом наборе учётных записей хранения, попробуйте -invertsearch=true с -maxpages=0, чтобы увидеть публичные учётные записи для каждого имени контейнера, а не имена контейнеров для каждой учётной записи хранения.
Вы также можете попробовать изменить -goroutines, -timeout, -maxidleconns, -maxidleconnsperhost, -maxconnsperhost и -skipssl, чтобы оптимально использовать свою пропускную способность и находить результаты быстрее.
Экспериментируйте с флагами, чтобы найти то, что лучше всего подходит для вас ;-)
Мы приветствуем вклад через создание issue или отправку pull request.
Интересная визуализация популярных имён контейнеров, найденных в моих экспериментах с инструментом:

Если вы хотите узнать больше о моих экспериментах и теме в целом, посмотрите мою статью:
Лицензия MIT (MIT)
Copyright (c) 2023 Artur Henrique Marzano Gonzaga
Данная лицензия разрешает лицам, получившим копию данного программного обеспечения и сопутствующей документации (в дальнейшем именуемыми «Программное Обеспечение»), безвозмездно использовать Программное Обеспечение без ограничений, включая неограниченное право на использование, копирование, изменение, объединение, публикацию, распространение, сублицензирование и/или продажу копий Программного Обеспечения, а также разрешать лицам, которым предоставляется данное Программное Обеспечение, делать это при соблюдении следующих условий:
Указанное выше уведомление об авторском праве и данные условия должны быть включены во все копии или значительные части Программного Обеспечения.
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ГАРАНТИЯМИ ТОВАРНОЙ ПРИГОДНОСТИ, СООТВЕТСТВИЯ ПО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ НАРУШЕНИЙ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО КАКИМ-ЛИБО ИСКАМ, УБЫТКАМ ИЛИ ИНЫМ ТРЕБОВАНИЯМ, ВОЗНИКШИМ ИЗ-ЗА ИСПОЛЬЗОВАНИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ В СВЯЗИ С НИМ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, НАРУШЕНИЯ ДОГОВОРА, ГРАЖДАНСКИЕ ПРАВОНАРУШЕНИЯ ИЛИ ИНЫЕ ДЕЙСТВИЯ.
-maxidleconns=N — параметр MaxIdleConns транспорта для HTTP-клиента (по умолчанию: 100).-maxidleconnsperhost=N — параметр MaxIdleConnsPerHost транспорта для HTTP-клиента (по умолчанию: 10).-maxconnsperhost=N — параметр MaxConnsPerHost транспорта для HTTP-клиента (по умолчанию: 0).-skipssl=true — пропускать проверку SSL (по умолчанию: false).-invertsearch=true — перебирать учётные записи для каждого контейнера вместо перебора контейнеров для каждой учётной записи (по умолчанию: false).