
Найти интересные файлы, хранящиеся на общих ресурсах SMB (System Center) Configuration Manager (SCCM/CM).
CMLoot был создан для удобного поиска интересных файлов, хранящихся на SMB-ресурсах System Center Configuration Manager (SCCM/CM). Эти ресурсы используются для распространения программного обеспечения на клиенты Windows в корпоративных средах Windows и могут содержать скрипты/конфигурационные файлы с паролями, сертификатами (pfx) и т.д. Большинство развертываний SCCM настроены так, чтобы все пользователи могли читать файлы на этих ресурсах, иногда доступ ограничен только компьютерными учетными записями.
Библиотека контента SCCM/CM имеет «сложную» (раздражающую) структуру файлов, которую CMLoot распутает для вас: https://techcommunity.microsoft.com/t5/configuration-manager-archive/understanding-the-configuration-manager-content-library/ba-p/273349
По сути, папка DataLib содержит файлы .INI, имена которых состоят из исходного имени файла + .INI. Файл .INI содержит хеш файла, а сам файл хранится в FileLib в формате <имя папки: 4 первых символа хеша>\полный хеш.
Можно применить контроль доступа к пакетам в CM. Однако это защищает только папку с дескриптором файла (DataLib), а не сам файл. Во время инвентаризации CMLoot будет записывать любой пакет, к которому он не может получить доступ (отказано в доступе), в файл _noaccess.txt. Затем Invoke-CMLootHunt может использовать этот файл для перечисления фактических файлов, которые пытается защитить контроль доступа.
Windows Defender для конечных точек (EDR) или другие механизмы безопасности могут сработать, так как скрипт анализирует много файлов через SMB.
Найдите серверы CM, выполнив поиск в Active Directory или получив этот ключ реестра на рабочей станции с установленным System Center:
(Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\SMS\DP -Name ManagementPoints).ManagementPoints
Может быть развернуто несколько серверов CM, и на них могут быть разные файлы, поэтому убедитесь, что вы нашли их все.
Затем вам нужно создать файл инвентаризации, который представляет собой текстовый файл, содержащий ссылки на дескрипторы файлов (.INI). Следующая команда проанализирует все файлы .INI на сервере SCCM, чтобы создать список доступных файлов.
PS> Invoke-CMLootInventory -SCCMHost sccm01.domain.local -Outfile sccmfiles.txt
Затем используйте созданный выше файл инвентаризации для загрузки интересующих файлов:
Выберите файлы с помощью GridView (эффективность может варьироваться при больших файлах инвентаризации):
PS> Invoke-CMLootDownload -InventoryFile .\sccmfiles.txt -GridSelect
Загрузите один файл, скопировав строку из текста инвентаризации:
PS> Invoke-CMLootDownload -SingleFile \\sccm\SCCMContentLib$\DataLib\SC100001.1\x86\MigApp.xml
Загрузите все файлы с определенным расширением:
PS> Invoke-CMLootDownload -InventoryFile .\sccmfiles.txt -Extension ps1
По умолчанию файлы загружаются в папку CMLootOut в каталоге, из которого вы запускаете скрипт; это можно изменить с помощью параметра -OutFolder. Файлы сохраняются в формате (папка: расширение файла)\(первые 4 символа хеша>_исходное имя файла).
Охота за файлами, которые CMLootInventory счел недоступными:
Invoke-CMLootHunt -SCCMHost sccm -NoAccessFile sccmfiles_noaccess.txt
Массовое извлечение MSI-файлов:
Invoke-CMLootExtract -Path .\CMLootOut\msi
Запуск инвентаризации, сканирование доступных файлов:

Выберите файлы с помощью GridSelect:

Загрузить все расширения:

Охота за "недоступными" файлами и извлечение MSI:

Tomas Rzepka / WithSecure