Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
profilehound — ProfileHound — коллектор OpenGraph для BloodHound, собирающий пользовательские профили, хранящиеся на машинах домена. Принимайте обоснованные решения о добыче секретов, выявляя активные пользовательские профили на машинах домена. | Kitploit
Инструменты/GitHubGitHub/m4lwhere/profilehound
OSINT (Разведка открытых источников)РазведкаЛатеральное перемещениеСбор информацииПост-эксплуатацияТестирование на ПроникновениеRed Teaming
GitHubm4lwhere/profilehound

profilehound

ProfileHound — коллектор OpenGraph для BloodHound, собирающий пользовательские профили, хранящиеся на машинах домена. Принимайте обоснованные решения о добыче секретов, выявляя активные пользовательские профили на машинах домена.

Репозиторий
163944 месяцев назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
root@kitploit:~
    ____             _____ __     __  __                      __
   / __ \_________  / __(_) /__  / / / /___  __  ______  ____/ /
  / /_/ / ___/ __ \/ /_/ / / _ \/ /_/ / __ \/ / / / __ \/ __  /
 / ____/ /  / /_/ / __/ / /  __/ __  / /_/ / /_/ / / / / /_/ /
/_/   /_/   \____/_/ /_/_/\___/_/ /_/\____/\__,_/_/ /_/\__,_/

ProfileHound

ProfileHound — это инструмент пост-эскалации, помогающий находить и достигать целей red teaming путём обнаружения доменных пользовательских профилей на машинах. Он использует формат OpenGraph от BloodHound для создания нового ребра HasUserProfile, которое определяет, существует ли профиль пользователя на компьютере. Это ребро позволяет операторам принимать обоснованные решения о том, какие компьютеры выбирать целью для извлечения секретов.

Для перечисления пользовательских профилей инструменту требуется административный доступ к ресурсу C$ на целевых машинах.

Огромное спасибо Remi Gascou (@podalirius) за инструменты ShareHound и bhopengraph. Я давно хотел создать инструмент для сбора этих данных, и использование этих библиотек позволило мне сосредоточиться на разработке, а не на подключении.

[!WARNING] ProfileHound находится на ранней стадии разработки, и ещё не все режимы сбора реализованы. Используйте с осторожностью в production-средах; вы принимаете на себя риски, связанные с использованием этого инструмента.

Зачем?

Цели пост-эксплуатации в Active Directory сместились с данных, хранящихся локально, в SaaS-приложения и облако. Чтобы доказать ценность в offsec, нужно показать, как может быть скомпрометирован доступ к этим сервисам. Во многих случаях эти сервисы используются только определёнными группами или пользователями, например HR, Finance и т. д. В некоторых сценариях доступ к отдельным SaaS-приложениям возможен только с конкретных машин.

Ребро HasSession в BloodHound отлично подходит, но оно полезно только когда пользователь выполнил вход на машину. Если пользователь не был залогинен на машине на момент сбора данных, может быть сложно определить, какой компьютер содержит секреты для дальнейшей эксплуатации. Пользовательские профили могут содержать значительный объём ценных данных: DPAPI, кэшированные учётные данные, SSH-ключи, облачные ключи и многое другое — для доступа к ним не требуется активная пользовательская сессия.

HasUserProfile Edge Example

ProfileHound использует формат OpenGraph BloodHound для построения нового ребра графа HasUserProfile, определяющего, существует ли профиль пользователя на доменной машине. Это помогает операторам сосредоточиться на машинах, где профиль есть у ценного пользователя или группы.

Ребро HasUserProfile содержит свойства с датой создания и последнего изменения профиля. Эта информация помогает определить:

  • активно ли используется профиль (вход выполнялся в последние несколько дней);
  • использовался ли профиль годами (вероятно, содержит множество секретов!).

HasUserProfile Edge Properties Example

Кроме того, это ребро содержит метки времени создания и изменения профиля, что позволяет с помощью конкретных Cypher-запросов находить активные или давно существующие профили пользователей на определённых машинах.

Установка

Установите ProfileHound с помощью pipx (если только вы не любите зависимостный ад):

root@kitploit:~
pipx install profilehound

Чтобы использовать самую свежую версию, можно установить из исходников:

root@kitploit:~
pipx install git+https://github.com/m4lwhere/profilehound.git

Docker

Для контейнерного подхода соберите образ и запустите инструмент следующим образом:

root@kitploit:~
docker build -t profilehound .
docker run --rm profilehound --help
docker run --rm -v ${PWD}:/profilehound profilehound --auth-user alice --auth-password whiteRabbit --auth-domain sccm.lab --dns 192.168.57.10 --auth-dc-ip 192.168.57.10

