> For the complete documentation index, see [llms.txt](https://g4b0.gitbook.io/g4b0-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://g4b0.gitbook.io/g4b0-docs/documentation/active-directory/dcsync.md).

# DCSync

A lo largo de esta sección, alternaremos entre hosts de ataque Windows y Linux para desarrollar los distintos ejemplos. Puedes desplegar las máquinas al final de esta página y conectarte por RDP al host de ataque Windows (MS01) utilizando las credenciales htb-student:Academy\_student\_AD!.

Para las tareas que requieren interactuar desde un entorno Linux (como el uso de secretsdump.py), abre una consola de PowerShell dentro de MS01 y conéctate por SSH a la IP 172.16.5.225 con las credenciales htb-student:HTB\_@cademy\_stdnt!.

Como reto adicional, podrías intentar realizar todo este proceso directamente desde Windows. Esto es totalmente viable si utilizas una versión de secretsdump.exe compilada para Windows, ya que existen varios repositorios en GitHub que han adaptado la suite de herramientas de Impacket para este sistema operativo.

### Que es DCSync

DCSync es una técnica utilizada para robar la base de datos de contraseñas de Active Directory aprovechando el protocolo integrado Directory Replication Service Remote Protocol, el cual utilizan los Controladores de Dominio (DC) para replicar la información del dominio. Esto permite a un atacante hacerse pasar por un Controlador de Dominio para extraer los hashes NTLM de las contraseñas de los usuarios.

El núcleo de este ataque consiste en solicitar a un DC que replique las contraseñas haciendo uso del privilegio extendido DS-Replication-Get-Changes-All. Se trata de un derecho de control de acceso avanzado dentro de AD que autoriza explícitamente la replicación de datos secretos.

Para llevar a cabo este ataque, es necesario tener bajo control una cuenta que posea los privilegios para realizar la replicación del dominio (es decir, un usuario que tenga asignados los permisos Replicating Directory Changes y Replicating Directory Changes All). Los Domain Admins (Administradores de Dominio), Enterprise Admins (Administradores de Empresa) y los administradores de dominio predeterminados cuentan con este nivel de acceso por defecto.

### Verificacion del usuario Adunn a que grupos pertenece

```powershell
Get-DomainUser -Identity adunn | select samaccountname,objectsid,memberof,useraccountcontrol |fl
```

Usando PowerView, se puede verificar si un usuario tiene derechos de replicación obteniendo primero su SID y ejecutando el comando Get-ObjectAcl sobre el objeto del dominio para revisar todas sus Listas de Control de Acceso (ACLs). Al filtrar estos resultados buscando el SID del usuario, se confirma directamente si la cuenta posee dichos permisos asignados.

### Comprobamos los derechos de replicacion del usuario adunn

```powershell
$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 se poseen derechos como WriteDacl, es posible otorgar privilegios temporalmente a un usuario controlado para ejecutar un ataque DCSync y luego eliminarlos para ocultar el rastro. Este ataque de replicación se realiza utilizando herramientas como Mimikatz, Invoke-DCSync o secretsdump.py de Impacket; esta última, mediante la opción -just-dc, permite extraer directamente los hashes NTLM y las claves Kerberos del archivo NTDS, guardando los resultados en archivos locales de manera automática.

### Obteniendo los hashes NTLM con secretsdump.py

```bash
secretsdump.py -outputfile inlanefreight_hashes -just-dc INLANEFREIGHT/adunn@172.16.5.5 -just-dc-user syncron
```

Al extraer datos del NTDS (usualmente con secretsdump.py), puedes afinar la extracción y el análisis utilizando las siguientes banderas:

* Filtros de extracción: \* -just-dc-ntlm: Obtiene únicamente hashes NTLM.

```
-just-dc-user <USERNAME>: Extrae datos de un usuario específico.
```

* Análisis y Reporte: \* -pwd-last-set / -history: Muestran el último cambio y el historial de contraseñas (útil para crackeo offline).

```
-user-status: Identifica cuentas deshabilitadas. Esto es clave para limpiar la data y entregar estadísticas reales al cliente (porcentaje de crackeo, top 10, longitud y reutilización) basadas solo en usuarios activos.
```

* Archivos de salida: Usar la opción general -just-dc genera tres archivos: uno con hashes NTLM, otro con claves Kerberos, y un tercero con contraseñas en texto plano (solo si el dominio tiene habilitado el cifrado reversible).

### Listamos los hashes, llaves kerberos y passwords en texto claro

```bash
ls inlanefreight_hashes*
```

Aunque es poco común, ocasionalmente vemos cuentas con esta configuración. Normalmente, se establece para brindar soporte a aplicaciones que utilizan ciertos protocolos que requieren la contraseña del usuario para la autenticación.

### Verificacion de una cuenta con cifrado reversible

<figure><img src="/files/srlV1WuKyt9zSAedqUs7" alt=""><figcaption></figcaption></figure>

Cuando esta opción está configurada en una cuenta de usuario, no significa que las contraseñas se almacenen en texto plano. En su lugar, se almacenan utilizando cifrado RC4. El truco aquí es que la clave necesaria para descifrarlas se almacena en el registro (la Syskey) y puede ser extraída por un Administrador de Dominio o equivalente. Herramientas como secretsdump.py descifrarán cualquier contraseña almacenada usando cifrado reversible al volcar el archivo NTDS, ya sea como Administrador de Dominio o utilizando un ataque como DCSync. Si esta configuración se deshabilita en una cuenta, el usuario necesitará cambiar su contraseña para que se almacene mediante cifrado unidireccional. Cualquier contraseña configurada en cuentas con este ajuste habilitado se almacenará usando cifrado reversible hasta que sea modificada. Podemos enumerar esto utilizando el cmdlet Get-ADUser:

### Enumeracion mediante Get-ADUser

```powershell
Get-ADUser -Filter 'userAccountControl -band 128' -Properties userAccountControl
```

Podemos ver que una cuenta, proxyagent, también tiene configurada la opción de cifrado reversible con PowerView:

### Comprobando la opción de cifrado reversible mediante Get-DomainUser

```powershell
Get-DomainUser -Identity * | ? {$_.useraccountcontrol -like '*ENCRYPTED_TEXT_PWD_ALLOWED*'} |select samaccountname,useraccountcontrol
```

Observaremos que la herramienta descifró la contraseña y nos proporcionó el valor en texto plano.

### Mostrando la contraseña descifrada

```bash
cat inlanefreight_hashes.ntds.cleartext
```

He estado en algunos compromisos donde todas las cuentas de usuario se almacenaban utilizando cifrado reversible. Algunos clientes pueden hacer esto para poder volcar el NTDS y realizar auditorías periódicas de la fortaleza de las contraseñas sin tener que recurrir al descifrado de contraseñas sin conexión (offline cracking).

También podemos realizar el ataque con Mimikatz. Al usar Mimikatz, debemos apuntar a un usuario específico. Aquí apuntaremos a la cuenta de administrador incorporada. También podríamos apuntar a la cuenta krbtgt y usar esto para crear un Ticket Dorado (Golden Ticket) para mantener persistencia, pero eso está fuera del alcance de este módulo.

Además, es importante tener en cuenta que Mimikatz debe ejecutarse en el contexto del usuario que tiene privilegios de DCSync. Podemos utilizar runas.exe para lograr esto:

### Usando Runas.exe

```powershell
runas /netonly /user:INLANEFREIGHT\adunn powershell
```

Desde la sesión de PowerShell recién iniciada, podemos realizar el ataque:

### Realizando el ataque con mimikatz

```powershell
.\mimikatz.exe
privilege::debug
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://g4b0.gitbook.io/g4b0-docs/documentation/active-directory/dcsync.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
