# Attacktive Directory

¡Hola!

En este *writeup* vamos a resolver la máquina **Attacktive Directory** de TryHackMe, una máquina de nivel de dificultad **media**. La podéis encontrar en el siguiente enlace:

{% embed url="<https://tryhackme.com/room/attacktivedirectory>" %}

### Reconocimiento

Como siempre, vamos a empezar la fase de enumeración lanzando un **nmap**, en esta ocasión también voy a exportar la captura de nmap a un archivo para tener los datos disponibles en caso de que más adelante fueran necesarios:

```
nmap -sC -sV <IP> -oN <NOMBRE_ARCHIVO>
```

El escaneo de nmap nos arroja los siguientes resultados:&#x20;

![](https://2774506079-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FGz5c7o5uHk00R3RpcW5l%2Fuploads%2F2KDg341igOk2vvT4e0BU%2FAD_nmap.png?alt=media\&token=82d739ac-84b9-4974-8b9c-751d0d28f9c2)

Entre la gran cantidad de puertos abiertos que encontramos vamos a centrarnos en los puertos relacionados con el protocolo **SMB**. Además como podemos ver hemos encontrado un nuevo dominio, `spookysec.local`, vamos a añadirlo al `/etc/hosts` de forma que sea más fácil de recordar y nos facilite el trabajo en los siguientes pasos.

![](https://2774506079-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FGz5c7o5uHk00R3RpcW5l%2Fuploads%2FsiqONWsyyz9AyJrnztTx%2FAD_etchosts.png?alt=media\&token=3e01a9f8-e3ae-411a-b7cc-a756ee2fa9bc)

Con **enum4linux** y el parámetro -a podemos realizar una serie de escaneos básicos para enumerar los puertos 139 y 445:

```
enum4linux -a <IP>
```

En este caso no nos reporta demasiada información de utilidad pero al menos si podemos comprobar el nombre del dominio coincide con la captura de nmap.

![](https://2774506079-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FGz5c7o5uHk00R3RpcW5l%2Fuploads%2FJRGWJcG6Bhwmt3WwnXlm%2FAD_enum4linux.png?alt=media\&token=ae867055-83a9-4fe7-b83d-3ca4e38eb7b3)

En los siguientes pasos vamos a estar utilizando varias herramientas de **Impacket** y también la utilidad **Kerbrute**, te dejo los enlaces por aquí:

{% embed url="<https://github.com/SecureAuthCorp/impacket>" %}

{% embed url="<https://github.com/ropnop/kerbrute>" %}

Con el objetivo de enumerar usuarios válidos del dominio podemos utilizar la utilidad Kerbrute  junto al parámetro *userenum* quedando de la siguiente forma:

```
kerbrute_linux_amd64 userenum --dc <Dominio> -d <Dominio> <Diccionario>
```

{% hint style="info" %}
Como especifican en TryHackMe, con el objetivo de acortar el tiempo de enumeración se pueden utilizar los diccionarios [userlist.txt](https://raw.githubusercontent.com/Sq00ky/attacktive-directory-tools/master/userlist.txt) y [password.txt](https://raw.githubusercontent.com/Sq00ky/attacktive-directory-tools/master/passwordlist.txt)
{% endhint %}

![](https://2774506079-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FGz5c7o5uHk00R3RpcW5l%2Fuploads%2FKBw09EZcZDYGia95Ogq5%2FAD_users.png?alt=media\&token=173f2622-182e-4041-b360-25fff9b86f1c)

Y con esto ya tenemos una lista de usuarios válidos y habremos terminado la fase de reconocimiento.

### Explotación

Entre los usuarios válidos que hemos extraído con Kerbrute destacan especialmente dos: svc-admin y backup.

Una vez terminada la fase de enumeración vamos a crackear contraseñas del Directorio Activo mediante un ataque tipo *AS-REP Roasting*. Vamos a empezar utilizando la utilidad **GetNPUsers** incluida en el paquete de herramientas *Impacket*. Para ello ejecutamos el siguiente comando sustituyendo los parámetros por los valores extraídos en la fase de enumeración:

```
python3 GetNPUsers.py <DOMINIO_DC>/<USUARIO_DC> -request -no-pass -dc-ip <DOMINIO_DC> > <ARCHIVO_SALIDA>
# Ejemplo:
# GetNPUsers.py THM-AD/svc-admin -request -no-pass -dc-ip spookysec.local > svc-admin_hash
```

Para ver una forma alternativa a la sugeria por TryHackMe vamos a crackear el hash con *John The Ripper* en lugar de *Hashcat*, la sintaxis quedaría de la siguiente forma:

```
john --wordlist=<Diccionario> --format=krb5asrep <Archivo_hash>
```

![](https://2774506079-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FGz5c7o5uHk00R3RpcW5l%2Fuploads%2FhcRhxTT8CsvgWWmz8fpC%2FAD_John.png?alt=media\&token=bea6985d-8996-464e-a6ed-009780e8f2b0)

Con esto ya tendremos la contraseña del usuario **svc-admin**.

Ahora que tenemos credenciales válidas vamos a utilizarlas para enumerar recursos compartidos bajo el protocolo SMB utilizando smbclient:

```
smbclient -L //<IP>/ --user svc-admin
```

![](https://2774506079-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FGz5c7o5uHk00R3RpcW5l%2Fuploads%2FQhHje09vwDKB3VycsnRU%2FAD_smbclient.png?alt=media\&token=4d52795a-53fc-4e78-85f0-71b912692992)

De la lista de recursos compartidos **backup** parece que es el que puede contener algo interesante. Vamos a echarle un vistazo:

```
smbclient //10.10.125.32/backup --user svc-admin
```

![](https://2774506079-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FGz5c7o5uHk00R3RpcW5l%2Fuploads%2FObOm7J4TfLa6mzfAQ4iS%2FAD_smbclient_backup.png?alt=media\&token=26d77a8b-b595-4fa8-8194-dec760bccdf2)

Efectivamente, contiene un archivo llamado `backup_credentials.txt`, vamos a traérnoslo a nuestra máquina con el comando *get*:

```
get backup_credentials.txt
```

Si visualizamos su contenido comprobamos que se trata de una string codificada en base64. Podemos decodearla directamente desde la línea de comandos con:

```
cat backup_credentials.txt | base64 -d
```

¡Y se nos mostrará las credenciales del usuario **backup**!

### Escalada de privilegios

Con las credenciales del usuario backup podemos utilizar la herramienta *secretsdump* de Impacket para extraer las credenciales de todos los usuarios del dominio:

```
secretsdump.py -just-dc <Usuario>:<Contraseña>@<IP_o_nombrededominio>
```

![](https://2774506079-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FGz5c7o5uHk00R3RpcW5l%2Fuploads%2F4S36nX6dlHZnUG0BBVdY%2FAD_secretsdump.png?alt=media\&token=10a408ad-9d77-47d9-9a9f-f2ca836c3be6)

Y con esto ya conseguimos el *hash* válido del usuario **Administrator** para utilizarlo con *evil-winrm* e ingresar como usuario de altos privilegios:

```
evil-winrm -i <IP> -u <Usuario> -H <Hash>
```

![](https://2774506079-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FGz5c7o5uHk00R3RpcW5l%2Fuploads%2F7IPzaw5N3WHuTac076KN%2FAD_Evil-winrm.png?alt=media\&token=2bc9716c-130a-4f4d-9ef0-75099140667f)

{% hint style="info" %}
También podemos crackear el hash para obtener la contraseña en texto claro
{% endhint %}

Y con esto ya podemos visualizar las *flags* y habremos terminado la máquina.

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯

Espero que este Writeup te haya sido de utilidad, si tienes alguna duda, sugerencia o simplemente te interesa este tipo de contenido no dudes en seguirme a través de cualquiera de mis redes sociales:

📝 LinkedIn ⮞ <https://www.linkedin.com/in/david-rodriguez-ramos/>\
▶️ YouTube ⮞ <https://www.youtube.com/c/xerosec>\
🐦 Twitter ⮞ <https://twitter.com/xerosec>\
🔴 Twitch ⮞ [https://www.twitch.tv/xerosec](https://www.twitch.tv/xerosec/)  \
💬 Discord ⮞ <https://discord.gg/E4AjK2XsFm>

¡Gracias por llegar hasta aquí!