Использование

Например, для запуска с учётной записью администратора домена sccm.lab\alice и паролем whiteRabbit:

root@kitploit:~
$ profilehound --auth-user alice --auth-password whiteRabbit --auth-domain sccm.lab --target 192.168.57.0/27
    ____             _____ __     __  __                      __
   / __ \_________  / __(_) /__  / / / /___  __  ______  ____/ /
  / /_/ / ___/ __ \/ /_/ / / _ \/ /_/ / __ \/ / / / __ \/ __  /
 / ____/ /  / /_/ / __/ / /  __/ __  / /_/ / /_/ / / / / /_/ /
/_/   /_/   \____/_/ /_/_/\___/_/ /_/\____/\__,_/_/ /_/\__,_/    v0.1.1
@m4lwhere

BloodHound CE OpenGraph collector for user profiles stored on domain machines.

[12/30/25 11:58:05] INFO     Loaded 32 targets
[12/30/25 11:58:08] INFO     Successful authentication on 192.168.57.10 (192.168.57.10) as sccm.lab\alice
                    INFO     Successfully connected to share \\192.168.57.10\C$ as sccm.lab\alice
                    INFO     Enumerating profiles in \\192.168.57.10\C$\Users\...
                    INFO         vagrant:    S-1-5-21-3016982856-3796307652-1246469985-1000  created:2025-11-07      modified:2025-11-07
                    INFO     Found 1 domain profile(s) for 192.168.57.10
                    INFO     Successful authentication on 192.168.57.11 (192.168.57.11) as sccm.lab\alice
[12/30/25 11:58:09] INFO     Successfully connected to share \\192.168.57.11\C$ as sccm.lab\alice
                    INFO     Enumerating profiles in \\192.168.57.11\C$\Users\...
                    INFO         administrator:      S-1-5-21-3016982856-3796307652-1246469985-500   created:2025-11-07      modified:2025-11-07
                    INFO         alice:      S-1-5-21-3016982856-3796307652-1246469985-1112  created:2025-12-28      modified:2025-11-07
                    INFO         eve:        S-1-5-21-3016982856-3796307652-1246469985-1116  created:2025-12-27      modified:2025-11-07
                    INFO     Found 3 domain profile(s) for 192.168.57.11
                    INFO     Successful authentication on 192.168.57.12 (192.168.57.12) as sccm.lab\alice
                    INFO     Successfully connected to share \\192.168.57.12\C$ as sccm.lab\alice
                    INFO     Enumerating profiles in \\192.168.57.12\C$\Users\...
                    INFO         alice:      S-1-5-21-3016982856-3796307652-1246469985-1112  created:2025-12-28      modified:2025-12-28
                    INFO         franck:     S-1-5-21-3016982856-3796307652-1246469985-1117  created:2025-12-27      modified:2025-11-07
                    INFO         sccm-sql:   S-1-5-21-3016982856-3796307652-1246469985-1121  created:2025-11-07      modified:2025-11-07
                    INFO     Found 3 domain profile(s) for 192.168.57.12
                    INFO     Successful authentication on 192.168.57.13 (192.168.57.13) as sccm.lab\alice
                    INFO     Successfully connected to share \\192.168.57.13\C$ as sccm.lab\alice
                    INFO     Enumerating profiles in \\192.168.57.13\C$\Users\...
                    INFO         alice:      S-1-5-21-3016982856-3796307652-1246469985-1112  created:2025-12-26      modified:2025-12-28
                    INFO         sccm-account-da:    S-1-5-21-3016982856-3796307652-1246469985-1119  created:2025-12-26      modified:2025-11-07
                    INFO     Found 2 domain profile(s) for 192.168.57.13
[12/30/25 11:59:27] INFO     Found 4 machines with profiles
                    INFO     Exported OpenGraph intel to profilehound_20251230-115805.json

Эта команда создаёт файл profilehound_20251230-115805.json в текущем каталоге. Этот файл можно импортировать прямо в BHCE, перетащив его в интерфейс BloodHound. Он будет автоматически разобран, а узлы будут сопоставлены по SID. Будет создано новое ребро HasUserProfile, показывающее связь между пользователем и профилем.

Кроме того, по завершении ProfileHound выведет в консоль краткую сводку статистики:

