
smbcrawler — это бескомпромиссный инструмент, который принимает учётные данные и список хостов и «сканирует» (или «пауки») эти общие ресурсы.
SmbCrawler — это инструмент без излишеств, который использует учётные данные и список хостов, чтобы «ползать» (или «паучить») по этим общим ресурсам. Возможности:
Если вам нужны инструкции по установке пакета Python, рекомендую убедиться, что у вас установлен pipx, и выполнить pipx install smbcrawler.
SmbCrawler может автоматически преобразовывать некоторые двоичные файлы, такие как PDF, XLSX, DOCX, ZIP и т.д., в обычный текст с помощью MarkItDown. Поскольку этот пакет тянет много зависимостей, он помечен как дополнительный. Тем не менее, его настоятельно рекомендуется устанавливать для достижения наилучших результатов. Если вы хотите автоматически преобразовывать двоичные файлы, установите SmbCrawler следующим образом:
pipx install 'smbcrawler[binary-conversion]'
Добавление автодополнения в командной строке настоятельно рекомендуется. Будучи приложением Python, использующим библиотеку click, вы можете добавить автодополнение по табуляции для bash, zsh и fish, используя обычный механизм.
Запустите так (10 потоков, максимальная глубина 5):
$ smbcrawler crawl -i hosts.txt -u pen.tester -p iluvb0b -d contoso.local -t 10 -D 5
SmbCrawler претерпел существенную переработку. Наиболее значимые изменения:
Старые аргументы CLI, касающиеся «интересных файлов», «скучных общих ресурсов» и т.п., были громоздкими и запутанными. Вместо этого теперь используются «профили»; подробнее ниже.
Кроме того, я понял, что по сути заново изобрёл реляционные базы данных, но сделал это очень плохо, так почему бы не использовать SQLite напрямую? Подход с SQLite позволяет нам создать хороший интерактивный HTML-отчёт с высокой производительностью. При необходимости вы всё ещё можете экспортировать результаты в различных форматах, если вам нужно использовать данные в каком-то конвейере инструментов.
Старый способ, которым SmbCrawler сообщал о правах доступа, иногда был не очень полезен. Например, нередко у вас есть права на чтение в корневом каталоге общего ресурса, но все поддиректории защищены, например, для профилей пользователей. Теперь SmbCrawler будет сообщать, насколько глубоко он смог прочитать дерево каталогов общего ресурса, и достиг ли он максимума или мог бы зайти глубже, если бы вы указали большее значение для аргумента максимальной глубины.
Если вы предпочитаете старую версию, она всё ещё доступна на PyPI и может быть установлена, например, с помощью pipx install smbcrawler==0.2.0.
Во время выполнения вы можете использовать следующие клавиши:
p: приостановить краулер и пропустить отдельные хосты или общие ресурсы<пробел>: вывести текущий прогрессs: вывести более подробное обновление статусаДля получения дополнительной информации выполните smbcrawler -h.
Даже в сетях среднего размера SmbCrawler найдёт тонны данных. Задача в том, чтобы уменьшить количество ложных срабатываний.
Важно понимать, что права доступа могут применяться на уровне службы и на уровне файловой системы. Удалённая служба SMB может разрешить вам аутентификацию, и ваша учётная запись может в принципе иметь права на чтение, но она может не иметь этих прав на уровне файловой системы.
SmbCrawler сообщит, есть ли у вас права на:
--depth)Поскольку проверить права доступа к общим ресурсам SMB, не пытаясь выполнить соответствующее действие, нетривиально, SmbCrawler попытается создать директорию на каждом общем ресурсе. Её имя — smbcrawler_DELETEME_<8 случайных символов>, и она будет немедленно удалена, но всё же имейте это в виду.
[!WARNING] Иногда у вас есть разрешение на создание директорий, но не на их удаление, поэтому вы оставите пустую директорию.
Чтобы решить, что делать с определёнными общими ресурсами, файлами или директориями, в SmbCrawler есть функция под названием «профили». Взгляните на профиль по умолчанию.
Профили загружаются из файлов с расширениями *.yml или *.yaml из следующих мест:
$XDG_DATA_HOME/smbcrawler/ (по умолчанию ~/.local/share/smbcrawler)--extra-profile-directory--extra-profile-fileПрофили из каждого места переопределяют предыдущие определения.
Значение regex определяет, соответствует ли профиль, и используется последний совпавший профиль. Все регулярные выражения нечувствительны к регистру, что отражает наиболее распространённое поведение в мире Windows.
Поскольку может быть запутанно, как профили из разных источников работают вместе, обязательно используйте параметр --dry-run. Он показывает эффективную конфигурацию и больше ничего не делает.
Давайте рассмотрим каждый раздел, который всегда представляет собой список словарей. Каждый ключ словаря — это произвольная метка, а каждое значение — это снова словарь с различными свойствами.
comment: полезная строка, описывающая этот профильregex: регулярное выражение, определяющее, к каким файлам применяется этот профиль. Учитывается последнее совпавшее регулярное выражение.regex_flags: массив флагов, которые будут переданы функции match регулярного выраженияhigh_value (по умолчанию: false): если файл является «ценным», его наличие будет сообщено, но он не обязательно будет загружен (подумайте о виртуальных жёстких дисках — важны, но слишком велики для автоматической загрузки)download (по умолчанию: true): если true, будут загружены первые 200 КиБ (или весь файл, если high_value=true) и проанализированы на предмет секретовcomment, regex, regex_flags: то же, что и вышеhigh_value: о его наличии будет сообщено, а глубина обхода будет изменена на бесконечностьcrawl_depth: обходить этот общий ресурс или директорию на другую глубину, чем задано аргументом --depthcomment, regex_flags: то же, что и вышеregex: регулярное выражение, соответствующее секрету. Сам секрет может быть именованной группой с именем secret.Сначала имеет смысл запустить SmbCrawler с глубиной обхода 1, чтобы получить представление о том, с чем вы имеете дело. В этом первом запуске вы можете включить проверку записи с помощью -w:
$ smbcrawler -C permissions_check.crwl crawl -D1 -t10 -w \
-i <ВХОДНОЙ ФАЙЛ> -u <ПОЛЬЗОВАТЕЛЬ> -d <ДОМЕН> -p <ПАРОЛЬ>
Обратите внимание, что это проверяет только права на запись и чтение в корневой директории каждого общего ресурса. Только полный запуск покажет вам, насколько глубоко распространяются права на чтение.
После первоначальной проверки прав вы можете определить интересные и скучные общие ресурсы для вашего следующего запуска или нескольких запусков. Некоторые общие ресурсы, такие как SYSVOL и NETLOGON, появляются много раз, поэтому в следующем запуске вам следует установить глубину обхода равной нулю и выбрать один хост для сканирования этих дублирующихся общих ресурсов в третьем запуске. Вот пример:
$ smbcrawler -C dc_only.crwl crawl -D -1 <IP КОНТРОЛЛЕРА ДОМЕНА> \
-u <ПОЛЬЗОВАТЕЛЬ> -d <ДОМЕН> -p <ПАРОЛЬ>
$ smbcrawler -C full.crwl crawl -D5 -t10 -i <НОВЫЙ ВХОДНОЙ ФАЙЛ> \
-u <ПОЛЬЗОВАТЕЛЬ> -d <ДОМЕН> -p <ПАРОЛЬ> \
--extra-profile-file skip_sysvol.yml
Здесь skip_sysvol.yml будет:
shares:
sysvol:
comment: "Пропустить общие ресурсы sysvol и netlogon"
regex: 'SYSVOL|NETLOGON'
crawl_depth: 0
Не стесняйтесь включать сюда и другие общие ресурсы, которые, по вашему мнению, не стоят обхода.
Необработанные данные хранятся в базе данных SQLite и директории (по умолчанию output.crwl и output.crwl.d). Директория содержит ещё две директории: одну с загруженными файлами, уникализированными по хэшу содержимого, и директорию, зеркалирующую все общие ресурсы с символическими ссылками на файлы содержимого. Последнее удобно для grep'а по всем загруженным файлам.
Данные можно преобразовывать в различные форматы. Вы также можете просто открыть базу данных с помощью, например, sqlitebrowser. Некоторые полезные представления уже предопределены. Или вы можете выводить JSON и использовать jq для обработки данных.
Если вы хотите, например, отобразить все общие ресурсы, которые удалось прочитать за пределами корневой директории, в таблице LaTeX, используйте этот запрос:
SELECT target_id || " & " || name || " & " || remark || " \\"
FROM share
WHERE read_level > 0
ORDER BY target_id, name
Также есть экспериментальная функция вывода HTML. Она может быть не полностью полезна для больших объёмов данных.
Если вы заметили много ложных срабатываний или пропусков в сообщаемых секретах, пожалуйста, помогите и дайте мне знать. Вклад сообщества важен при попытке улучшить автоматическое обнаружение. Лучший сценарий: предоставьте pull request с изменениями в файле профиля по умолчанию.
Adrian Vollmer, SySS GmbH
MIT License; подробности см. в LICENSE.