Обновление инструмента для выявления связей и построения графов в 💻 Active Directory. Достаточно учетной записи доменного пользователя.
Отличный инструмент при пентесте 💻 AD среды.
Для сбора информации используются коллекторы bloodhound-ce или SharpHound
Bonus:
BadSuccessor query - dMSA (delegated Managed Service Account) в Windows Server 2025
MATCH (c1:Computer)-[:MemberOf*1..]->(g:Group) WHERE g.objectid ENDS WITH '-516' WITH COLLECT(c1.name) AS dcs MATCH (c2:Computer) WHERE c2.enabled = true AND (c2.operatingsystem contains '2025') AND (c2.name IN dcs) RETURN c2.name
Установка:
curl -L https://ghst.ly/getbhce | docker compose -f - up
http://localhost:8080/ui/login
Логин admin и сгенерированный пароль
Для обновления переходим в директорию с docker-compose.yml и запускаем:
docker compose pull && docker compose up
Сбор информации:
python3 bloodhound-python -u domain_user -p 'P@ss' -ns 10.0.0.1 -d contoso.com -c all --dns-tcp
Neo4j запросы:
# Domain Admins и время установки пароля
MATCH (g:Group) WHERE g.name =~ "(?i).*DOMAIN ADMINS.*" WITH g MATCH (g)<-
[r:MemberOf*1..]-(u) RETURN u.name AS User,
datetime({epochSeconds:toInteger(u.pwdlastset)}) as passwordLastSet, datetime({epochSeconds: toInteger(u.whencreated)}) AS dateCreated ORDER BY u.pwdlastset
# Сервисные УЗ, время установки пароля, дата создания
MATCH (u:User) WHERE u.hasspn=true AND (NOT u.name STARTS WITH 'KRBTGT') RETURN u.name
AS accountName, datetime({epochSeconds: toInteger(u.pwdlastset)}) AS passwordLastSet,
datetime({epochSeconds: toInteger(u.whencreated)}) AS dateCreated ORDER BY u.pwdlastset
# Пользователи и описание
MATCH (u:User) RETURN u.name as username, u.description as description
# Domain Admins или Administrators с сессией исключая DC
MATCH (c1:Computer)-[:MemberOf*1..]->(g:Group) WHERE g.objectid ENDS WITH '-516' WITH
COLLECT(c1.name) AS domainControllers
MATCH (n:User)-[:MemberOf*1..]->(g:Group) WHERE g.objectid ENDS WITH '-512' OR
g.objectid ENDS WITH '-544'
MATCH p = (c:Computer)-[:HasSession]->(n) WHERE NOT c.name in domainControllers return
p
# Неограниченное делегирование исключая DC
MATCH (c1:Computer)-[:MemberOf*1..]->(g:Group) WHERE g.objectid ENDS WITH '-516' WITH
COLLECT(c1.name) AS domainControllers
MATCH (c:Computer {unconstraineddelegation:true}) WHERE NOT c.name IN domainControllers
RETURN c
# Пользователи с ограниченным делегированием
MATCH p = ((u:User)-[r:AllowedToDelegate]->(c:Computer)) RETURN p
Подробный гайд:
➡️ The Ultimate Guide BHCE
➡️ Адаптация на русском
ADCS атаки:
➡️ Part 1
➡️ Part 2
➡️ Part 3
Ссылки:
💻 Home
💻 Download
➡️ Docs
P.S. Сам таки полностью перешел на CE версию и legacy использовать больше желания нет 👍😅
#bloodhound #pentest #active_directory #soft #bhce
✈️ Whitehat Lab 💬 Chat