root@kitploit:~
╭───────────────────────── General Summary ──────────────────────────────╮
│        ProfileHound Statistics                                         │
│  Total Targets with Profiles    4                                      │
│  Total Unique Profiles (Users)  7                                      │
│  Average Profiles per Target    2.25                                   │
╰────────────────────────────────────────────────────────────────────────╯
       Top Connected Users
┏━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ User          ┃ Machine Count ┃
┡━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ alice         │ 3             │
│ vagrant       │ 1             │
│ administrator │ 1             │
│ eve           │ 1             │
│ franck        │ 1             │
└───────────────┴───────────────┘
     Top Populated Machines
┏━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Machine       ┃ Profile Count ┃
┡━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ 192.168.57.11 │ 3             │
│ 192.168.57.12 │ 3             │
│ 192.168.57.13 │ 2             │
│ 192.168.57.10 │ 1             │
└───────────────┴───────────────┘
                       Oldest User Profiles
┏━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ User            ┃ Machine         ┃ Created    ┃ Last Modified ┃
┡━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ vagrant         │ DC.sccm.lab     │ 2025-11-07 │ 2025-11-07    │
│ sccm-sql        │ MSSQL.sccm.lab  │ 2025-11-07 │ 2025-11-07    │
│ administrator   │ MECM.sccm.lab   │ 2025-11-07 │ 2025-11-07    │
│ sccm-account-da │ CLIENT.sccm.lab │ 2025-12-26 │ 2025-11-07    │
│ alice           │ CLIENT.sccm.lab │ 2025-12-26 │ 2025-12-28    │
└─────────────────┴─────────────────┴────────────┴───────────────┘
                Longest Lived Profiles (Created -> Modified)
┏━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ User          ┃ Machine         ┃ Age (Days) ┃ Created    ┃ Last Modified ┃
┡━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ alice         │ CLIENT.sccm.lab │ 1.8        │ 2025-12-26 │ 2025-12-28    │
│ alice         │ MSSQL.sccm.lab  │ 0.0        │ 2025-12-28 │ 2025-12-28    │
│ sccm-sql      │ MSSQL.sccm.lab  │ 0.0        │ 2025-11-07 │ 2025-11-07    │
│ administrator │ MECM.sccm.lab   │ 0.0        │ 2025-11-07 │ 2025-11-07    │
│ vagrant       │ DC.sccm.lab     │ 0.0        │ 2025-11-07 │ 2025-11-07    │
└───────────────┴─────────────────┴────────────┴────────────┴───────────────┘
                     Top 5 Machines to Focus On (Hubs)
┏━━━━━━━━━━━━━━━━━┳━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Machine         ┃ Score ┃ Reason                                         ┃
┡━━━━━━━━━━━━━━━━━╇━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ MECM.sccm.lab   │ 4.5   │ Has 3 profiles, potential lateral movement hub │
│ MSSQL.sccm.lab  │ 4.5   │ Has 3 profiles, potential lateral movement hub │
│ CLIENT.sccm.lab │ 3.5   │ Has 2 profiles, potential lateral movement hub │
│ DC.sccm.lab     │ 1.0   │ Has 1 profiles, potential lateral movement hub │
└─────────────────┴───────┴────────────────────────────────────────────────┘

Как это работает

ProfileHound использует ресурс C$ для перечисления пользовательских профилей на доменной машине по пути \\<target>\C$\Users\. Он читает файл NTUSER.DAT пользователя, чтобы определить, является ли учётная запись доменной или локальной, извлекая SID из метаданных файла. Например, инструмент собирает все пользовательские каталоги в \\<target>\C$\Users\, а затем проходит по каждому каталогу в поисках файла NTUSER.DAT по пути \\<target>\C$\Users\<username>\NTUSER.DAT. Если файл NTUSER.DAT принадлежит известному SID, ProfileHound пытается найти SID пользователя, читая его каталог DPAPI (например, \\<target>\C$\Users\<username>\AppData\Roaming\Microsoft\Protect\<SID>).

Поскольку мы обращаемся к ресурсу C$, для аутентификации на целевой машине нужна учётная запись администратора. ProfileHound использует предоставленные учётные данные для аутентификации на целевой машине. Если вы используете доменную учётную запись, можно указать домен с помощью опции --auth-domain. Если вы используете локальную учётную запись, используйте опцию --smb-local-auth.

По умолчанию ProfileHound останавливается после сбоя доменной аутентификации SMB, чтобы снизить риск блокировки учётных записей. Если ожидается, что некоторые конечные точки отклонят доменную аутентификацию, и вы хотите продолжить сканирование остальных целей, используйте --smb-ignore-failed-domain-auth.

Если ProfileHound остановится во время сбора данных по SMB после того, как профили уже найдены, он попытается перед выходом экспортировать частичные результаты OpenGraph.

Время создания и последнего изменения файла NTUSER.DAT собирается и может использоваться для определения активности профиля. Эта корреляция выполняется в Cypher-запросах по свойствам ребра; примеры приведены ниже.

Интересно отметить, что если файл NTUSER.DAT изменён раньше, чем создан, скорее всего, профиль был создан, но не использовался по-настоящему. Это происходит потому, что при создании нового профиля пользователя файл NTUSER.DAT копируется из профиля C:\Users\Default, сохраняя ту же дату изменения, хотя дата создания более поздняя. Поэтому можно с достаточной уверенностью предположить, что такой профиль не содержит секретов.

Выбор целей

ProfileHound использует ShareHound от @podalirius_ в качестве библиотеки для перечисления целей. Если параметры --target или --target-file не указаны, ProfileHound перечисляет цели автоматически, подключаясь к LDAP для сбора всех FQDN машин в домене.

Полезные запросы

Из этих данных можно сделать множество важных выводов, указывающих, на чём стоит сосредоточить внимание. Все эти запросы можно импортировать в BloodHound, перетащив файл ProfileHound_Cypher_Queries.zip в интерфейс BloodHound с помощью кнопки Import на странице Saved Queries. Вот несколько примеров:

Поиск всех рёбер пользовательских профилей

Это простой запрос, который находит все пользовательские профили в графе.

root@kitploit:~
MATCH p=(u:User)-[:HasUserProfile]->(c:Computer)
RETURN p

Поиск профилей пользователей по имени группы

Этот запрос находит все профили пользователей, входящих в группу "Administrators" домена.

root@kitploit:~
MATCH p=(g:Group)<-[:MemberOf*1..]-(u:User)-[:HasUserProfile]->(c:Computer)
WHERE toLower(g.samaccountname) = "administrators"
RETURN p

Поиск профилей пользователей, активных за последние 3 дня

Этот запрос находит все профили, изменённые за последние 3 дня. Это помогает определить, какая машина может быть основной для пользователя и содержать хорошую добычу.

root@kitploit:~
WITH 3 as active_days
MATCH p = (u:User)-[e:HasUserProfile]-(c:Computer)
WHERE e.profileModified > (datetime().epochseconds - (active_days * 86400))
RETURN p

Активные профили пользователей в конкретной группе (мощный запрос)

Это чрезвычайно мощный запрос для поиска конкретных профилей пользователей, использовавшихся за последние 3 дня участниками определённой группы.

root@kitploit:~
WITH 3 as active_days, "administrators" as group_name
MATCH p = (g:Group)<-[:MemberOf*1..]-(u:User)-[e:HasUserProfile]-(c:Computer)
WHERE e.profileModified > (datetime().epochseconds - (active_days * 86400)) AND toLower(g.samaccountname) = group_name
RETURN p

Удаление неиспользуемых профилей пользователей

Этот запрос удаляет все профили, у которых файл NTUSER.DAT изменён раньше даты создания. Это указывает на то, что профиль был создан, но не использовался по-настоящему. Данное состояние возникает из-за того, что при создании нового профиля файл NTUSER.DAT копируется из профиля C:\Users\Default, сохраняя ту же дату изменения, хотя дата создания более поздняя.

root@kitploit:~
match p = (u:User)-[e:HasUserProfile]-(c:Computer)
where e.profileCreated < e.profileModified
return p

Благодарности

Это было бы просто невозможно без библиотек Remi Gascou (@podalirius) — ShareHound и bhopengraph.

Планы по улучшению

Основной фокус этого инструмента — определение машин, которые с наибольшей вероятностью содержат секреты конкретных пользователей. Будущие улучшения будут включать:

  • Реализовать SCCMHunter от @garrettfoster13 в качестве библиотеки для улучшения сбора данных.
    • Использовать функцию get_lastlogon для создания рёбер HasUserProfile на машинах.
    • Использовать функцию get_puser, чтобы связать доменных пользователей как владельцев основных устройств для конкретных машин.
  • Реализовать корреляцию владения устройствами Azure AD на основе данных AzureHound.
    • Похоже, это уже собирается как объект AZDeviceOwner в .data.owners[owner.DeviceOwner.onPremisesSecurityIdentifier]
  • Использовать ShareHound для обхода подходящих профилей в поисках конфиденциальных файлов и импорта их в граф.
  • Извлекать из файла NTUSER.DAT данные о недавних программах, документах и активности браузера.
Скачать инструмент